v20220106
authorKilian Saffran <ksaffran@dks.lu>
Thu, 6 Jan 2022 14:04:53 +0000 (15:04 +0100)
committerKilian Saffran <ksaffran@dks.lu>
Thu, 6 Jan 2022 14:04:53 +0000 (15:04 +0100)
111 files changed:
DeveloperReadMe.md
app/data/help/staff/fr-prepare-workplan.md [new file with mode: 0644]
app/db.php
app/lib/POT/Company.php
app/lib/POT/Staff.php
app/lib/database.php
app/lib/version.php
app/log/sql.log
app/tmpl/block/common_head.html
app/tmpl/block/pnl_nodata.html
app/tmpl/module/admin/admin.html
app/tmpl/module/admin/companies.js
app/tmpl/module/admin/schemadataset.js
app/tmpl/module/admin/users.js
app/tmpl/module/admin/worktimes.js
app/tmpl/module/periods/staffperiodweeks.js
app/tmpl/module/staff/dlg_addstaff.html
app/tmpl/module/staff/staff.js
app/tmpl/module/staff/staffcontract.js
app/tmpl/module/staff/staffperiods.js
app/tmpl/module/staff/staffvacancy.js
app/vendors/flatpickr/flatpickr.js
app/vendors/tabulator/css/tabulator.css
app/vendors/tabulator/css/tabulator.min.css
app/vendors/tabulator/css/tabulator.min.css.map
app/vendors/tabulator/css/tabulator_midnight.css [new file with mode: 0644]
app/vendors/tabulator/css/tabulator_midnight.min.css [new file with mode: 0644]
app/vendors/tabulator/css/tabulator_midnight.min.css.map [new file with mode: 0644]
app/vendors/tabulator/css/tabulator_modern.css [new file with mode: 0644]
app/vendors/tabulator/css/tabulator_modern.min.css [new file with mode: 0644]
app/vendors/tabulator/css/tabulator_modern.min.css.map [new file with mode: 0644]
app/vendors/tabulator/css/tabulator_simple.css
app/vendors/tabulator/css/tabulator_simple.min.css
app/vendors/tabulator/css/tabulator_simple.min.css.map
app/vendors/tabulator/css/tabulator_site.css
app/vendors/tabulator/css/tabulator_site.min.css
app/vendors/tabulator/css/tabulator_site.min.css.map
app/vendors/tabulator/css/tabulator_site.orig.css [new file with mode: 0644]
app/vendors/tabulator/js/jquery_wrapper.js [new file with mode: 0644]
app/vendors/tabulator/js/jquery_wrapper.min.js [new file with mode: 0644]
app/vendors/tabulator/js/modules/accessor.js
app/vendors/tabulator/js/modules/accessor.min.js
app/vendors/tabulator/js/modules/ajax.js
app/vendors/tabulator/js/modules/ajax.min.js
app/vendors/tabulator/js/modules/calculation_colums.js
app/vendors/tabulator/js/modules/calculation_colums.min.js
app/vendors/tabulator/js/modules/clipboard.js
app/vendors/tabulator/js/modules/clipboard.min.js
app/vendors/tabulator/js/modules/data_tree.js
app/vendors/tabulator/js/modules/data_tree.min.js
app/vendors/tabulator/js/modules/download.js
app/vendors/tabulator/js/modules/download.min.js
app/vendors/tabulator/js/modules/edit.js
app/vendors/tabulator/js/modules/edit.min.js
app/vendors/tabulator/js/modules/export.js
app/vendors/tabulator/js/modules/export.min.js
app/vendors/tabulator/js/modules/filter.js
app/vendors/tabulator/js/modules/filter.min.js
app/vendors/tabulator/js/modules/format.js
app/vendors/tabulator/js/modules/format.min.js
app/vendors/tabulator/js/modules/frozen_columns.js
app/vendors/tabulator/js/modules/frozen_columns.min.js
app/vendors/tabulator/js/modules/frozen_rows.js
app/vendors/tabulator/js/modules/frozen_rows.min.js
app/vendors/tabulator/js/modules/group_rows.js
app/vendors/tabulator/js/modules/group_rows.min.js
app/vendors/tabulator/js/modules/history.js
app/vendors/tabulator/js/modules/history.min.js
app/vendors/tabulator/js/modules/html_table_import.js
app/vendors/tabulator/js/modules/html_table_import.min.js
app/vendors/tabulator/js/modules/keybindings.js
app/vendors/tabulator/js/modules/keybindings.min.js
app/vendors/tabulator/js/modules/menu.js
app/vendors/tabulator/js/modules/menu.min.js
app/vendors/tabulator/js/modules/moveable_columns.js
app/vendors/tabulator/js/modules/moveable_columns.min.js
app/vendors/tabulator/js/modules/moveable_rows.js
app/vendors/tabulator/js/modules/moveable_rows.min.js
app/vendors/tabulator/js/modules/mutator.js
app/vendors/tabulator/js/modules/mutator.min.js
app/vendors/tabulator/js/modules/page.js
app/vendors/tabulator/js/modules/page.min.js
app/vendors/tabulator/js/modules/persistence.js
app/vendors/tabulator/js/modules/persistence.min.js
app/vendors/tabulator/js/modules/print.js
app/vendors/tabulator/js/modules/print.min.js
app/vendors/tabulator/js/modules/reactive_data.js
app/vendors/tabulator/js/modules/reactive_data.min.js
app/vendors/tabulator/js/modules/resize_columns.js
app/vendors/tabulator/js/modules/resize_columns.min.js
app/vendors/tabulator/js/modules/resize_rows.js
app/vendors/tabulator/js/modules/resize_rows.min.js
app/vendors/tabulator/js/modules/resize_table.js
app/vendors/tabulator/js/modules/resize_table.min.js
app/vendors/tabulator/js/modules/responsive_layout.js
app/vendors/tabulator/js/modules/responsive_layout.min.js
app/vendors/tabulator/js/modules/select_row.js
app/vendors/tabulator/js/modules/select_row.min.js
app/vendors/tabulator/js/modules/sort.js
app/vendors/tabulator/js/modules/sort.min.js
app/vendors/tabulator/js/modules/validate.js
app/vendors/tabulator/js/modules/validate.min.js
app/vendors/tabulator/js/tabulator.es2015.js
app/vendors/tabulator/js/tabulator.es2015.min.js
app/vendors/tabulator/js/tabulator.js
app/vendors/tabulator/js/tabulator.min.js
app/vendors/tabulator/js/tabulator_core.js
app/vendors/tabulator/js/tabulator_core.min.js
dev/conf.sh
dev/db/potlu2_db.alicehartmann.pg.schema.sql [new file with mode: 0644]
dev/gendefaultschema.sh

index b92e936..c420e36 100644 (file)
@@ -88,8 +88,12 @@ Download [wkhtmlopdf](https://wkhtmltopdf.org/downloads.html) (for Debian Buster
 Setup [PerlBrew](https://perlbrew.pl/) and install perl-5.28.2  
 install `perlbrew install-cpanm`  
 Install required Modules:  
-^: `cpanm Algorithm::Diff Apache::LogFormat::Compiler AppConfig Archive::Tar Archive::Zip Audio::FLAC::Header Authen::SASL B::Hooks::EndOfScope BSD::Resource Business::Tax::VAT::Validation CGI CGI::Compile CGI::Emulate::PSGI CGI::Session CPAN::Meta::Check Canary::Stability Capture::Tiny Class::Inspector Class::Load Class::Load::XS Class::Method::Modifiers Clone Cookie::Baker Cpanel::JSON::XS Crypt::CBC Crypt::PasswdMD5 Crypt::RC4 Crypt::Random::Source Crypt::Rijndael Crypt::Rijndael::PP DBD::PgPP DBD::SQLite DBI Danga::Socket Data::OptList Date::Parse Devel::Caller Devel::GlobalDestruction Devel::OverloadInfo Devel::StackTrace Devel::StackTrace::AsHTML Digest::HMAC Digest::Perl::MD5 Digest::SHA Digest::SHA::PurePerl Dist::CheckConflicts Email::Address Email::Address::XS Email::Date::Format Email::MIME Email::MIME::ContentType Email::MIME::Encodings Email::MessageID Email::Simple Encode Encode::Locale Error Eval::Closure Exporter::Tiny ExtUtils::Config ExtUtils::Helpers ExtUtils::InstallPaths File::Copy::Recursive File::KeePass File::Listing File::Path File::ShareDir File::ShareDir::Install File::pushd Filesys::Notify::Simple Font::TTF Getopt::ArgvFile HTML::Parser HTML::Tagset HTML::Tree HTTP::Cookies HTTP::Daemon HTTP::Date HTTP::Entity::Parser HTTP::Headers::Fast HTTP::Message HTTP::MultiPartParser HTTP::Negotiate Hash::MultiValue IO::AIO IO::HTML IO::Socket::SSL IO::String IO::Stringy IO::Tty IPC::Run3 Image::Size JSON JSON::MaybeXS LWP::MediaTypes LWP::Protocol::https List::Util Locale::Maketext Locale::Maketext::Lexicon Locale::Msgfmt MIME::Lite MIME::Type::FileName MIME::Types MLDBM MP3::Info MP4::Info MRO::Compat MailTools Math::Base::Convert Module::Build Module::Build::Tiny Module::Find Module::Implementation Module::Runtime Module::Runtime::Conflicts Module::ScanDeps Module::Signature Moo Moose MooseX::Params::Validate Mozilla::CA Net Net::HTTP Net::OpenSSH Net::SSLeay OLE::Storage_Lite Ogg::Vorbis::Header::PurePerl PAR PAR::Dist PAR::Packer PDF::API2 PDF::Table POSIX::strftime::Compiler Package::DeprecationManager Package::Stash Package::Stash::XS PadWalker Params::Util Params::Validate Path::Tiny Perl Perlbal Plack Plack::App::EventSource Plack::Middleware::DirIndex Readonly Role::Tiny SQL::Statement Smart::Comments Sort::Naturally Spreadsheet::ParseExcel Spreadsheet::XLSX Starlight Stream::Buffered String::HexConvert String::Random Sub::Exporter Sub::Exporter::Progressive Sub::Identify Sub::Install Sub::Name Sub::Quote Sub::Uplevel Sys::Syscall Template Template::DBI Term::ReadKey Term::ReadLine Term::ShellUI Test::CleanNamespaces Test::Deep Test::Exception Test::Fatal Test::File Test::MockTime Test::Needs Test::NoWarnings Test::Pod Test::Requires Test::RequiresInternet Test::SharedFork Test::TCP Test::Time Test::Warn Test::Warnings Test::utf8 Text::Soundex Text::Unidecode Tk::Getopt Try::Tiny Type::Tiny URI URI::Encode UUID::Tiny Variable::Magic WWW::Form::UrlEncoded WWW::RobotRules XML::NamespaceSupport XML::Parser XML::SAX XML::SAX::Base XML::SAX::Expat XML::Simple common::sense install libwww::perl namespace::clean version`
+^: `install Algorithm::Diff Apache::LogFormat::Compiler AppConfig Archive::Tar Archive::Zip Audio::FLAC::Header Authen::SASL B::Hooks::EndOfScope BSD::Resource Business::Tax::VAT::Validation CGI CGI::Compile CGI::Emulate::PSGI CGI::Session CPAN::Meta::Check Canary::Stability Capture::Tiny Class::Inspector Class::Load Class::Load::XS Class::Method::Modifiers Clone Cookie::Baker Cpanel::JSON::XS Crypt::CBC Crypt::PasswdMD5 Crypt::RC4 Crypt::Random::Source Crypt::Rijndael Crypt::Rijndael::PP DBD::PgPP DBD::SQLite DBD::mysql DBI Danga::Socket Data::OptList Date::Parse Devel::Caller Devel::GlobalDestruction Devel::OverloadInfo Devel::StackTrace Devel::StackTrace::AsHTML Digest::HMAC Digest::Perl::MD5 Digest::SHA Digest::SHA::PurePerl Dist::CheckConflicts Email::Address Email::Address::XS Email::Date::Format Email::MIME Email::MIME::ContentType Email::MIME::Encodings Email::MessageID Email::Simple Encode Encode::Locale Error Eval::Closure Exporter::Tiny ExtUtils::Config ExtUtils::Helpers ExtUtils::InstallPaths File::Copy::Recursive File::KeePass File::Listing File::Path File::ShareDir File::ShareDir::Install File::pushd Filesys::Notify::Simple Font::TTF Getopt::ArgvFile HTML::Parser HTML::Tagset HTML::Tree HTTP::Cookies HTTP::Daemon HTTP::Date HTTP::Entity::Parser HTTP::Headers::Fast HTTP::Message HTTP::MultiPartParser HTTP::Negotiate Hash::MultiValue IO::AIO IO::HTML IO::Socket::SSL IO::String IO::Stringy IO::Tty IPC::Run3 Image::Size JSON JSON::MaybeXS LWP::MediaTypes LWP::Protocol::https List::Util Locale::Maketext Locale::Maketext::Lexicon Locale::Msgfmt MIME::Lite MIME::Type::FileName MIME::Types MLDBM MP3::Info MP4::Info MRO::Compat MailTools Math::Base::Convert Module::Build Module::Build::Tiny Module::Find Module::Implementation Module::Runtime Module::Runtime::Conflicts Module::ScanDeps Module::Signature Moo Moose MooseX::Params::Validate Mozilla::CA Net Net::HTTP Net::OpenSSH Net::SSLeay OLE::Storage_Lite Ogg::Vorbis::Header::PurePerl PAR PAR::Dist PAR::Packer PDF::API2 PDF::Table POSIX::strftime::Compiler Package::DeprecationManager Package::Stash Package::Stash::XS PadWalker Params::Util Params::Validate Path::Tiny Perl Perlbal Plack Plack::App::EventSource Plack::Middleware::DirIndex Readonly Role::Tiny SQL::Statement Smart::Comments Sort::Naturally Spreadsheet::ParseExcel Spreadsheet::XLSX Starlight Stream::Buffered String::HexConvert String::Random Sub::Exporter Sub::Exporter::Progressive Sub::Identify Sub::Install Sub::Name Sub::Quote Sub::Uplevel Sys::Syscall Template Template::DBI Term::ReadKey Term::ReadLine Term::ShellUI Test::CleanNamespaces Test::Deep Test::Exception Test::Fatal Test::File Test::MockTime Test::Needs Test::NoWarnings Test::Pod Test::Requires Test::RequiresInternet Test::SharedFork Test::TCP Test::Time Test::Warn Test::Warnings Test::utf8 Text::Soundex Text::Unidecode Tk::Getopt Try::Tiny Type::Tiny URI URI::Encode UUID::Tiny Variable::Magic WWW::Form::UrlEncoded WWW::RobotRules XML::NamespaceSupport XML::Parser XML::SAX XML::SAX::Base XML::SAX::Expat XML::Simple common::sense install libwww::perl namespace::clean version`
 
+
+Archive::Tar Archive::Zip Audio::FLAC::Header Digest::Perl::MD5 Digest::SHA Digest::SHA::PurePerl Digest::SHA Email::Address Email::Address::XS Email::Date::Format Email::MIME Email::MIME::ContentType Email::MIME::Encodings Email::MessageID Email::Simple Encode Encode::Locale File::Copy::Recursive File::KeePass Filesys::Notify::Simple Font::TTF File::Find::Rule Net::SSLeay
+
+MP3::Info MP4::Info Image::Size MailTools Ogg::Vorbis::Header::PurePerl PAR PAR::Dist PAR::Packer Plack::Middleware::DirIndex PadWalker PDF::API2 Starlight Template  URI::Encode UUID::Tiny Template::DBI MIME::Lite MIME::Type::FileName MIME::Types IO::Tty
 ---
 
 Setup Apache
diff --git a/app/data/help/staff/fr-prepare-workplan.md b/app/data/help/staff/fr-prepare-workplan.md
new file mode 100644 (file)
index 0000000..1fc0724
--- /dev/null
@@ -0,0 +1,5 @@
+**1.** sur Ã¶a page d'Entrée, cliquer sous "Configuration" sur modèles hebdomaires
+
+![](img/help/index.png)
+
+---
index 16d38dc..7ebf970 100644 (file)
         $html["result"] = $st->deleteStaff($schema,$db->securetext($p["id"]));
       } elseif ($p["fn"] == "del_staffcontract"){
         $html["result"] = $st->deleteStaffContract($schema,$db->securetext($p["id"]));
-      } elseif ($p["fn"] == "add_staff"){
-        $html["result"] = $st->addStaff($schema,$db->securetext($p["surname"]),$db->securetext($p["prename"]),$db->securetext($p["startdate"]),$db->securetext($p["enddate"]),$db->securetext($p["weekhours"]),$db->securetext($p["weekdays"]),$db->securetext($p["id_staffgroup"]));
+      } 
+      elseif ($p["fn"] == "add_staff"){
+        $html["result"] = $st->addStaff($schema,$db->securetext($p["surname"]),$db->securetext($p["prename"]),$db->securetext($p["startdate"]),$db->securetext($p["enddate"]),$db->securetext($p["weekhours"]),$db->securetext($p["weekdays"]),$db->securetext($p["id_staffgroup"]),$db->securetext($p["defaultfreedays"]));
       } 
       // elseif ($p["fn"] = "setstaffcontractdays"){
       //   $html["result"] = $st->setStaffContractDays($schema,$db->securetext($p["id_staff"]));
index 1c36a30..e00aad1 100644 (file)
@@ -35,7 +35,10 @@ class Company{
    $dbschema = $this->dbh->query($schemasql);
 
   if ($dbschema["cnt"] == "0"){
-    $companyid = $this->dbh->createDefinedSchema("defaultcompany",$schemaname,$datasetname);
+    $this->dbh->exec("select * from public.clone_schema('demo','".$schemaname."');");
+    $ret = $this->dbh->query("INSERT INTO public.companies (datasetname,schemata) values ('".$datasetname."','".$schemaname."') returning id;");
+    
+    $companyid = $ret["id"];
     //$this->dbh->exec("select * from public.insert_sectordata('".$schemaname."','".$sector."');");
     $this->dbh->exec("INSERT INTO ".$schemaname.".worktimes (startdate, enddate, defaultdayhours, maxdayhours, defaultweekhours, maxweekhours, maxinterruptionhours, isdefault) SELECT  startdate, enddate, defaultdayhours, maxdayhours, defaultweekhours, maxweekhours, maxinterruptionhours, isdefault FROM public.sectorworktime where sector= '".$sector."' and periodtype='".$periodtype."';");
      $wk =  new Workplan($this->dbh,$this->cfg);
index ef78b17..1c0ef6f 100644 (file)
@@ -98,7 +98,7 @@ or date((select min(startdate) from ".$schema.".staffcontract where id_staff='".
           $inday = "(2,3,4,5,6,7)";
         }
       }
-      }
+      
       $mdayssql = "select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in ".$inday." then 0 else 1 end as dow from pg_catalog.generate_series(date('".$c["startdate"]."'),date('".$c["enddate"]."'),'1 day')) mxdays";
       $mdays = $this->dbh->query( $mdayssql);
       
@@ -120,7 +120,7 @@ or date((select min(startdate) from ".$schema.".staffcontract where id_staff='".
       $usql = "update ".$schema.".staffreportperiod set maxdays=".(($checkhours["maxdays"] != "")?$checkhours["maxdays"]:'null').",contracthours=".(($checkhours["itmcontracthours"] !=  "")?"'".$checkhours["itmcontracthours"]."'":'null')." where id_staff='".$id_staff."' and id_reportperiod='".$pp["id"]."';" ;
       $this->dbh->exec($usql);
       $period->updateStaffPeriod($schema,$pp["id"],$id_staff);
-      
+    }
     
     
   }
index 577e22d..d32c158 100644 (file)
@@ -166,46 +166,6 @@ class database {
     file_put_contents($this->dbconf["logfile"],$msg."\n",FILE_APPEND);
   }
 
-  public function createDefinedSchema($schematype,$schemaname,$datasetname){
-  //   $ddlstr = "";
-  //   $sqlschema = "select * from information_schema.schemata where schema_name='".$schemaname."';";
-  //   $sc = $this->querysorted($sqlschema);
-  //   $ret["sqlschema"] = $sqlschema; 
-  //   if (keys(%{$sc}) > 0){
-  //   return;
-  //   }
-  // $schemaddl = array(); 
   
-  // $ddlfile = 'data/schemata/'.$schematype.'.schema.sql';
-  // $ret["ddlfile"] = $ddlfile;
-  // if (file_exists($ddlfile)){
-  //   $ddlstr = file_get_contents($ddlfile);
-  // }
-  
-  // if (-e $ddlfile){
-  //   open(SCA,$ddlfile);
-  //   while (my $l = <SCA>){
-  //     $l =~ s/%%NEWSCHEMA%%/$schemaname/g;
-  //     if ($l eq "\n"){
-  //       if ($ddlstr ne ""){
-  //         push(@schemaddl,$ddlstr);
-  //       }
-  //       $ddlstr = "";
-  //       next;
-  //     }
-  //     $ddlstr .= $l;
-  //   }
-  //   close(SCA);
-  // }
-  // $ret->{schemaddl} = @schemaddl;
-  // if (scalar(@schemaddl) > 0){
-  //   for(my $d;$d<scalar(@schemaddl);$d++){
-  //     $self->exec($schemaddl[$d]);
-  //   }
-  // }
-  
-  // my $linkid = $self->query("INSERT INTO public.companies (datasetname,schemata) values ('".$datasetname."','".$schemaname."') returning id;");
-  // return $linkid->{id};
-  }
 }
 ?>
\ No newline at end of file
index 54a906d..125a0ff 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-$cfg["appversion"] = '1.11';
+$cfg["appversion"] = '1.11.5';
   if ($cfg["debug"] == 1){
     $cfg["appversion"] = date('YmdHi');//$cfg["version"];
   } 
index 1385780..74fd04b 100644 (file)
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: SELECT * FROM public.companies WHERE schemata='demo' and isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wpd.workplan,
-    to_char(wpd.weekhours, 'HH24:MI') AS weekhours,
-    wpd.id,wpd.id_workplan,wpd.weekday,NULL AS staffcount, wpd.weeknum,
-    to_char(wpd.start1::interval, 'HH24:MI') AS start1,
-    to_char(wpd.end1::interval, 'HH24:MI') AS end1,
-    to_char(wpd.start2::interval, 'HH24:MI') AS start2,
-    to_char(wpd.end2::interval, 'HH24:MI') AS end2,
-    to_char(wpd.pause::interval, 'HH24:MI') AS pause,
-    to_char(wpd.interruption::interval, 'HH24:MI')AS interruption,
-    to_char(wpd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-    to_char(wpd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-    to_char(wpd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-    to_char(wpd.pauseend2::interval, 'HH24:MI') AS pauseend2,to_char( dt1+dt2-pdt1-pdt2, 'HH24:MI') AS dayhours, COALESCE((to_char(wpd.pausestart1::interval, 'HH24:MI') || '-') || to_char(wpd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.pausestart1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(wpd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
-    COALESCE((to_char(wpd.start1::interval, 'HH24:MI') || '-') || to_char(wpd.end1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.start1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.start2::interval, 'HH24:MI')) || '-') || to_char(wpd.end2::interval, 'HH24:MI'), '') AS dspworkdata
-        from 
-   ( select wpd1.*,wp1.weekhours,wp1.workplan,
-    case when wpd1.start1 is not null and wpd1.end1 is not null then case when wpd1.end1 < wpd1.start1 then  '24:00:00'::interval + wpd1.end1::interval -wpd1.start1::interval else  wpd1.end1::interval - wpd1.start1::interval end else  '00:00:00'::interval end as dt1,
-   case when wpd1.start2 is not null and wpd1.end2 is not null then case when wpd1.end2 < wpd1.start2 then  '24:00:00'::interval + wpd1.end2::interval - wpd1.start2::interval else  wpd1.end2::interval - wpd1.start2::interval end  else  '00:00:00'::interval end as dt2,
-   case when wpd1.pausestart1 is not null and wpd1.pauseend1 is not null then case when wpd1.pauseend1 < wpd1.pausestart1 then  '24:00:00'::interval + wpd1.pauseend1::interval - wpd1.pausestart1::interval else  wpd1.pauseend1::interval - wpd1.pausestart1::interval end else '00:00:00'::interval end as pdt1,
-   case when wpd1.pausestart2 is not null and wpd1.pauseend2 is not null then  case when wpd1.pauseend2 < wpd1.pausestart2 then  '24:00:00'::interval + wpd1.pauseend2::interval -wpd1. pausestart2::interval else  wpd1.pauseend2::interval - wpd1.pausestart2::interval end else '00:00:00'::interval end as pdt2,
-    case when wpd1.start2 is not null and wpd1.end1 is not null and wpd1.start1 is not null and wpd1.end2 is not null then wpd1.start2::interval - wpd1.end1::interval else null end as interruption
-   FROM demo.workplandays wpd1 LEFT JOIN demo.workplans wp1 ON wpd1.id_workplan = wp1.id
-   where wpd1.id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb') wpd
-  ORDER BY wpd.workplan, wpd.weekday;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM demo.workplandays where id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wpd.workplan,
-    to_char(wpd.weekhours, 'HH24:MI') AS weekhours,
-    wpd.id,wpd.id_workplan,wpd.weekday,NULL AS staffcount, wpd.weeknum,
-    to_char(wpd.start1::interval, 'HH24:MI') AS start1,
-    to_char(wpd.end1::interval, 'HH24:MI') AS end1,
-    to_char(wpd.start2::interval, 'HH24:MI') AS start2,
-    to_char(wpd.end2::interval, 'HH24:MI') AS end2,
-    to_char(wpd.pause::interval, 'HH24:MI') AS pause,
-    to_char(wpd.interruption::interval, 'HH24:MI')AS interruption,
-    to_char(wpd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-    to_char(wpd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-    to_char(wpd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-    to_char(wpd.pauseend2::interval, 'HH24:MI') AS pauseend2,to_char( dt1+dt2-pdt1-pdt2, 'HH24:MI') AS dayhours, COALESCE((to_char(wpd.pausestart1::interval, 'HH24:MI') || '-') || to_char(wpd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.pausestart1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(wpd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
-    COALESCE((to_char(wpd.start1::interval, 'HH24:MI') || '-') || to_char(wpd.end1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.start1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.start2::interval, 'HH24:MI')) || '-') || to_char(wpd.end2::interval, 'HH24:MI'), '') AS dspworkdata
-        from 
-   ( select wpd1.*,wp1.weekhours,wp1.workplan,
-    case when wpd1.start1 is not null and wpd1.end1 is not null then case when wpd1.end1 < wpd1.start1 then  '24:00:00'::interval + wpd1.end1::interval -wpd1.start1::interval else  wpd1.end1::interval - wpd1.start1::interval end else  '00:00:00'::interval end as dt1,
-   case when wpd1.start2 is not null and wpd1.end2 is not null then case when wpd1.end2 < wpd1.start2 then  '24:00:00'::interval + wpd1.end2::interval - wpd1.start2::interval else  wpd1.end2::interval - wpd1.start2::interval end  else  '00:00:00'::interval end as dt2,
-   case when wpd1.pausestart1 is not null and wpd1.pauseend1 is not null then case when wpd1.pauseend1 < wpd1.pausestart1 then  '24:00:00'::interval + wpd1.pauseend1::interval - wpd1.pausestart1::interval else  wpd1.pauseend1::interval - wpd1.pausestart1::interval end else '00:00:00'::interval end as pdt1,
-   case when wpd1.pausestart2 is not null and wpd1.pauseend2 is not null then  case when wpd1.pauseend2 < wpd1.pausestart2 then  '24:00:00'::interval + wpd1.pauseend2::interval -wpd1. pausestart2::interval else  wpd1.pauseend2::interval - wpd1.pausestart2::interval end else '00:00:00'::interval end as pdt2,
-    case when wpd1.start2 is not null and wpd1.end1 is not null and wpd1.start1 is not null and wpd1.end2 is not null then wpd1.start2::interval - wpd1.end1::interval else null end as interruption
-   FROM demo.workplandays wpd1 LEFT JOIN demo.workplans wp1 ON wpd1.id_workplan = wp1.id
-   where wpd1.id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb') wpd
-  ORDER BY wpd.workplan, wpd.weekday;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM demo.workplandays where id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wpd.workplan,
-    to_char(wpd.weekhours, 'HH24:MI') AS weekhours,
-    wpd.id,wpd.id_workplan,wpd.weekday,NULL AS staffcount, wpd.weeknum,
-    to_char(wpd.start1::interval, 'HH24:MI') AS start1,
-    to_char(wpd.end1::interval, 'HH24:MI') AS end1,
-    to_char(wpd.start2::interval, 'HH24:MI') AS start2,
-    to_char(wpd.end2::interval, 'HH24:MI') AS end2,
-    to_char(wpd.pause::interval, 'HH24:MI') AS pause,
-    to_char(wpd.interruption::interval, 'HH24:MI')AS interruption,
-    to_char(wpd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-    to_char(wpd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-    to_char(wpd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-    to_char(wpd.pauseend2::interval, 'HH24:MI') AS pauseend2,to_char( dt1+dt2-pdt1-pdt2, 'HH24:MI') AS dayhours, COALESCE((to_char(wpd.pausestart1::interval, 'HH24:MI') || '-') || to_char(wpd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.pausestart1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(wpd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
-    COALESCE((to_char(wpd.start1::interval, 'HH24:MI') || '-') || to_char(wpd.end1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.start1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.start2::interval, 'HH24:MI')) || '-') || to_char(wpd.end2::interval, 'HH24:MI'), '') AS dspworkdata
-        from 
-   ( select wpd1.*,wp1.weekhours,wp1.workplan,
-    case when wpd1.start1 is not null and wpd1.end1 is not null then case when wpd1.end1 < wpd1.start1 then  '24:00:00'::interval + wpd1.end1::interval -wpd1.start1::interval else  wpd1.end1::interval - wpd1.start1::interval end else  '00:00:00'::interval end as dt1,
-   case when wpd1.start2 is not null and wpd1.end2 is not null then case when wpd1.end2 < wpd1.start2 then  '24:00:00'::interval + wpd1.end2::interval - wpd1.start2::interval else  wpd1.end2::interval - wpd1.start2::interval end  else  '00:00:00'::interval end as dt2,
-   case when wpd1.pausestart1 is not null and wpd1.pauseend1 is not null then case when wpd1.pauseend1 < wpd1.pausestart1 then  '24:00:00'::interval + wpd1.pauseend1::interval - wpd1.pausestart1::interval else  wpd1.pauseend1::interval - wpd1.pausestart1::interval end else '00:00:00'::interval end as pdt1,
-   case when wpd1.pausestart2 is not null and wpd1.pauseend2 is not null then  case when wpd1.pauseend2 < wpd1.pausestart2 then  '24:00:00'::interval + wpd1.pauseend2::interval -wpd1. pausestart2::interval else  wpd1.pauseend2::interval - wpd1.pausestart2::interval end else '00:00:00'::interval end as pdt2,
-    case when wpd1.start2 is not null and wpd1.end1 is not null and wpd1.start1 is not null and wpd1.end2 is not null then wpd1.start2::interval - wpd1.end1::interval else null end as interruption
-   FROM demo.workplandays wpd1 LEFT JOIN demo.workplans wp1 ON wpd1.id_workplan = wp1.id
-   where wpd1.id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb') wpd
-  ORDER BY wpd.workplan, wpd.weekday;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM public.companies WHERE schemata='demo' and isdeleted IS NULL;
 QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
    coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
+   FROM kajiwara.workplans wp
   ORDER BY wp.isdefault, wp.workplan;
+QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM kajiwara.reportperiod rp ORDER BY startdate, enddate;
+QUERYARRAY: SELECT id,vacancyname,color
+   FROM kajiwara.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wpd.workplan,
-    to_char(wpd.weekhours, 'HH24:MI') AS weekhours,
-    wpd.id,wpd.id_workplan,wpd.weekday,NULL AS staffcount, wpd.weeknum,
-    to_char(wpd.start1::interval, 'HH24:MI') AS start1,
-    to_char(wpd.end1::interval, 'HH24:MI') AS end1,
-    to_char(wpd.start2::interval, 'HH24:MI') AS start2,
-    to_char(wpd.end2::interval, 'HH24:MI') AS end2,
-    to_char(wpd.pause::interval, 'HH24:MI') AS pause,
-    to_char(wpd.interruption::interval, 'HH24:MI')AS interruption,
-    to_char(wpd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-    to_char(wpd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-    to_char(wpd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-    to_char(wpd.pauseend2::interval, 'HH24:MI') AS pauseend2,to_char( dt1+dt2-pdt1-pdt2, 'HH24:MI') AS dayhours, COALESCE((to_char(wpd.pausestart1::interval, 'HH24:MI') || '-') || to_char(wpd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.pausestart1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(wpd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
-    COALESCE((to_char(wpd.start1::interval, 'HH24:MI') || '-') || to_char(wpd.end1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.start1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.start2::interval, 'HH24:MI')) || '-') || to_char(wpd.end2::interval, 'HH24:MI'), '') AS dspworkdata
-        from 
-   ( select wpd1.*,wp1.weekhours,wp1.workplan,
-    case when wpd1.start1 is not null and wpd1.end1 is not null then case when wpd1.end1 < wpd1.start1 then  '24:00:00'::interval + wpd1.end1::interval -wpd1.start1::interval else  wpd1.end1::interval - wpd1.start1::interval end else  '00:00:00'::interval end as dt1,
-   case when wpd1.start2 is not null and wpd1.end2 is not null then case when wpd1.end2 < wpd1.start2 then  '24:00:00'::interval + wpd1.end2::interval - wpd1.start2::interval else  wpd1.end2::interval - wpd1.start2::interval end  else  '00:00:00'::interval end as dt2,
-   case when wpd1.pausestart1 is not null and wpd1.pauseend1 is not null then case when wpd1.pauseend1 < wpd1.pausestart1 then  '24:00:00'::interval + wpd1.pauseend1::interval - wpd1.pausestart1::interval else  wpd1.pauseend1::interval - wpd1.pausestart1::interval end else '00:00:00'::interval end as pdt1,
-   case when wpd1.pausestart2 is not null and wpd1.pauseend2 is not null then  case when wpd1.pauseend2 < wpd1.pausestart2 then  '24:00:00'::interval + wpd1.pauseend2::interval -wpd1. pausestart2::interval else  wpd1.pauseend2::interval - wpd1.pausestart2::interval end else '00:00:00'::interval end as pdt2,
-    case when wpd1.start2 is not null and wpd1.end1 is not null and wpd1.start1 is not null and wpd1.end2 is not null then wpd1.start2::interval - wpd1.end1::interval else null end as interruption
-   FROM demo.workplandays wpd1 LEFT JOIN demo.workplans wp1 ON wpd1.id_workplan = wp1.id
-   where wpd1.id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb') wpd
-  ORDER BY wpd.workplan, wpd.weekday;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM demo.workplandays where id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM demo.workplandays where id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM demo.workplandays where id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM public.companies WHERE schemata='demo' and isdeleted IS NULL;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wpd.workplan,
-    to_char(wpd.weekhours, 'HH24:MI') AS weekhours,
-    wpd.id,wpd.id_workplan,wpd.weekday,NULL AS staffcount, wpd.weeknum,
-    to_char(wpd.start1::interval, 'HH24:MI') AS start1,
-    to_char(wpd.end1::interval, 'HH24:MI') AS end1,
-    to_char(wpd.start2::interval, 'HH24:MI') AS start2,
-    to_char(wpd.end2::interval, 'HH24:MI') AS end2,
-    to_char(wpd.pause::interval, 'HH24:MI') AS pause,
-    to_char(wpd.interruption::interval, 'HH24:MI')AS interruption,
-    to_char(wpd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-    to_char(wpd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-    to_char(wpd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-    to_char(wpd.pauseend2::interval, 'HH24:MI') AS pauseend2,to_char( dt1+dt2-pdt1-pdt2, 'HH24:MI') AS dayhours, COALESCE((to_char(wpd.pausestart1::interval, 'HH24:MI') || '-') || to_char(wpd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.pausestart1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(wpd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
-    COALESCE((to_char(wpd.start1::interval, 'HH24:MI') || '-') || to_char(wpd.end1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.start1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.start2::interval, 'HH24:MI')) || '-') || to_char(wpd.end2::interval, 'HH24:MI'), '') AS dspworkdata
-        from 
-   ( select wpd1.*,wp1.weekhours,wp1.workplan,
-    case when wpd1.start1 is not null and wpd1.end1 is not null then case when wpd1.end1 < wpd1.start1 then  '24:00:00'::interval + wpd1.end1::interval -wpd1.start1::interval else  wpd1.end1::interval - wpd1.start1::interval end else  '00:00:00'::interval end as dt1,
-   case when wpd1.start2 is not null and wpd1.end2 is not null then case when wpd1.end2 < wpd1.start2 then  '24:00:00'::interval + wpd1.end2::interval - wpd1.start2::interval else  wpd1.end2::interval - wpd1.start2::interval end  else  '00:00:00'::interval end as dt2,
-   case when wpd1.pausestart1 is not null and wpd1.pauseend1 is not null then case when wpd1.pauseend1 < wpd1.pausestart1 then  '24:00:00'::interval + wpd1.pauseend1::interval - wpd1.pausestart1::interval else  wpd1.pauseend1::interval - wpd1.pausestart1::interval end else '00:00:00'::interval end as pdt1,
-   case when wpd1.pausestart2 is not null and wpd1.pauseend2 is not null then  case when wpd1.pauseend2 < wpd1.pausestart2 then  '24:00:00'::interval + wpd1.pauseend2::interval -wpd1. pausestart2::interval else  wpd1.pauseend2::interval - wpd1.pausestart2::interval end else '00:00:00'::interval end as pdt2,
-    case when wpd1.start2 is not null and wpd1.end1 is not null and wpd1.start1 is not null and wpd1.end2 is not null then wpd1.start2::interval - wpd1.end1::interval else null end as interruption
-   FROM demo.workplandays wpd1 LEFT JOIN demo.workplans wp1 ON wpd1.id_workplan = wp1.id
-   where wpd1.id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb') wpd
-  ORDER BY wpd.workplan, wpd.weekday;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM demo.workplandays where id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wpd.workplan,
-    to_char(wpd.weekhours, 'HH24:MI') AS weekhours,
-    wpd.id,wpd.id_workplan,wpd.weekday,NULL AS staffcount, wpd.weeknum,
-    to_char(wpd.start1::interval, 'HH24:MI') AS start1,
-    to_char(wpd.end1::interval, 'HH24:MI') AS end1,
-    to_char(wpd.start2::interval, 'HH24:MI') AS start2,
-    to_char(wpd.end2::interval, 'HH24:MI') AS end2,
-    to_char(wpd.pause::interval, 'HH24:MI') AS pause,
-    to_char(wpd.interruption::interval, 'HH24:MI')AS interruption,
-    to_char(wpd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-    to_char(wpd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-    to_char(wpd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-    to_char(wpd.pauseend2::interval, 'HH24:MI') AS pauseend2,to_char( dt1+dt2-pdt1-pdt2, 'HH24:MI') AS dayhours, COALESCE((to_char(wpd.pausestart1::interval, 'HH24:MI') || '-') || to_char(wpd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.pausestart1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(wpd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
-    COALESCE((to_char(wpd.start1::interval, 'HH24:MI') || '-') || to_char(wpd.end1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.start1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.start2::interval, 'HH24:MI')) || '-') || to_char(wpd.end2::interval, 'HH24:MI'), '') AS dspworkdata
-        from 
-   ( select wpd1.*,wp1.weekhours,wp1.workplan,
-    case when wpd1.start1 is not null and wpd1.end1 is not null then case when wpd1.end1 < wpd1.start1 then  '24:00:00'::interval + wpd1.end1::interval -wpd1.start1::interval else  wpd1.end1::interval - wpd1.start1::interval end else  '00:00:00'::interval end as dt1,
-   case when wpd1.start2 is not null and wpd1.end2 is not null then case when wpd1.end2 < wpd1.start2 then  '24:00:00'::interval + wpd1.end2::interval - wpd1.start2::interval else  wpd1.end2::interval - wpd1.start2::interval end  else  '00:00:00'::interval end as dt2,
-   case when wpd1.pausestart1 is not null and wpd1.pauseend1 is not null then case when wpd1.pauseend1 < wpd1.pausestart1 then  '24:00:00'::interval + wpd1.pauseend1::interval - wpd1.pausestart1::interval else  wpd1.pauseend1::interval - wpd1.pausestart1::interval end else '00:00:00'::interval end as pdt1,
-   case when wpd1.pausestart2 is not null and wpd1.pauseend2 is not null then  case when wpd1.pauseend2 < wpd1.pausestart2 then  '24:00:00'::interval + wpd1.pauseend2::interval -wpd1. pausestart2::interval else  wpd1.pauseend2::interval - wpd1.pausestart2::interval end else '00:00:00'::interval end as pdt2,
-    case when wpd1.start2 is not null and wpd1.end1 is not null and wpd1.start1 is not null and wpd1.end2 is not null then wpd1.start2::interval - wpd1.end1::interval else null end as interruption
-   FROM demo.workplandays wpd1 LEFT JOIN demo.workplans wp1 ON wpd1.id_workplan = wp1.id
-   where wpd1.id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb') wpd
-  ORDER BY wpd.workplan, wpd.weekday;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM demo.workplandays where id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.workplandays SET start1='10:00', end1='16:30', start2=null, end2=null, pause='00:30', pausestart1='11:00', pauseend1='11:30', pausestart2=null, pauseend2=null WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select id_workplan from demo.workplandays WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e'
-QUERY: select payedpauses from public.companies where schemata='demo'
-QUERY: select '["' || string_agg(case when start1 is null and start2 is null then weekday::text else null end,'","') || '"]' as freedays, sum (case when start1 is not null or start2 is not null then 1 else 0 end) as weekdays, sum( coalesce(case when start1 > end1 then '24:00:00'::time without time zo!= - (start1 - end1)::time without time zo!= else end1 - start1 end, '00:00:00'::interval) + coalesce(case when start2 > end2 and start1 is not null then '24:00:00'::time without time zo!= - (start2 - end2)::time without time zo!= else end2 - start2 end, '00:00:00'::interval)  - coalesce(pause, '00:00:00'::time without time zo!=)) as weekhours from demo.workplandays  where id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb' group by id_workplan;
-EXEC: UPDATE demo.workplans SET weekhours='', weekdays=, freeweekdayslist='' WHERE id='ec796603-0d87-8457-b92d-1a792e5f5acb'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.workplandays SET start1='10:00', end1='16:30', start2=null, end2=null, pause='00:30', pausestart1='11:00', pauseend1='11:30', pausestart2=null, pauseend2=null WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select id_workplan from demo.workplandays WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e'
-QUERY: select payedpauses from public.companies where schemata='demo'
-QUERY: select '["' || string_agg(case when start1 is null and start2 is null then weekday::text else null end,'","') || '"]' as freedays, sum (case when start1 is not null or start2 is not null then 1 else 0 end) as weekdays, sum( coalesce(case when start1 > end1 then '24:00:00'::time without time zo!= - (start1 - end1)::time without time zo!= else end1 - start1 end, '00:00:00'::interval) + coalesce(case when start2 > end2 and start1 is not null then '24:00:00'::time without time zo!= - (start2 - end2)::time without time zo!= else end2 - start2 end, '00:00:00'::interval)  - coalesce(pause, '00:00:00'::time without time zo!=)) as weekhours from demo.workplandays  where id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb' group by id_workplan;
-EXEC: UPDATE demo.workplans SET weekhours='', weekdays=, freeweekdayslist='' WHERE id='ec796603-0d87-8457-b92d-1a792e5f5acb'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.workplandays SET start1='10:00', end1='16:30', start2=null, end2=null, pause='00:30', pausestart1='11:00', pauseend1='11:30', pausestart2=null, pauseend2=null WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select id_workplan from demo.workplandays WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e'
-QUERY: select payedpauses from public.companies where schemata='demo'
-QUERY: select '["' || string_agg(case when start1 is null and start2 is null then weekday::text else null end,'","') || '"]' as freedays, sum (case when start1 is not null or start2 is not null then 1 else 0 end) as weekdays, sum( coalesce(case when start1 > end1 then '24:00:00'::time without time zo!= - (start1 - end1)::time without time zo!= else end1 - start1 end, '00:00:00'::interval) + coalesce(case when start2 > end2 and start1 is not null then '24:00:00'::time without time zo!= - (start2 - end2)::time without time zo!= else end2 - start2 end, '00:00:00'::interval)  - coalesce(pause, '00:00:00'::time without time zo!=)) as weekhours from demo.workplandays  where id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb' group by id_workplan;
-EXEC: UPDATE demo.workplans SET weekhours='', weekdays=, freeweekdayslist='' WHERE id='ec796603-0d87-8457-b92d-1a792e5f5acb'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: SELECT * FROM public.companies WHERE schemata='demo' and isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wpd.workplan,
-    to_char(wpd.weekhours, 'HH24:MI') AS weekhours,
-    wpd.id,wpd.id_workplan,wpd.weekday,NULL AS staffcount, wpd.weeknum,
-    to_char(wpd.start1::interval, 'HH24:MI') AS start1,
-    to_char(wpd.end1::interval, 'HH24:MI') AS end1,
-    to_char(wpd.start2::interval, 'HH24:MI') AS start2,
-    to_char(wpd.end2::interval, 'HH24:MI') AS end2,
-    to_char(wpd.pause::interval, 'HH24:MI') AS pause,
-    to_char(wpd.interruption::interval, 'HH24:MI')AS interruption,
-    to_char(wpd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-    to_char(wpd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-    to_char(wpd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-    to_char(wpd.pauseend2::interval, 'HH24:MI') AS pauseend2,to_char( dt1+dt2-pdt1-pdt2, 'HH24:MI') AS dayhours, COALESCE((to_char(wpd.pausestart1::interval, 'HH24:MI') || '-') || to_char(wpd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.pausestart1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(wpd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
-    COALESCE((to_char(wpd.start1::interval, 'HH24:MI') || '-') || to_char(wpd.end1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.start1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.start2::interval, 'HH24:MI')) || '-') || to_char(wpd.end2::interval, 'HH24:MI'), '') AS dspworkdata
-        from 
-   ( select wpd1.*,wp1.weekhours,wp1.workplan,
-    case when wpd1.start1 is not null and wpd1.end1 is not null then case when wpd1.end1 < wpd1.start1 then  '24:00:00'::interval + wpd1.end1::interval -wpd1.start1::interval else  wpd1.end1::interval - wpd1.start1::interval end else  '00:00:00'::interval end as dt1,
-   case when wpd1.start2 is not null and wpd1.end2 is not null then case when wpd1.end2 < wpd1.start2 then  '24:00:00'::interval + wpd1.end2::interval - wpd1.start2::interval else  wpd1.end2::interval - wpd1.start2::interval end  else  '00:00:00'::interval end as dt2,
-   case when wpd1.pausestart1 is not null and wpd1.pauseend1 is not null then case when wpd1.pauseend1 < wpd1.pausestart1 then  '24:00:00'::interval + wpd1.pauseend1::interval - wpd1.pausestart1::interval else  wpd1.pauseend1::interval - wpd1.pausestart1::interval end else '00:00:00'::interval end as pdt1,
-   case when wpd1.pausestart2 is not null and wpd1.pauseend2 is not null then  case when wpd1.pauseend2 < wpd1.pausestart2 then  '24:00:00'::interval + wpd1.pauseend2::interval -wpd1. pausestart2::interval else  wpd1.pauseend2::interval - wpd1.pausestart2::interval end else '00:00:00'::interval end as pdt2,
-    case when wpd1.start2 is not null and wpd1.end1 is not null and wpd1.start1 is not null and wpd1.end2 is not null then wpd1.start2::interval - wpd1.end1::interval else null end as interruption
-   FROM demo.workplandays wpd1 LEFT JOIN demo.workplans wp1 ON wpd1.id_workplan = wp1.id
-   where wpd1.id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb') wpd
-  ORDER BY wpd.workplan, wpd.weekday;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT * FROM demo.workplandays where id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.workplandays SET start1='11:00', end1='16:30', start2=null, end2=null, pause='00:30', pausestart1='11:00', pauseend1='11:30', pausestart2=null, pauseend2=null WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select id_workplan from demo.workplandays WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e'
-QUERY: select payedpauses from public.companies where schemata='demo'
-QUERY: select '["' || string_agg(case when start1 is null and start2 is null then weekday::text else null end,'","') || '"]' as freedays, sum (case when start1 is not null or start2 is not null then 1 else 0 end) as weekdays, sum( coalesce(case when start1 > end1 then '24:00:00'::time without time zonene!= - (start1 - end1)::time without time zone else end1 - start1 end, '00:00:00'::interval) + coalesce(case when start2 > end2 and start1 is not null then '24:00:00'::time without time zone - (start2 - end2)::time without time zone else end2 - start2 end, '00:00:00'::interval)  - coalesce(pause, '00:00:00'::time without time zone)) as weekhours from demo.workplandays  where id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb' group by id_workplan;
-EXEC: UPDATE demo.workplans SET weekhours='', weekdays=, freeweekdayslist='' WHERE id='ec796603-0d87-8457-b92d-1a792e5f5acb'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.workplandays SET start1='11:00', end1='16:30', start2=null, end2=null, pause='00:30', pausestart1='11:00', pauseend1='11:30', pausestart2=null, pauseend2=null WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select id_workplan from demo.workplandays WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e'
-QUERY: select payedpauses from public.companies where schemata='demo'
-QUERY: select '["' || string_agg(case when start1 is null and start2 is null then weekday::text else null end,'","') || '"]' as freedays, sum (case when start1 is not null or start2 is not null then 1 else 0 end) as weekdays, sum( coalesce(case when start1 > end1 then '24:00:00'::time without time zonene!= - (start1 - end1)::time without time zone else end1 - start1 end, '00:00:00'::interval) + coalesce(case when start2 > end2 and start1 is not null then '24:00:00'::time without time zone - (start2 - end2)::time without time zone else end2 - start2 end, '00:00:00'::interval)  - coalesce(pause, '00:00:00'::time without time zone)) as weekhours from demo.workplandays  where id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb' group by id_workplan;
-EXEC: UPDATE demo.workplans SET weekhours='', weekdays=, freeweekdayslist='' WHERE id='ec796603-0d87-8457-b92d-1a792e5f5acb'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.workplandays SET start1='11:00', end1='16:30', start2=null, end2=null, pause='00:30', pausestart1='11:00', pauseend1='11:30', pausestart2=null, pauseend2=null WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select id_workplan from demo.workplandays WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e'
-QUERY: select payedpauses from public.companies where schemata='demo'
-QUERY: select '["' || string_agg(case when start1 is null and start2 is null then weekday::text else null end,'","') || '"]' as freedays, sum (case when start1 is not null or start2 is not null then 1 else 0 end) as weekdays, sum( coalesce(case when start1 > end1 then '24:00:00'::time without time zonene!= - (start1 - end1)::time without time zone else end1 - start1 end, '00:00:00'::interval) + coalesce(case when start2 > end2 and start1 is not null then '24:00:00'::time without time zone - (start2 - end2)::time without time zone else end2 - start2 end, '00:00:00'::interval)  - coalesce(pause, '00:00:00'::time without time zone)) as weekhours from demo.workplandays  where id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb' group by id_workplan;
-EXEC: UPDATE demo.workplans SET weekhours='', weekdays=, freeweekdayslist='' WHERE id='ec796603-0d87-8457-b92d-1a792e5f5acb'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.workplandays SET start1='11:00', end1='16:30', start2=null, end2=null, pause='00:30', pausestart1='11:00', pauseend1='11:30', pausestart2=null, pauseend2=null WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e';
-QUERY: select id_workplan from demo.workplandays WHERE id='27fd3b0c-cad8-0f72-d172-489756ac836e'
-QUERY: select payedpauses from public.companies where schemata='demo'
-QUERY: select '["' || string_agg(case when start1 is null and start2 is null then weekday::text else null end,'","') || '"]' as freedays, sum (case when start1 is not null or start2 is not null then 1 else 0 end) as weekdays, sum( coalesce(case when start1 > end1 then '24:00:00'::time without time zone - (start1 - end1)::time without time zone else end1 - start1 end, '00:00:00'::interval) + coalesce(case when start2 > end2 and start1 is not null then '24:00:00'::time without time zone - (start2 - end2)::time without time zone else end2 - start2 end, '00:00:00'::interval)  - coalesce(pause, '00:00:00'::time without time zone)) as weekhours from demo.workplandays  where id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb' group by id_workplan;
-EXEC: UPDATE demo.workplans SET weekhours='38:00:00', weekdays=6, freeweekdayslist='["7"]' WHERE id='ec796603-0d87-8457-b92d-1a792e5f5acb'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wpd.workplan,
-    to_char(wpd.weekhours, 'HH24:MI') AS weekhours,
-    wpd.id,wpd.id_workplan,wpd.weekday,NULL AS staffcount, wpd.weeknum,
-    to_char(wpd.start1::interval, 'HH24:MI') AS start1,
-    to_char(wpd.end1::interval, 'HH24:MI') AS end1,
-    to_char(wpd.start2::interval, 'HH24:MI') AS start2,
-    to_char(wpd.end2::interval, 'HH24:MI') AS end2,
-    to_char(wpd.pause::interval, 'HH24:MI') AS pause,
-    to_char(wpd.interruption::interval, 'HH24:MI')AS interruption,
-    to_char(wpd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-    to_char(wpd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-    to_char(wpd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-    to_char(wpd.pauseend2::interval, 'HH24:MI') AS pauseend2,to_char( dt1+dt2-pdt1-pdt2, 'HH24:MI') AS dayhours, COALESCE((to_char(wpd.pausestart1::interval, 'HH24:MI') || '-') || to_char(wpd.pauseend1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.pausestart1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.pausestart2::interval, 'HH24:MI')) || '-') || to_char(wpd.pauseend2::interval, 'HH24:MI'), '') AS dsppausedata,
-    COALESCE((to_char(wpd.start1::interval, 'HH24:MI') || '-') || to_char(wpd.end1::interval, 'HH24:MI'), '') || COALESCE(((
-        CASE WHEN wpd.start1 IS NOT NULL THEN '<br/>' ELSE ''
-        END || to_char(wpd.start2::interval, 'HH24:MI')) || '-') || to_char(wpd.end2::interval, 'HH24:MI'), '') AS dspworkdata
-        from 
-   ( select wpd1.*,wp1.weekhours,wp1.workplan,
-    case when wpd1.start1 is not null and wpd1.end1 is not null then case when wpd1.end1 < wpd1.start1 then  '24:00:00'::interval + wpd1.end1::interval -wpd1.start1::interval else  wpd1.end1::interval - wpd1.start1::interval end else  '00:00:00'::interval end as dt1,
-   case when wpd1.start2 is not null and wpd1.end2 is not null then case when wpd1.end2 < wpd1.start2 then  '24:00:00'::interval + wpd1.end2::interval - wpd1.start2::interval else  wpd1.end2::interval - wpd1.start2::interval end  else  '00:00:00'::interval end as dt2,
-   case when wpd1.pausestart1 is not null and wpd1.pauseend1 is not null then case when wpd1.pauseend1 < wpd1.pausestart1 then  '24:00:00'::interval + wpd1.pauseend1::interval - wpd1.pausestart1::interval else  wpd1.pauseend1::interval - wpd1.pausestart1::interval end else '00:00:00'::interval end as pdt1,
-   case when wpd1.pausestart2 is not null and wpd1.pauseend2 is not null then  case when wpd1.pauseend2 < wpd1.pausestart2 then  '24:00:00'::interval + wpd1.pauseend2::interval -wpd1. pausestart2::interval else  wpd1.pauseend2::interval - wpd1.pausestart2::interval end else '00:00:00'::interval end as pdt2,
-    case when wpd1.start2 is not null and wpd1.end1 is not null and wpd1.start1 is not null and wpd1.end2 is not null then wpd1.start2::interval - wpd1.end1::interval else null end as interruption
-   FROM demo.workplandays wpd1 LEFT JOIN demo.workplans wp1 ON wpd1.id_workplan = wp1.id
-   where wpd1.id_workplan='ec796603-0d87-8457-b92d-1a792e5f5acb') wpd
-  ORDER BY wpd.workplan, wpd.weekday;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-ame,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sessiondata from public.sessions where id='412e4b03-bf23-c30a-9cf4-0a6d7f72b457'
-EXEC: update public.sessions set sessiondata='{"schemata":"demo15"}' where id='412e4b03-bf23-c30a-9cf4-0a6d7f72b457'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo15';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo15';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo15';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo15';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo15';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo15';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo15';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sessiondata from public.sessions where id='412e4b03-bf23-c30a-9cf4-0a6d7f72b457'
-EXEC: update public.sessions set sessiondata='{"schemata":"lousdiner"}' where id='412e4b03-bf23-c30a-9cf4-0a6d7f72b457'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-ame,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-11-03') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-11-03') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-11-03')) and date(date_trunc('week',date('2021-11-03')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-27') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-27') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-27')) and date(date_trunc('week',date('2021-10-27')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-20') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-20') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-20')) and date(date_trunc('week',date('2021-10-20')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-13') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-13') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-13')) and date(date_trunc('week',date('2021-10-13')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-06') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-06') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-06')) and date(date_trunc('week',date('2021-10-06')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-13') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-13') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-13')) and date(date_trunc('week',date('2021-10-13')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-06') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-06') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-06')) and date(date_trunc('week',date('2021-10-06')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-29') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-29') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-29')) and date(date_trunc('week',date('2021-09-29')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-22') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-22') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-22')) and date(date_trunc('week',date('2021-09-22')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-15') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-15') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-15')) and date(date_trunc('week',date('2021-09-15')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-08') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-08') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-08')) and date(date_trunc('week',date('2021-09-08')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-01') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-01') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-01')) and date(date_trunc('week',date('2021-09-01')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-25') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-25') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-25')) and date(date_trunc('week',date('2021-08-25')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-18') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-18') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-18')) and date(date_trunc('week',date('2021-08-18')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-11') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-11') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-11')) and date(date_trunc('week',date('2021-08-11')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-18') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-18') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-18')) and date(date_trunc('week',date('2021-08-18')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-25') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-25') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-25')) and date(date_trunc('week',date('2021-08-25')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-01') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-01') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-01')) and date(date_trunc('week',date('2021-09-01')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-25') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-25') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-25')) and date(date_trunc('week',date('2021-08-25')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-01') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-01') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-01')) and date(date_trunc('week',date('2021-09-01')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-25') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-25') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-25')) and date(date_trunc('week',date('2021-08-25')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select timetrackertype,sector from public.companies where schemata='lousdiner';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-11-03') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-11-03') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-11-03')) and date(date_trunc('week',date('2021-11-03')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-27') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-27') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-27')) and date(date_trunc('week',date('2021-10-27')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-20') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-20') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-20')) and date(date_trunc('week',date('2021-10-20')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-13') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-13') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-13')) and date(date_trunc('week',date('2021-10-13')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-06') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-06') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-06')) and date(date_trunc('week',date('2021-10-06')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-29') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-29') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-29')) and date(date_trunc('week',date('2021-09-29')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-22') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-22') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-22')) and date(date_trunc('week',date('2021-09-22')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-15') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-15') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-15')) and date(date_trunc('week',date('2021-09-15')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-08') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-08') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-08')) and date(date_trunc('week',date('2021-09-08')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-09-01') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-09-01') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-09-01')) and date(date_trunc('week',date('2021-09-01')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-25') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-25') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-25')) and date(date_trunc('week',date('2021-08-25')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-18') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-18') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-18')) and date(date_trunc('week',date('2021-08-18')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '412e4b03-bf23-c30a-9cf4-0a6d7f72b457' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from lousdiner.staffcontract sc  join lousdiner.staff st on (st.id=sc.id_staff) left join lousdiner.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-08-25') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-08-25') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from lousdiner.timetracker tt where tt.daydate between date_trunc('week',date('2021-08-25')) and date(date_trunc('week',date('2021-08-25')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select us.id,cp.schemata from public.users us left join public.companies cp on (us.id_company=cp.id) where lower(us.username)=lower('ksaffran@dks.lu') and us.userpassword = 'a1b496fa520a1c52edd076ca7a59e56667e7ebeb5ba5ba966d2d01628e165359' and us.isblocked is null;
-EXEC: delete from public.sessions where id_user='e9e6880b-75c7-70b5-ce61-49cf6d62630f' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36';
-QUERY: insert into public.sessions (id_user,id,remote_addr,user_agent,sessiondata) VALUES( 'e9e6880b-75c7-70b5-ce61-49cf6d62630f',public.getuuid(), '::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',('{"schemata":"demo"}'::text)::json) returning id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '29fa1f54-cd8d-1dfa-12a6-16d2da0b5eaf' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '29fa1f54-cd8d-1dfa-12a6-16d2da0b5eaf' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '29fa1f54-cd8d-1dfa-12a6-16d2da0b5eaf' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '29fa1f54-cd8d-1dfa-12a6-16d2da0b5eaf' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '29fa1f54-cd8d-1dfa-12a6-16d2da0b5eaf' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '29fa1f54-cd8d-1dfa-12a6-16d2da0b5eaf' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '29fa1f54-cd8d-1dfa-12a6-16d2da0b5eaf' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '29fa1f54-cd8d-1dfa-12a6-16d2da0b5eaf' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select us.id,cp.schemata from public.users us left join public.companies cp on (us.id_company=cp.id) where lower(us.username)=lower('ksaffran@dks.lu') and us.userpassword = 'a1b496fa520a1c52edd076ca7a59e56667e7ebeb5ba5ba966d2d01628e165359' and us.isblocked is null;
-EXEC: delete from public.sessions where id_user='e9e6880b-75c7-70b5-ce61-49cf6d62630f' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36';
-QUERY: insert into public.sessions (id_user,id,remote_addr,user_agent,sessiondata) VALUES( 'e9e6880b-75c7-70b5-ce61-49cf6d62630f',public.getuuid(), '::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',('{"schemata":"demo"}'::text)::json) returning id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '19494d06-38f1-5687-a8b7-5c7b65386760' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '19494d06-38f1-5687-a8b7-5c7b65386760' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '19494d06-38f1-5687-a8b7-5c7b65386760' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '19494d06-38f1-5687-a8b7-5c7b65386760' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '19494d06-38f1-5687-a8b7-5c7b65386760' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '19494d06-38f1-5687-a8b7-5c7b65386760' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '19494d06-38f1-5687-a8b7-5c7b65386760' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '19494d06-38f1-5687-a8b7-5c7b65386760' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select us.id,cp.schemata from public.users us left join public.companies cp on (us.id_company=cp.id) where lower(us.username)=lower('ksaffran@dks.lu') and us.userpassword = 'a1b496fa520a1c52edd076ca7a59e56667e7ebeb5ba5ba966d2d01628e165359' and us.isblocked is null;
-EXEC: delete from public.sessions where id_user='e9e6880b-75c7-70b5-ce61-49cf6d62630f' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36';
-QUERY: insert into public.sessions (id_user,id,remote_addr,user_agent,sessiondata) VALUES( 'e9e6880b-75c7-70b5-ce61-49cf6d62630f',public.getuuid(), '::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',('{"schemata":"demo"}'::text)::json) returning id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '9d68b5bf-9871-ed95-b892-5e338ea0df32' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '9d68b5bf-9871-ed95-b892-5e338ea0df32' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '9d68b5bf-9871-ed95-b892-5e338ea0df32' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '9d68b5bf-9871-ed95-b892-5e338ea0df32' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '9d68b5bf-9871-ed95-b892-5e338ea0df32' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '9d68b5bf-9871-ed95-b892-5e338ea0df32' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '9d68b5bf-9871-ed95-b892-5e338ea0df32' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select us.id,cp.schemata from public.users us left join public.companies cp on (us.id_company=cp.id) where lower(us.username)=lower('ksaffran@dks.lu') and us.userpassword = 'a1b496fa520a1c52edd076ca7a59e56667e7ebeb5ba5ba966d2d01628e165359' and us.isblocked is null;
-EXEC: delete from public.sessions where id_user='e9e6880b-75c7-70b5-ce61-49cf6d62630f' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36';
-QUERY: insert into public.sessions (id_user,id,remote_addr,user_agent,sessiondata) VALUES( 'e9e6880b-75c7-70b5-ce61-49cf6d62630f',public.getuuid(), '::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',('{"schemata":"demo"}'::text)::json) returning id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2018-01-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2018-08-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2018-01-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2018-04-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2018-06-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2018-01-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2021-01-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2021-02-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2021-01-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month','2018-01-01') order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sessiondata from public.sessions where id='6de82864-4076-8bf7-8f7d-bc99a6d6e4d6'
-EXEC: update public.sessions set sessiondata='{"schemata":"alicehartmann"}' where id='6de82864-4076-8bf7-8f7d-bc99a6d6e4d6'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-02-01')) order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-08-01')) order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-11-01')) order by spd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by spd.daydate, st.surname,st.prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2020-08-01')) order by spd.daydate, st.surname,st.prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2020-01-01')) order by spd.daydate, st.surname,st.prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-08-01')) order by spd.daydate, st.surname,st.prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-08-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM alicehartmann.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM alicehartmann.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM alicehartmann.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-ame,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from alicehartmann.staffcontract sc  join alicehartmann.staff st on (st.id=sc.id_staff) left join alicehartmann.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-11-04') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-11-04') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from alicehartmann.timetracker tt where tt.daydate between date_trunc('week',date('2021-11-04')) and date(date_trunc('week',date('2021-11-04')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from alicehartmann.staffcontract sc  join alicehartmann.staff st on (st.id=sc.id_staff) left join alicehartmann.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-11-04') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-11-04') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from alicehartmann.timetracker tt where tt.daydate between date_trunc('week',date('2021-11-04')) and date(date_trunc('week',date('2021-11-04')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from alicehartmann.staffcontract sc  join alicehartmann.staff st on (st.id=sc.id_staff) left join alicehartmann.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-11-04') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-11-04') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from alicehartmann.timetracker tt where tt.daydate between date_trunc('week',date('2021-11-04')) and date(date_trunc('week',date('2021-11-04')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from alicehartmann.staffcontract sc  join alicehartmann.staff st on (st.id=sc.id_staff) left join alicehartmann.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-11-04') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-11-04') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from alicehartmann.timetracker tt where tt.daydate between date_trunc('week',date('2021-11-04')) and date(date_trunc('week',date('2021-11-04')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from alicehartmann.staffcontract sc  join alicehartmann.staff st on (st.id=sc.id_staff) left join alicehartmann.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-11-04') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-11-04') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from alicehartmann.timetracker tt where tt.daydate between date_trunc('week',date('2021-11-04')) and date(date_trunc('week',date('2021-11-04')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from alicehartmann.staffcontract sc  join alicehartmann.staff st on (st.id=sc.id_staff) left join alicehartmann.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-10-28') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-10-28') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from alicehartmann.timetracker tt where tt.daydate between date_trunc('week',date('2021-10-28')) and date(date_trunc('week',date('2021-10-28')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from alicehartmann.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from alicehartmann.staff st 
-LEFT JOIN alicehartmann.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='alicehartmann') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM alicehartmann.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM alicehartmann.staffgroups sg LEFT JOIN alicehartmann.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM alicehartmann.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM alicehartmann.staffreportperiod srp
-     LEFT JOIN alicehartmann.staff st ON srp.id_staff = st.id
-     LEFT JOIN alicehartmann.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN alicehartmann.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM alicehartmann.staffreportperiod srp
-     LEFT JOIN alicehartmann.staff st ON srp.id_staff = st.id
-     LEFT JOIN alicehartmann.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN alicehartmann.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM alicehartmann.staffreportperiod srp
-     LEFT JOIN alicehartmann.staff st ON srp.id_staff = st.id
-     LEFT JOIN alicehartmann.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN alicehartmann.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sessiondata from public.sessions where id='6de82864-4076-8bf7-8f7d-bc99a6d6e4d6'
-EXEC: update public.sessions set sessiondata='{"schemata":"dolcevita"}' where id='6de82864-4076-8bf7-8f7d-bc99a6d6e4d6'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='50e446df-14ca-87b6-f443-2cd70b33e069' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '50e446df-14ca-87b6-f443-2cd70b33e069'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='a32da709-0202-71c4-43c9-bc89fdf5aaba' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a32da709-0202-71c4-43c9-bc89fdf5aaba'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='e5c70de3-366c-4b2a-1af0-aed175cf37c0' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'e5c70de3-366c-4b2a-1af0-aed175cf37c0'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '29488caf-66ac-84e6-ab9b-1aebadd8bcf2'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='50e446df-14ca-87b6-f443-2cd70b33e069' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '50e446df-14ca-87b6-f443-2cd70b33e069'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='cd20d578-869c-693f-db20-198cca57cbe5' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cd20d578-869c-693f-db20-198cca57cbe5'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='eb5819bb-6268-3485-1845-2c1806f71b5c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eb5819bb-6268-3485-1845-2c1806f71b5c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='a32da709-0202-71c4-43c9-bc89fdf5aaba' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a32da709-0202-71c4-43c9-bc89fdf5aaba'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '29488caf-66ac-84e6-ab9b-1aebadd8bcf2'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='cd20d578-869c-693f-db20-198cca57cbe5' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cd20d578-869c-693f-db20-198cca57cbe5'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='eb5819bb-6268-3485-1845-2c1806f71b5c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eb5819bb-6268-3485-1845-2c1806f71b5c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='e5c70de3-366c-4b2a-1af0-aed175cf37c0' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'e5c70de3-366c-4b2a-1af0-aed175cf37c0'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '29488caf-66ac-84e6-ab9b-1aebadd8bcf2'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='50e446df-14ca-87b6-f443-2cd70b33e069' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '50e446df-14ca-87b6-f443-2cd70b33e069'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='50e446df-14ca-87b6-f443-2cd70b33e069' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '50e446df-14ca-87b6-f443-2cd70b33e069'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='a32da709-0202-71c4-43c9-bc89fdf5aaba' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a32da709-0202-71c4-43c9-bc89fdf5aaba'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='e5c70de3-366c-4b2a-1af0-aed175cf37c0' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by vacyear;
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by startdate,enddate;
-cyhours, 'HH24:MI'::text) AS vacancyhours,
-    to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'e5c70de3-366c-4b2a-1af0-aed175cf37c0'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '29488caf-66ac-84e6-ab9b-1aebadd8bcf2'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='eb5819bb-6268-3485-1845-2c1806f71b5c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eb5819bb-6268-3485-1845-2c1806f71b5c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='cd20d578-869c-693f-db20-198cca57cbe5' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cd20d578-869c-693f-db20-198cca57cbe5'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='eb5819bb-6268-3485-1845-2c1806f71b5c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eb5819bb-6268-3485-1845-2c1806f71b5c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='10d324ef-e2da-a461-5b3b-ae0705d8d301' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '10d324ef-e2da-a461-5b3b-ae0705d8d301'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='eb5819bb-6268-3485-1845-2c1806f71b5c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eb5819bb-6268-3485-1845-2c1806f71b5c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-ours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='a32da709-0202-71c4-43c9-bc89fdf5aaba' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a32da709-0202-71c4-43c9-bc89fdf5aaba'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='e5c70de3-366c-4b2a-1af0-aed175cf37c0' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'e5c70de3-366c-4b2a-1af0-aed175cf37c0'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '29488caf-66ac-84e6-ab9b-1aebadd8bcf2'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='cd20d578-869c-693f-db20-198cca57cbe5' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='cd20d578-869c-693f-db20-198cca57cbe5' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cd20d578-869c-693f-db20-198cca57cbe5'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='10d324ef-e2da-a461-5b3b-ae0705d8d301' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '10d324ef-e2da-a461-5b3b-ae0705d8d301'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
- ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='440afd12-38a6-8b64-b68a-77b88ecf5c75') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='440afd12-38a6-8b64-b68a-77b88ecf5c75' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='440afd12-38a6-8b64-b68a-77b88ecf5c75') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='440afd12-38a6-8b64-b68a-77b88ecf5c75' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='a8b680ac-2c28-318c-7db4-f81ec058b925'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-07-01') and date('2021-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-07-01') and date('2021-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-06-28') and date('2021-09-05')
-                    ) 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('2021-06-28') then startdate else date('2021-06-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-09-05') then date('2021-09-05')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' 
-    and startdate < date('2021-09-05')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and lpd.daydate between date('2021-06-28') and date('2021-09-05')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-07-01') and date('2021-08-31') and id_staff ='440afd12-38a6-8b64-b68a-77b88ecf5c75') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='440afd12-38a6-8b64-b68a-77b88ecf5c75' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-06-28') and date('2021-09-05') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-06-28') and date('2021-09-05')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='a32da709-0202-71c4-43c9-bc89fdf5aaba' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a32da709-0202-71c4-43c9-bc89fdf5aaba'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a32da709-0202-71c4-43c9-bc89fdf5aaba'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='50e446df-14ca-87b6-f443-2cd70b33e069' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '50e446df-14ca-87b6-f443-2cd70b33e069'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='e5c70de3-366c-4b2a-1af0-aed175cf37c0' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'e5c70de3-366c-4b2a-1af0-aed175cf37c0'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id='dbf0835b-63e2-e6d8-8d0b-d7211d4e954f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '29488caf-66ac-84e6-ab9b-1aebadd8bcf2'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by startdate,enddate;
-cyhours, 'HH24:MI'::text) AS vacancyhours,
-    to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '29488caf-66ac-84e6-ab9b-1aebadd8bcf2'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '29488caf-66ac-84e6-ab9b-1aebadd8bcf2'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='29488caf-66ac-84e6-ab9b-1aebadd8bcf2') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='29488caf-66ac-84e6-ab9b-1aebadd8bcf2' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='50e446df-14ca-87b6-f443-2cd70b33e069' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '50e446df-14ca-87b6-f443-2cd70b33e069'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '50e446df-14ca-87b6-f443-2cd70b33e069'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='50e446df-14ca-87b6-f443-2cd70b33e069' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='a32da709-0202-71c4-43c9-bc89fdf5aaba' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a32da709-0202-71c4-43c9-bc89fdf5aaba'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='a32da709-0202-71c4-43c9-bc89fdf5aaba' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a32da709-0202-71c4-43c9-bc89fdf5aaba'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='440afd12-38a6-8b64-b68a-77b88ecf5c75') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='440afd12-38a6-8b64-b68a-77b88ecf5c75' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-04-29') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-04-29') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-04-29') between startdate and enddate) or (startdate <= date('2021-04-29') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-29') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-04-28') between startdate and enddate) or (startdate <= date('2021-04-28') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-28') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-04-27') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-04-27') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-04-27') between startdate and enddate) or (startdate <= date('2021-04-27') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-27') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-04-27') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-04-27') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-04-27') between startdate and enddate) or (startdate <= date('2021-04-27') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-27') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-04-27') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-04-27') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-04-27') between startdate and enddate) or (startdate <= date('2021-04-27') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-27') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-04-28') between startdate and enddate) or (startdate <= date('2021-04-28') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-28') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-04-28') between startdate and enddate) or (startdate <= date('2021-04-28') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-28') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='8ad632ef-aa14-468d-ede6-283cb9c1ce24') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate < date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate > date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and ((date('2021-04-28') between startdate and enddate) or (startdate <= date('2021-04-28') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-28') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='8ad632ef-aa14-468d-ede6-283cb9c1ce24') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate < date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate > date('2021-04-28') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and ((date('2021-04-28') between startdate and enddate) or (startdate <= date('2021-04-28') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-28') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM dolcevita.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '8ad632ef-aa14-468d-ede6-283cb9c1ce24'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='8ad632ef-aa14-468d-ede6-283cb9c1ce24') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='8ad632ef-aa14-468d-ede6-283cb9c1ce24' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate < date('2021-04-27') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate > date('2021-04-27') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and ((date('2021-04-27') between startdate and enddate) or (startdate <= date('2021-04-27') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-04-27') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-04-27') and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-04-27') and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '8ad632ef-aa14-468d-ede6-283cb9c1ce24' as id_staff,date('2021-04-27') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '8ad632ef-aa14-468d-ede6-283cb9c1ce24' as id_staff,date('2021-04-27') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate < date('2021-05-01') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate > date('2021-05-01') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and ((date('2021-05-01') between startdate and enddate) or (startdate <= date('2021-05-01') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-05-01') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-05-01') and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-05-01') and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '8ad632ef-aa14-468d-ede6-283cb9c1ce24' as id_staff,date('2021-05-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '8ad632ef-aa14-468d-ede6-283cb9c1ce24' as id_staff,date('2021-05-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate < date('2021-05-06') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '8ad632ef-aa14-468d-ede6-283cb9c1ce24' and daydate > date('2021-05-06') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' and ((date('2021-05-06') between startdate and enddate) or (startdate <= date('2021-05-06') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2021-05-27' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-05-06') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-05-06') and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-05-06') and id_staff='8ad632ef-aa14-468d-ede6-283cb9c1ce24' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '8ad632ef-aa14-468d-ede6-283cb9c1ce24' as id_staff,date('2021-05-06') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '8ad632ef-aa14-468d-ede6-283cb9c1ce24' as id_staff,date('2021-05-06') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='e5c70de3-366c-4b2a-1af0-aed175cf37c0' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'e5c70de3-366c-4b2a-1af0-aed175cf37c0'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='e5c70de3-366c-4b2a-1af0-aed175cf37c0' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'e5c70de3-366c-4b2a-1af0-aed175cf37c0'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='10d324ef-e2da-a461-5b3b-ae0705d8d301' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '10d324ef-e2da-a461-5b3b-ae0705d8d301'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '10d324ef-e2da-a461-5b3b-ae0705d8d301'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='978b4987-67ba-f071-0601-e5704bffc5cb'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-09-01') and date('2021-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-09-01') and date('2021-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '10d324ef-e2da-a461-5b3b-ae0705d8d301' and daydate between date('2021-08-30') and date('2021-10-31')
-                    ) 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('2021-08-30') then startdate else date('2021-08-30') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-10-31') then date('2021-10-31')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' 
-    and startdate < date('2021-10-31')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' and lpd.daydate between date('2021-08-30') and date('2021-10-31')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-09-01') and date('2021-10-31') and id_staff ='10d324ef-e2da-a461-5b3b-ae0705d8d301') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='10d324ef-e2da-a461-5b3b-ae0705d8d301' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' and daydate between date('2021-08-30') and date('2021-10-31') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-08-30') and date('2021-10-31')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='eb5819bb-6268-3485-1845-2c1806f71b5c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eb5819bb-6268-3485-1845-2c1806f71b5c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='eb5819bb-6268-3485-1845-2c1806f71b5c' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='10d324ef-e2da-a461-5b3b-ae0705d8d301' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '10d324ef-e2da-a461-5b3b-ae0705d8d301'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '10d324ef-e2da-a461-5b3b-ae0705d8d301'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='978b4987-67ba-f071-0601-e5704bffc5cb'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-09-01') and date('2021-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-09-01') and date('2021-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '10d324ef-e2da-a461-5b3b-ae0705d8d301' and daydate between date('2021-08-30') and date('2021-10-31')
-                    ) 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('2021-08-30') then startdate else date('2021-08-30') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-10-31') then date('2021-10-31')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' 
-    and startdate < date('2021-10-31')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' and lpd.daydate between date('2021-08-30') and date('2021-10-31')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-09-01') and date('2021-10-31') and id_staff ='10d324ef-e2da-a461-5b3b-ae0705d8d301') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='10d324ef-e2da-a461-5b3b-ae0705d8d301' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='10d324ef-e2da-a461-5b3b-ae0705d8d301' and daydate between date('2021-08-30') and date('2021-10-31') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-08-30') and date('2021-10-31')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '813c99cd-fe76-c8ef-4352-65fda02ddb7f'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '813c99cd-fe76-c8ef-4352-65fda02ddb7f' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='813c99cd-fe76-c8ef-4352-65fda02ddb7f') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='813c99cd-fe76-c8ef-4352-65fda02ddb7f' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='813c99cd-fe76-c8ef-4352-65fda02ddb7f' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='053e9c88-651b-ff30-87f9-cffcd927990d'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-05-01') and date('2021-06-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-04-26') and date('2021-07-04')
-                    ) 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('2021-04-26') then startdate else date('2021-04-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-07-04') then date('2021-07-04')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' 
-    and startdate < date('2021-07-04')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and lpd.daydate between date('2021-04-26') and date('2021-07-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-05-01') and date('2021-06-30') and id_staff ='440afd12-38a6-8b64-b68a-77b88ecf5c75') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='440afd12-38a6-8b64-b68a-77b88ecf5c75' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-04-26') and date('2021-07-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-04-26') and date('2021-07-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM dolcevita.staffgroups sg LEFT JOIN dolcevita.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM dolcevita.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: select id,trackername from dolcevita.timetrackerconfig order by trackername
-is null or isworktime=false order by vacancyname;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from dolcevita.staff st 
-LEFT JOIN dolcevita.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='dolcevita') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from dolcevita.staff where id='440afd12-38a6-8b64-b68a-77b88ecf5c75' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from dolcevita.staffvacancyyear where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from dolcevita.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM dolcevita.staffreportperiod srp
-     LEFT JOIN dolcevita.staff st ON srp.id_staff = st.id
-     LEFT JOIN dolcevita.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN dolcevita.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '440afd12-38a6-8b64-b68a-77b88ecf5c75'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from dolcevita.reportperiod where id='a8b680ac-2c28-318c-7db4-f81ec058b925'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-07-01') and date('2021-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-07-01') and date('2021-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 dolcevita.staffreportperioddays
-                    where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-06-28') and date('2021-09-05')
-                    ) 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('2021-06-28') then startdate else date('2021-06-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-09-05') then date('2021-09-05')
-    else enddate end as staffperiodend from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' 
-    and startdate < date('2021-09-05')
-  ) sc 
-  join dolcevita.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,avg(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 dolcevita.staffreportperioddays lpd
-  left join dolcevita.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from dolcevita.worktimes where isdefault=true) wkdef
-  where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and lpd.daydate between date('2021-06-28') and date('2021-09-05')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from dolcevita.timetracker 
-where daydate between date('2021-07-01') and date('2021-08-31') and id_staff ='440afd12-38a6-8b64-b68a-77b88ecf5c75') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM dolcevita.staffreportperioddays pd
-             JOIN dolcevita.staff st ON pd.id_staff = st.id and st.id='440afd12-38a6-8b64-b68a-77b88ecf5c75' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM dolcevita.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join dolcevita.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from dolcevita.worktimes where isdefault =true) wkstd
-          left join dolcevita.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from dolcevita.timetracker where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate between date('2021-06-28') and date('2021-09-05') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2021-06-28') and date('2021-09-05')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-08-03') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-08-03') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-08-03') between startdate and enddate) or (startdate <= date('2021-08-03') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2021-08-01' as datebefore,
-          '15:30' as timebefore,
-          '2021-08-05' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-08-03') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-08-03') and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-08-03') and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by stamp_in,stamp_out;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate < date('2021-08-04') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from dolcevita.staffreportperioddays where id_staff= '440afd12-38a6-8b64-b68a-77b88ecf5c75' and daydate > date('2021-08-04') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from dolcevita.staffcontract where id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' and ((date('2021-08-04') between startdate and enddate) or (startdate <= date('2021-08-04') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2021-08-03' as datebefore,
-          '22:30' as timebefore,
-          '2021-08-05' as dateafter,
-          '10:00' as timeafter
- from dolcevita.worktimes wk where (date('2021-08-04') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-08-04') and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from dolcevita.timetracker where daydate=date('2021-08-04') and id_staff='440afd12-38a6-8b64-b68a-77b88ecf5c75' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '440afd12-38a6-8b64-b68a-77b88ecf5c75' as id_staff,date('2021-08-04') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '440afd12-38a6-8b64-b68a-77b88ecf5c75' as id_staff,date('2021-08-04') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='dolcevita';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sessiondata from public.sessions where id='6de82864-4076-8bf7-8f7d-bc99a6d6e4d6'
-EXEC: update public.sessions set sessiondata='{"schemata":"demo50"}' where id='6de82864-4076-8bf7-8f7d-bc99a6d6e4d6'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo50.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo50.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo50.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date('2020-08-31') and date('2020-10-04')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-10-04') then date('2020-10-04')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' 
-    and startdate < date('2020-10-04')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and lpd.daydate between date('2020-08-31') and date('2020-10-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-09-01') and date('2020-09-30') and id_staff ='6332f4fa-2b55-e230-4015-095bf5ed1c13') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='6332f4fa-2b55-e230-4015-095bf5ed1c13' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date('2020-08-31') and date('2020-10-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-10-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate < date('2020-09-02') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate > date('2020-09-02') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and ((date('2020-09-02') between startdate and enddate) or (startdate <= date('2020-09-02') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-01' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-03' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-09-02') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-02') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-02') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-02') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo50.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause='1',timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='1cc69be6-e91f-745f-54ab-24e80427a006';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo50.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('68e26cb2-0736-70fd-b95e-96ff8d59e607',date('2020-09-02'),'6332f4fa-2b55-e230-4015-095bf5ed1c13','2020-09-02 00:00:00'::timestamp,'2020-09-02 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-09-02 00:00:00'::timestamp,stamp_out='2020-09-02 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo50.timetracker WHERE id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate=date('2020-09-02') and id not in ('68e26cb2-0736-70fd-b95e-96ff8d59e607');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo50.staffreportperiod srp
-    join demo50.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by rp.startdate,rp.enddate)
-    sper ) prp where id='9b93bd90-2325-fe28-4bff-852203fc99ce'; 
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date('2020-08-31') and date('2020-10-04')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-10-04') then date('2020-10-04')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' 
-    and startdate < date('2020-10-04')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and lpd.daydate between date('2020-08-31') and date('2020-10-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-09-01') and date('2020-09-30') and id_staff ='6332f4fa-2b55-e230-4015-095bf5ed1c13') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo50.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo50.staffreportperioddays where id in (select id from demo50.staffreportperioddays where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-09-30')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo50.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,5+row_number() over (order by daydate) as rowx  from demo50.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-09-30') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo50.staffreportperiod where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and id_reportperiod in (select id from demo50.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,5+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-09-30')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='6332f4fa-2b55-e230-4015-095bf5ed1c13' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date('2020-08-31') and date('2020-10-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-10-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo50.staffreportperioddays
-                    where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-09-30')) + interval '6 days')
-                    --where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date('2020-09-01') and date('2020-09-30')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo50.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=9,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=1,last44date=date('2020-09-28'),avgtotalweekhours='40:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo50.staffreportperioddays pd 
-  join demo50.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and  pd.daydate between date('2020-09-01') and date('2020-09-30')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6332f4fa-2b55-e230-4015-095bf5ed1c13'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate < date('2020-09-04') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate > date('2020-09-04') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and ((date('2020-09-04') between startdate and enddate) or (startdate <= date('2020-09-04') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-03' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-05' as dateafter,
-          '19:30' as timeafter
- from demo50.worktimes wk where (date('2020-09-04') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-04') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-04') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-04') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-04') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate < date('2020-09-04') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate > date('2020-09-04') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and ((date('2020-09-04') between startdate and enddate) or (startdate <= date('2020-09-04') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-03' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-05' as dateafter,
-          '19:30' as timeafter
- from demo50.worktimes wk where (date('2020-09-04') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-04') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-04') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-04') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-04') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo50.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause='1',timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='491ecfe0-f29b-28aa-8940-7188eef1c2e7';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo50.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('235cfac3-fec9-01ce-934e-a8d33e9ad56c',date('2020-09-04'),'6332f4fa-2b55-e230-4015-095bf5ed1c13','2020-09-04 00:00:00'::timestamp,'2020-09-04 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-09-04 00:00:00'::timestamp,stamp_out='2020-09-04 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo50.timetracker WHERE id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate=date('2020-09-04') and id not in ('235cfac3-fec9-01ce-934e-a8d33e9ad56c');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select * from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date('2020-08-31') and date('2020-10-04')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-10-04') then date('2020-10-04')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' 
-    and startdate < date('2020-10-04')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and lpd.daydate between date('2020-08-31') and date('2020-10-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-09-01') and date('2020-09-30') and id_staff ='6332f4fa-2b55-e230-4015-095bf5ed1c13') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo50.staffreportperiod srp
-    join demo50.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by rp.startdate,rp.enddate)
-    sper ) prp where id='9b93bd90-2325-fe28-4bff-852203fc99ce'; 
-EXEC: update demo50.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo50.staffreportperioddays where id in (select id from demo50.staffreportperioddays where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-09-30')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo50.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,5+row_number() over (order by daydate) as rowx  from demo50.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-09-30') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by daydate
-) xsunday) sunresult;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo50.staffreportperiod where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and id_reportperiod in (select id from demo50.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='6332f4fa-2b55-e230-4015-095bf5ed1c13' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date('2020-08-31') and date('2020-10-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-10-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,5+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-09-30')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo50.staffreportperioddays
-                    where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-09-30')) + interval '6 days')
-                    --where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate between date('2020-09-01') and date('2020-09-30')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo50.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=9,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=1,last44date=date('2020-09-28'),avgtotalweekhours='40:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo50.staffreportperioddays pd 
-  join demo50.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and  pd.daydate between date('2020-09-01') and date('2020-09-30')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6332f4fa-2b55-e230-4015-095bf5ed1c13'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate < date('2020-09-11') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate > date('2020-09-11') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and ((date('2020-09-11') between startdate and enddate) or (startdate <= date('2020-09-11') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-10' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-12' as dateafter,
-          '19:30' as timeafter
- from demo50.worktimes wk where (date('2020-09-11') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-11') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-11') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-11') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-11') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate < date('2020-09-09') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= '6332f4fa-2b55-e230-4015-095bf5ed1c13' and daydate > date('2020-09-09') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' and ((date('2020-09-09') between startdate and enddate) or (startdate <= date('2020-09-09') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-08' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-10' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-09-09') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-09') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-09') and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-09') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '6332f4fa-2b55-e230-4015-095bf5ed1c13' as id_staff,date('2020-09-09') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from demo50.staff st 
-LEFT JOIN demo50.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='demo50') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM demo50.staffgroups sg LEFT JOIN demo50.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo50.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: select id,trackername from demo50.timetrackerconfig order by trackername
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo50.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='28527822-7e9e-baa4-e825-684d015eed40' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '28527822-7e9e-baa4-e825-684d015eed40'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by vacyear;
-to_char(srp.workhours, 'HH24:MI'::text) AS workhours,
-    --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours,
-    to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-07-27') and date('2020-09-06')
-                    ) 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('2020-07-27') then startdate else date('2020-07-27') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and lpd.daydate between date('2020-07-27') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-08-01') and date('2020-08-31') and id_staff ='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-07-27') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-07-27') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate < date('2020-07-27') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate > date('2020-07-27') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and ((date('2020-07-27') between startdate and enddate) or (startdate <= date('2020-07-27') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2020-07-29' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-07-27') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-07-27') and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-07-27') and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' as id_staff,date('2020-07-27') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' as id_staff,date('2020-07-27') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate < date('2020-07-29') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate > date('2020-07-29') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and ((date('2020-07-29') between startdate and enddate) or (startdate <= date('2020-07-29') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-07-27' as datebefore,
-          '22:00' as timebefore,
-          '2020-07-30' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-07-29') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-07-29') and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-07-29') and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' as id_staff,date('2020-07-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' as id_staff,date('2020-07-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate < date('2020-07-27') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate > date('2020-07-27') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and ((date('2020-07-27') between startdate and enddate) or (startdate <= date('2020-07-27') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2020-07-29' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-07-27') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-07-27') and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-07-27') and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' as id_staff,date('2020-07-27') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' as id_staff,date('2020-07-27') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo50.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause='1',timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='14fee166-c4a3-f1a9-69d4-0f9b62dde45b';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo50.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('1df9757f-cfe7-32f3-942f-55b824f9b8c7',date('2020-07-27'),'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c','2020-07-27 00:00:00'::timestamp,'2020-07-27 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-07-27 00:00:00'::timestamp,stamp_out='2020-07-27 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo50.timetracker WHERE id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate=date('2020-07-27') and id not in ('1df9757f-cfe7-32f3-942f-55b824f9b8c7');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERY: select * from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-07-27') and date('2020-09-06')
-                    ) 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('2020-07-27') then startdate else date('2020-07-27') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and lpd.daydate between date('2020-07-27') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-08-01') and date('2020-08-31') and id_staff ='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo50.staffreportperiod srp
-    join demo50.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by rp.startdate,rp.enddate)
-    sper ) prp where id='2583c916-2d07-f42d-9c85-18ee42959317'; 
-EXEC: update demo50.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo50.staffreportperioddays where id in (select id from demo50.staffreportperioddays where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date(date_trunc('week',date('2020-08-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo50.staffreportperiod where id_reportperiod='4944e59f-fd58-87a1-e22f-84808be49767' and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,+row_number() over (order by daydate) as rowx  from demo50.staffreportperioddays 
-where daydate between date('2020-08-01') and date('2020-08-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo50.staffreportperiod where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and id_reportperiod in (select id from demo50.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-08-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and sr.daydate between  date('2020-08-01')  and date(date_trunc('week',date('2020-08-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-07-27') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-07-27') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo50.staffreportperioddays
-                    where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date(date_trunc('week',date('2020-08-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days')
-                    --where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-08-01') and date('2020-08-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo50.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=5,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=5,last44date=date('2020-08-31'),avgtotalweekhours='40:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo50.staffreportperioddays pd 
-  join demo50.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317')
-  where pd.id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and  pd.daydate between date('2020-08-01') and date('2020-08-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-07-27') and date('2020-09-06')
-                    ) 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('2020-07-27') then startdate else date('2020-07-27') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and lpd.daydate between date('2020-07-27') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-08-01') and date('2020-08-31') and id_staff ='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-07-27') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-07-27') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='28527822-7e9e-baa4-e825-684d015eed40' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '28527822-7e9e-baa4-e825-684d015eed40'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '28527822-7e9e-baa4-e825-684d015eed40'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='4944e59f-fd58-87a1-e22f-84808be49767'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-07-01') and date('2020-07-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-07-01') and date('2020-07-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-06-29') and date('2020-08-02')
-                    ) 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('2020-06-29') then startdate else date('2020-06-29') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-08-02') then date('2020-08-02')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' 
-    and startdate < date('2020-08-02')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and lpd.daydate between date('2020-06-29') and date('2020-08-02')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-07-01') and date('2020-07-31') and id_staff ='28527822-7e9e-baa4-e825-684d015eed40') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='28527822-7e9e-baa4-e825-684d015eed40' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-06-29') and date('2020-08-02') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-06-29') and date('2020-08-02')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'af9f604b-fcf9-0161-da20-1e3d7b1e4111'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= 'eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-07-27') and date('2020-09-06')
-                    ) 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('2020-07-27') then startdate else date('2020-07-27') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and lpd.daydate between date('2020-07-27') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-08-01') and date('2020-08-31') and id_staff ='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='eef01d53-ac8f-de1d-4073-2e7c8f3e8f9c' and daydate between date('2020-07-27') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-07-27') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='a77618bc-86f2-800f-b26d-6d641147ab7c' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='a77618bc-86f2-800f-b26d-6d641147ab7c' order by daydate;
-plhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a77618bc-86f2-800f-b26d-6d641147ab7c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='a77618bc-86f2-800f-b26d-6d641147ab7c' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a77618bc-86f2-800f-b26d-6d641147ab7c'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='a77618bc-86f2-800f-b26d-6d641147ab7c' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= 'a77618bc-86f2-800f-b26d-6d641147ab7c' and daydate between date('2020-07-27') and date('2020-09-06')
-                    ) 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('2020-07-27') then startdate else date('2020-07-27') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='a77618bc-86f2-800f-b26d-6d641147ab7c' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='a77618bc-86f2-800f-b26d-6d641147ab7c' and lpd.daydate between date('2020-07-27') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-08-01') and date('2020-08-31') and id_staff ='a77618bc-86f2-800f-b26d-6d641147ab7c') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='a77618bc-86f2-800f-b26d-6d641147ab7c' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='a77618bc-86f2-800f-b26d-6d641147ab7c' and daydate between date('2020-07-27') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-07-27') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from demo50.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from demo50.staff st 
-LEFT JOIN demo50.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='demo50') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo50.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo50.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='28527822-7e9e-baa4-e825-684d015eed40' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by daydate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '28527822-7e9e-baa4-e825-684d015eed40'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='28527822-7e9e-baa4-e825-684d015eed40' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by daydate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by startdate,enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '28527822-7e9e-baa4-e825-684d015eed40'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '28527822-7e9e-baa4-e825-684d015eed40'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-07-27') and date('2020-09-06')
-                    ) 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('2020-07-27') then startdate else date('2020-07-27') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and lpd.daydate between date('2020-07-27') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-08-01') and date('2020-08-31') and id_staff ='28527822-7e9e-baa4-e825-684d015eed40') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='28527822-7e9e-baa4-e825-684d015eed40' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-07-27') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-07-27') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate < date('2020-07-30') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate > date('2020-07-30') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and ((date('2020-07-30') between startdate and enddate) or (startdate <= date('2020-07-30') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-07-28' as datebefore,
-          '14:30' as timebefore,
-          '2020-07-31' as dateafter,
-          '10:30' as timeafter
- from demo50.worktimes wk where (date('2020-07-30') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-07-30') and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-07-30') and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '28527822-7e9e-baa4-e825-684d015eed40' as id_staff,date('2020-07-30') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, '28527822-7e9e-baa4-e825-684d015eed40' as id_staff,date('2020-07-30') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo50.staffreportperioddays SET timestart1='10:30',timeend1='14:30',timestart2='18:00',timeend2='23:00',pausestart1='10:30',pauseend1='11:00',pausestart2='18:00',pauseend2='18:30',payedpause='1',timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='1d03fe93-ec10-143e-52bc-5df940c4906a';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo50.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('6543a9cd-12d7-2f87-20fc-91113502fedb',date('2020-07-30'),'28527822-7e9e-baa4-e825-684d015eed40','2020-07-30 00:00:00'::timestamp,'2020-07-30 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-07-30 00:00:00'::timestamp,stamp_out='2020-07-30 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo50.timetracker WHERE id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate=date('2020-07-30') and id not in ('6543a9cd-12d7-2f87-20fc-91113502fedb');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERY: select * from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-07-27') and date('2020-09-06')
-                    ) 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('2020-07-27') then startdate else date('2020-07-27') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and lpd.daydate between date('2020-07-27') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-08-01') and date('2020-08-31') and id_staff ='28527822-7e9e-baa4-e825-684d015eed40') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo50.staffreportperiod srp
-    join demo50.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by rp.startdate,rp.enddate)
-    sper ) prp where id='2583c916-2d07-f42d-9c85-18ee42959317'; 
-EXEC: update demo50.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo50.staffreportperioddays where id in (select id from demo50.staffreportperioddays where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate between date(date_trunc('week',date('2020-08-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo50.staffreportperiod where id_reportperiod='4944e59f-fd58-87a1-e22f-84808be49767' and id_staff='28527822-7e9e-baa4-e825-684d015eed40';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,+row_number() over (order by daydate) as rowx  from demo50.staffreportperioddays 
-where daydate between date('2020-08-01') and date('2020-08-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo50.staffreportperiod where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and id_reportperiod in (select id from demo50.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-08-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.id_staff='28527822-7e9e-baa4-e825-684d015eed40' and sr.daydate between  date('2020-08-01')  and date(date_trunc('week',date('2020-08-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='28527822-7e9e-baa4-e825-684d015eed40' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-07-27') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-07-27') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo50.staffreportperioddays
-                    where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date(date_trunc('week',date('2020-08-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days')
-                    --where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-08-01') and date('2020-08-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo50.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=5,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=1,last44date=date('2020-08-31'),avgtotalweekhours='44:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo50.staffreportperioddays pd 
-  join demo50.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317')
-  where pd.id_staff='28527822-7e9e-baa4-e825-684d015eed40' and  pd.daydate between date('2020-08-01') and date('2020-08-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '28527822-7e9e-baa4-e825-684d015eed40'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate < date('2020-08-06') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate > date('2020-08-06') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and ((date('2020-08-06') between startdate and enddate) or (startdate <= date('2020-08-06') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-04' as datebefore,
-          '14:30' as timebefore,
-          '2020-08-07' as dateafter,
-          '10:30' as timeafter
- from demo50.worktimes wk where (date('2020-08-06') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-08-06') and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-08-06') and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, '28527822-7e9e-baa4-e825-684d015eed40' as id_staff,date('2020-08-06') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo50.staffreportperioddays SET timestart1='10:30',timeend1='14:30',timestart2='18:00',timeend2='23:00',pausestart1='10:30',pauseend1='11:00',pausestart2='18:00',pauseend2='18:30',payedpause='1',timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='d4ba15fd-fcd7-552b-4c72-f0e0143caabe';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo50.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('0ecdfce6-15f3-e3c0-c928-2899fe7f6657',date('2020-08-06'),'28527822-7e9e-baa4-e825-684d015eed40','2020-08-06 00:00:00'::timestamp,'2020-08-06 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-08-06 00:00:00'::timestamp,stamp_out='2020-08-06 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo50.timetracker WHERE id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate=date('2020-08-06') and id not in ('0ecdfce6-15f3-e3c0-c928-2899fe7f6657');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERY: select * from demo50.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-08-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-07-27') and date('2020-09-06')
-                    ) 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('2020-07-27') then startdate else date('2020-07-27') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and lpd.daydate between date('2020-07-27') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-08-01') and date('2020-08-31') and id_staff ='28527822-7e9e-baa4-e825-684d015eed40') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo50.staffreportperiod srp
-    join demo50.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by rp.startdate,rp.enddate)
-    sper ) prp where id='2583c916-2d07-f42d-9c85-18ee42959317'; 
-EXEC: update demo50.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo50.staffreportperioddays where id in (select id from demo50.staffreportperioddays where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate between date(date_trunc('week',date('2020-08-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo50.staffreportperiod where id_reportperiod='4944e59f-fd58-87a1-e22f-84808be49767' and id_staff='28527822-7e9e-baa4-e825-684d015eed40';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,+row_number() over (order by daydate) as rowx  from demo50.staffreportperioddays 
-where daydate between date('2020-08-01') and date('2020-08-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='28527822-7e9e-baa4-e825-684d015eed40' order by daydate
-) xsunday) sunresult;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo50.staffreportperiod where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and id_reportperiod in (select id from demo50.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-08-01')));
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='28527822-7e9e-baa4-e825-684d015eed40' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-07-27') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-07-27') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.id_staff='28527822-7e9e-baa4-e825-684d015eed40' and sr.daydate between  date('2020-08-01')  and date(date_trunc('week',date('2020-08-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo50.staffreportperioddays
-                    where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date(date_trunc('week',date('2020-08-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days')
-                    --where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-08-01') and date('2020-08-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo50.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=5,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=1,last44date=date('2020-08-31'),avgtotalweekhours='44:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo50.staffreportperioddays pd 
-  join demo50.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317')
-  where pd.id_staff='28527822-7e9e-baa4-e825-684d015eed40' and  pd.daydate between date('2020-08-01') and date('2020-08-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '28527822-7e9e-baa4-e825-684d015eed40'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo50';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from demo50.staff st 
-LEFT JOIN demo50.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='demo50') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo50.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM demo50.staffgroups sg LEFT JOIN demo50.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo50.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: select id,trackername from demo50.timetrackerconfig order by trackername
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='6332f4fa-2b55-e230-4015-095bf5ed1c13' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6332f4fa-2b55-e230-4015-095bf5ed1c13'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='6332f4fa-2b55-e230-4015-095bf5ed1c13' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by vacyear;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'af9f604b-fcf9-0161-da20-1e3d7b1e4111'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by startdate,enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo50.staff where id='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by startdate,enddate;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'af9f604b-fcf9-0161-da20-1e3d7b1e4111'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from demo50.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by daydate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from demo50.staffvacancyyear where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by vacyear;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'af9f604b-fcf9-0161-da20-1e3d7b1e4111'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date('2020-08-31') and date('2020-10-04')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-10-04') then date('2020-10-04')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' 
-    and startdate < date('2020-10-04')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and lpd.daydate between date('2020-08-31') and date('2020-10-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-09-01') and date('2020-09-30') and id_staff ='af9f604b-fcf9-0161-da20-1e3d7b1e4111') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='af9f604b-fcf9-0161-da20-1e3d7b1e4111' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date('2020-08-31') and date('2020-10-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-10-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate < date('2020-09-01') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate > date('2020-09-01') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and ((date('2020-09-01') between startdate and enddate) or (startdate <= date('2020-09-01') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-31' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-03' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-09-01') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-01') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo50.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='18:30',timeend2='23:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:30',pauseend2='19:00',payedpause='1',timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='c0410bb2-72d6-9649-b10b-329cf7abe200';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo50.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('651d2805-f018-d925-7cfd-8ca324b5aec6',date('2020-09-01'),'af9f604b-fcf9-0161-da20-1e3d7b1e4111','2020-09-01 00:00:00'::timestamp,'2020-09-01 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-09-01 00:00:00'::timestamp,stamp_out='2020-09-01 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo50.timetracker WHERE id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate=date('2020-09-01') and id not in ('651d2805-f018-d925-7cfd-8ca324b5aec6');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select * from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date('2020-08-31') and date('2020-10-04')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-10-04') then date('2020-10-04')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' 
-    and startdate < date('2020-10-04')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and lpd.daydate between date('2020-08-31') and date('2020-10-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-09-01') and date('2020-09-30') and id_staff ='af9f604b-fcf9-0161-da20-1e3d7b1e4111') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo50.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo50.staffreportperioddays where id in (select id from demo50.staffreportperioddays where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-09-30')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo50.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,5+row_number() over (order by daydate) as rowx  from demo50.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-09-30') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo50.staffreportperiod where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and id_reportperiod in (select id from demo50.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,5+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-09-30')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='af9f604b-fcf9-0161-da20-1e3d7b1e4111' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date('2020-08-31') and date('2020-10-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-10-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo50.staffreportperioddays
-                    where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-09-30')) + interval '6 days')
-                    --where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date('2020-09-01') and date('2020-09-30')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo50.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=9,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=1,last44date=date('2020-09-28'),avgtotalweekhours='40:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo50.staffreportperioddays pd 
-  join demo50.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and  pd.daydate between date('2020-09-01') and date('2020-09-30')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'af9f604b-fcf9-0161-da20-1e3d7b1e4111'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate < date('2020-09-07') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate > date('2020-09-07') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and ((date('2020-09-07') between startdate and enddate) or (startdate <= date('2020-09-07') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-06' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-08' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-09-07') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-07') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-07') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-07') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-07') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate < date('2020-09-13') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate > date('2020-09-13') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and ((date('2020-09-13') between startdate and enddate) or (startdate <= date('2020-09-13') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-12' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-14' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-09-13') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-13') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-13') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-13') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-13') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo50.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause='1',timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='9e5ca7ca-4e30-e407-bd7c-cafb658c9b60';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo50.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('9876a4db-d855-5e0c-d8e7-bc5d6c855c93',date('2020-09-13'),'af9f604b-fcf9-0161-da20-1e3d7b1e4111','2020-09-13 00:00:00'::timestamp,'2020-09-13 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-09-13 00:00:00'::timestamp,stamp_out='2020-09-13 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo50.timetracker WHERE id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate=date('2020-09-13') and id not in ('9876a4db-d855-5e0c-d8e7-bc5d6c855c93');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select * from demo50.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-09-30') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo50.staffreportperioddays
-                    where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date('2020-08-31') and date('2020-10-04')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-10-04') then date('2020-10-04')
-    else enddate end as staffperiodend from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' 
-    and startdate < date('2020-10-04')
-  ) sc 
-  join demo50.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,avg(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 demo50.staffreportperioddays lpd
-  left join demo50.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo50.worktimes where isdefault=true) wkdef
-  where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and lpd.daydate between date('2020-08-31') and date('2020-10-04')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo50.timetracker 
-where daydate between date('2020-09-01') and date('2020-09-30') and id_staff ='af9f604b-fcf9-0161-da20-1e3d7b1e4111') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo50.staffreportperiod srp
-    join demo50.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by rp.startdate,rp.enddate)
-    sper ) prp where id='9b93bd90-2325-fe28-4bff-852203fc99ce'; 
-EXEC: update demo50.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo50.staffreportperioddays where id in (select id from demo50.staffreportperioddays where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-09-30')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo50.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,5+row_number() over (order by daydate) as rowx  from demo50.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-09-30') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo50.staffreportperiod where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and id_reportperiod in (select id from demo50.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,5+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-09-30')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo50.staffreportperioddays pd
-             JOIN demo50.staff st ON pd.id_staff = st.id and st.id='af9f604b-fcf9-0161-da20-1e3d7b1e4111' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo50.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo50.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo50.worktimes where isdefault =true) wkstd
-          left join demo50.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo50.timetracker where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date('2020-08-31') and date('2020-10-04') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-10-04')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo50.staffreportperioddays
-                    where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-09-30')) + interval '6 days')
-                    --where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate between date('2020-09-01') and date('2020-09-30')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo50.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=9,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=1,last44date=date('2020-09-28'),avgtotalweekhours='40:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo50.staffreportperioddays pd 
-  join demo50.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and  pd.daydate between date('2020-09-01') and date('2020-09-30')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo50.staffreportperiod srp
-     LEFT JOIN demo50.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo50.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo50.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'af9f604b-fcf9-0161-da20-1e3d7b1e4111'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate < date('2020-09-15') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate > date('2020-09-15') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and ((date('2020-09-15') between startdate and enddate) or (startdate <= date('2020-09-15') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-14' as datebefore,
-          '22:00' as timebefore,
-          '2020-09-17' as dateafter,
-          '11:00' as timeafter
- from demo50.worktimes wk where (date('2020-09-15') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-15') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-15') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-15') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-15') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate < date('2020-09-11') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo50.staffreportperioddays where id_staff= 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' and daydate > date('2020-09-11') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo50.staffcontract where id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' and ((date('2020-09-11') between startdate and enddate) or (startdate <= date('2020-09-11') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-10' as datebefore,
-          '14:30' as timebefore,
-          '2020-09-12' as dateafter,
-          '17:30' as timeafter
- from demo50.worktimes wk where (date('2020-09-11') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '6de82864-4076-8bf7-8f7d-bc99a6d6e4d6' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-11') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo50.timetracker where daydate=date('2020-09-11') and id_staff='af9f604b-fcf9-0161-da20-1e3d7b1e4111' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-11') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'af9f604b-fcf9-0161-da20-1e3d7b1e4111' as id_staff,date('2020-09-11') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select us.id,cp.schemata from public.users us left join public.companies cp on (us.id_company=cp.id) where lower(us.username)=lower('ksaffran@dks.lu') and us.userpassword = 'a1b496fa520a1c52edd076ca7a59e56667e7ebeb5ba5ba966d2d01628e165359' and us.isblocked is null;
-EXEC: delete from public.sessions where id_user='e9e6880b-75c7-70b5-ce61-49cf6d62630f' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36';
-QUERY: insert into public.sessions (id_user,id,remote_addr,user_agent,sessiondata) VALUES( 'e9e6880b-75c7-70b5-ce61-49cf6d62630f',public.getuuid(), '::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',('{"schemata":"demo"}'::text)::json) returning id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-ame,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06')
-                    ) 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('2020-06-29') then startdate else date('2020-06-29') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-06-29') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-07-01') and date('2020-08-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-06-29') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-06-29') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-06-29') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-06-29') between startdate and enddate) or (startdate <= date('2020-06-29') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2020-06-30' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-06-29') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-06-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-06-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-06-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-06-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-06-30') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-06-30') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-06-30') between startdate and enddate) or (startdate <= date('2020-06-30') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-06-29' as datebefore,
-          '23:00' as timebefore,
-          '2020-07-01' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-06-30') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-06-30') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-06-30') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-06-30') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-06-30') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='c7263cff-a5fd-54a5-9831-73aa72ec78bd';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('1970ad9b-72f3-e4f5-bb7e-fffaba38bd24',date('2020-06-30'),'cc63023b-4892-c29c-787d-088392d58b88','2020-06-30 00:00:00'::timestamp,'2020-06-30 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-06-30 00:00:00'::timestamp,stamp_out='2020-06-30 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-06-30') and id not in ('1970ad9b-72f3-e4f5-bb7e-fffaba38bd24');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERY: select * from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317';
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='2583c916-2d07-f42d-9c85-18ee42959317'; 
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06')
-                    ) 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('2020-06-29') then startdate else date('2020-06-29') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-06-29') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-07-01') and date('2020-08-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-07-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-07-01') and date('2020-08-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-07-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-07-01')  and date(date_trunc('week',date('2020-08-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-06-29') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-07-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-07-01') and date('2020-08-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=9,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=0,last44date=date('2020-08-31'),avgtotalweekhours='38:27:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-07-01') and date('2020-08-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and daydate between date('2020-12-28') and date('2021-02-28')
-                    ) 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('2020-12-28') then startdate else date('2020-12-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-02-28') then date('2021-02-28')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' 
-    and startdate < date('2021-02-28')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and lpd.daydate between date('2020-12-28') and date('2021-02-28')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2021-01-01') and date('2021-02-28') and id_staff ='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and daydate between date('2020-12-28') and date('2021-02-28') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-12-28') and date('2021-02-28')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03')
-                    ) 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('2020-10-26') then startdate else date('2020-10-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-01-03') then date('2021-01-03')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-01-03')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-10-26') and date('2021-01-03')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-11-01') and date('2020-12-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-10-26') and date('2021-01-03')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-11-09') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-11-09') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-11-09') between startdate and enddate) or (startdate <= date('2020-11-09') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-11-08' as datebefore,
-          '14:30' as timebefore,
-          '2020-11-10' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-11-09') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-11-09') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-11-09') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-11-09') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-11-09') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03')
-                    ) 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('2020-10-26') then startdate else date('2020-10-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-01-03') then date('2021-01-03')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-01-03')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-10-26') and date('2021-01-03')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-11-01') and date('2020-12-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-10-26') and date('2021-01-03')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-10-28') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-10-28') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-10-28') between startdate and enddate) or (startdate <= date('2020-10-28') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-10-27' as datebefore,
-          '22:00' as timebefore,
-          '2020-10-30' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-10-28') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-10-28') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-10-28') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-10-28') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-10-28') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause=null,timepause='01:00',daycomment='Test',vacancycomment='Test',vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='65459340-42c8-0197-d126-c53605906e10';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('cfed57ab-cc7b-7008-3804-33dd7421b3cd',date('2020-10-28'),'cc63023b-4892-c29c-787d-088392d58b88','2020-10-28 00:00:00'::timestamp,'2020-10-28 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-10-28 00:00:00'::timestamp,stamp_out='2020-10-28 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-10-28') and id not in ('cfed57ab-cc7b-7008-3804-33dd7421b3cd');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a';
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a'
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='e3e85c3e-1afa-768e-7938-f0c9996c618a'; 
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03')
-                    ) 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('2020-10-26') then startdate else date('2020-10-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-01-03') then date('2021-01-03')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-01-03')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-10-26') and date('2021-01-03')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-11-01') and date('2020-12-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-11-01'))) and date(date_trunc('week',date('2020-12-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='9b93bd90-2325-fe28-4bff-852203fc99ce' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,17+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-11-01') and date('2020-12-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-11-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,7+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-10-26')  and date(date_trunc('week',date('2020-12-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-10-26') and date('2021-01-03')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-11-01'))) and date(date_trunc('week',date('2020-12-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-11-01') and date('2020-12-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=26,suppvacancysunwork=2,suppvacancy44hours=2,status44hcount=0,last44date=date('2020-12-28'),avgtotalweekhours='36:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-11-01') and date('2020-12-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-11-02') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-11-02') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-11-02') between startdate and enddate) or (startdate <= date('2020-11-02') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-11-01' as datebefore,
-          '14:30' as timebefore,
-          '2020-11-03' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-11-02') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-11-02') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-11-02') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-11-02') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='18:30',timeend2='23:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:30',pauseend2='19:00',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='c646d640-c344-620d-60c6-330d887c3f3a';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('e1755bb2-10a3-611b-a841-500b9caa2a8c',date('2020-11-02'),'cc63023b-4892-c29c-787d-088392d58b88','2020-11-02 00:00:00'::timestamp,'2020-11-02 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-11-02 00:00:00'::timestamp,stamp_out='2020-11-02 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-11-02') and id not in ('e1755bb2-10a3-611b-a841-500b9caa2a8c');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a'
-QUERY: select * from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03')
-                    ) 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('2020-10-26') then startdate else date('2020-10-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-01-03') then date('2021-01-03')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-01-03')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-10-26') and date('2021-01-03')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-11-01') and date('2020-12-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-11-01'))) and date(date_trunc('week',date('2020-12-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='9b93bd90-2325-fe28-4bff-852203fc99ce' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,17+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-11-01') and date('2020-12-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-11-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,7+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-10-26')  and date(date_trunc('week',date('2020-12-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-10-26') and date('2021-01-03')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-11-01'))) and date(date_trunc('week',date('2020-12-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-11-01') and date('2020-12-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=26,suppvacancysunwork=2,suppvacancy44hours=2,status44hcount=0,last44date=date('2020-12-28'),avgtotalweekhours='36:00:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-11-01') and date('2020-12-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '4944e59f-fd58-87a1-e22f-84808be49767'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '5e7f6023-870d-990b-e2ac-9f12c1788d97'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '5e7f6023-870d-990b-e2ac-9f12c1788d97'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-ame,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06')
-                    ) 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('2020-06-29') then startdate else date('2020-06-29') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-06-29') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-07-01') and date('2020-08-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-06-29') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-06-29') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-06-29') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-06-29') between startdate and enddate) or (startdate <= date('2020-06-29') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '' as datebefore,
-          '' as timebefore,
-          '2020-06-30' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-06-29') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-06-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-06-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-06-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='18:30',timeend2='23:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:30',pauseend2='19:00',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours='01:00',vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='2c429e32-6367-d7e0-231b-1ab12a49ae8d';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('140ff778-d712-1c12-f48a-67fb6ed7deb3',date('2020-06-29'),'cc63023b-4892-c29c-787d-088392d58b88','2020-06-29 00:00:00'::timestamp,'2020-06-29 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-06-29 00:00:00'::timestamp,stamp_out='2020-06-29 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-06-29') and id not in ('140ff778-d712-1c12-f48a-67fb6ed7deb3');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERY: select * from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06')
-                    ) 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('2020-06-29') then startdate else date('2020-06-29') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-06-29') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-07-01') and date('2020-08-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='2583c916-2d07-f42d-9c85-18ee42959317'; 
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-07-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-07-01') and date('2020-08-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-07-01')));
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-07-01')  and date(date_trunc('week',date('2020-08-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-07-01'))) and date(date_trunc('week',date('2020-08-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-07-01') and date('2020-08-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-06-29') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=9,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=0,last44date=date('2020-08-31'),avgtotalweekhours='38:27:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-07-01') and date('2020-08-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-08-31') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-08-31') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-08-31') between startdate and enddate) or (startdate <= date('2020-08-31') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-30' as datebefore,
-          '14:30' as timebefore,
-          '2020-09-01' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-08-31') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-08-31') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-08-31') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-08-31') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-08-31') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='18:30',timeend2='23:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:30',pauseend2='19:00',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours='01:00',vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='8dde55e4-8f66-f561-24bb-06336598ea36';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('f7973b0b-6509-c6a0-8f2c-ee58e17afaef',date('2020-08-31'),'cc63023b-4892-c29c-787d-088392d58b88','2020-08-31 00:00:00'::timestamp,'2020-08-31 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-08-31 00:00:00'::timestamp,stamp_out='2020-08-31 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-08-31') and id not in ('f7973b0b-6509-c6a0-8f2c-ee58e17afaef');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='9b93bd90-2325-fe28-4bff-852203fc99ce'; 
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,9+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-10-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-10-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-09-01') and date('2020-10-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=17,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=7,last44date=date('2020-10-26'),avgtotalweekhours='36:10:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-09-01') and date('2020-10-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-09-01') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-09-01') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-09-01') between startdate and enddate) or (startdate <= date('2020-09-01') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-31' as datebefore,
-          '23:00' as timebefore,
-          '2020-09-02' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-09-01') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-09-01') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-09-01') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-09-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-09-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-09-01') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-09-01') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-09-01') between startdate and enddate) or (startdate <= date('2020-09-01') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-31' as datebefore,
-          '23:00' as timebefore,
-          '2020-09-02' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-09-01') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-09-01') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-09-01') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-09-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-09-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-09-04') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-09-04') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-09-04') between startdate and enddate) or (startdate <= date('2020-09-04') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-09-02' as datebefore,
-          '12:30' as timebefore,
-          '2020-09-05' as dateafter,
-          '17:30' as timeafter
- from demo.worktimes wk where (date('2020-09-04') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-09-04') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-09-04') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-09-04') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='53a8c688-a5af-4af5-4533-f229870c2705';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('3d2bd4d3-fe73-8706-b9bc-ca463288a5be',date('2020-09-04'),'cc63023b-4892-c29c-787d-088392d58b88','2020-09-04 00:00:00'::timestamp,'2020-09-04 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-09-04 00:00:00'::timestamp,stamp_out='2020-09-04 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-09-04') and id not in ('3d2bd4d3-fe73-8706-b9bc-ca463288a5be');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select * from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='9b93bd90-2325-fe28-4bff-852203fc99ce'; 
- as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,9+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-10-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-10-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-09-01') and date('2020-10-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=17,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=7,last44date=date('2020-10-26'),avgtotalweekhours='36:10:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-09-01') and date('2020-10-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-09-01') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-09-01') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-09-01') between startdate and enddate) or (startdate <= date('2020-09-01') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-31' as datebefore,
-          '23:00' as timebefore,
-          '2020-09-02' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-09-01') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-09-01') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-09-01') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-09-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-09-01') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='37066eac-4609-2105-ebea-2bfdcefae3c3';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('caadb366-4fde-eecb-b7a8-caf421ce8bf3',date('2020-09-01'),'cc63023b-4892-c29c-787d-088392d58b88','2020-09-01 00:00:00'::timestamp,'2020-09-01 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-09-01 00:00:00'::timestamp,stamp_out='2020-09-01 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-09-01') and id not in ('caadb366-4fde-eecb-b7a8-caf421ce8bf3');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select * from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='9b93bd90-2325-fe28-4bff-852203fc99ce'; 
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,9+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-10-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-10-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-09-01') and date('2020-10-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=17,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=7,last44date=date('2020-10-26'),avgtotalweekhours='36:10:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-09-01') and date('2020-10-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28')
-                    ) 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('2020-12-28') then startdate else date('2020-12-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-02-28') then date('2021-02-28')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-02-28')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-12-28') and date('2021-02-28')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2021-01-01') and date('2021-02-28') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-12-28') and date('2021-02-28')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-12-28') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-12-28') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-12-28') between startdate and enddate) or (startdate <= date('2020-12-28') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-12-27' as datebefore,
-          '14:30' as timebefore,
-          '2020-12-29' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-12-28') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-28') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-28') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='18:30',timeend2='23:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:30',pauseend2='19:00',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='15b19d2c-6c14-7948-72c3-f97f6bc29247';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('c1d5484a-15a4-4acd-0ffa-6807756915c0',date('2020-12-28'),'cc63023b-4892-c29c-787d-088392d58b88','2020-12-28 12:00:00'::timestamp,'2020-12-28 15:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-12-28 12:00:00'::timestamp,stamp_out='2020-12-28 15:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-12-28') and id not in ('c1d5484a-15a4-4acd-0ffa-6807756915c0');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'
-QUERY: select * from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28')
-                    ) 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('2020-12-28') then startdate else date('2020-12-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-02-28') then date('2021-02-28')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-02-28')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-12-28') and date('2021-02-28')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2021-01-01') and date('2021-02-28') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2021-01-01'))) and date(date_trunc('week',date('2021-02-28')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='e3e85c3e-1afa-768e-7938-f0c9996c618a' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,26+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2021-01-01') and date('2021-02-28') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-01-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-12-28')  and date(date_trunc('week',date('2021-02-28')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-12-28') and date('2021-02-28')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2021-01-01'))) and date(date_trunc('week',date('2021-02-28')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2021-01-01') and date('2021-02-28')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=35,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=0,last44date=date('2021-02-22'),avgtotalweekhours='39:33:20'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2021-01-01') and date('2021-02-28')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-urs::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-08-31') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-08-31') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-08-31') between startdate and enddate) or (startdate <= date('2020-08-31') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-30' as datebefore,
-          '14:30' as timebefore,
-          '2020-09-01' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-08-31') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-08-31') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-08-31') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='18:30',timeend2='23:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:30',pauseend2='19:00',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours='01:00',vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='8dde55e4-8f66-f561-24bb-06336598ea36';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('f7973b0b-6509-c6a0-8f2c-ee58e17afaef',date('2020-08-31'),'cc63023b-4892-c29c-787d-088392d58b88','2020-08-31 00:00:00'::timestamp,'2020-08-31 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-08-31 00:00:00'::timestamp,stamp_out='2020-08-31 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-08-31') and id not in ('f7973b0b-6509-c6a0-8f2c-ee58e17afaef');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select * from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='9b93bd90-2325-fe28-4bff-852203fc99ce'; 
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,9+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-10-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-10-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-09-01') and date('2020-10-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=17,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=7,last44date=date('2020-10-26'),avgtotalweekhours='36:10:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-09-01') and date('2020-10-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03')
-                    ) 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('2020-10-26') then startdate else date('2020-10-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-01-03') then date('2021-01-03')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-01-03')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-10-26') and date('2021-01-03')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-11-01') and date('2020-12-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-10-26') and date('2021-01-03')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-10-29') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-10-29') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-10-29') between startdate and enddate) or (startdate <= date('2020-10-29') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-10-28' as datebefore,
-          '22:00' as timebefore,
-          '2020-10-30' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-10-29') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-10-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-10-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-10-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-10-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03')
-                    ) 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('2020-10-26') then startdate else date('2020-10-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-01-03') then date('2021-01-03')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-01-03')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-10-26') and date('2021-01-03')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-11-01') and date('2020-12-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-10-26') and date('2021-01-03')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='e3e85c3e-1afa-768e-7938-f0c9996c618a'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-11-01') and date('2020-12-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03')
-                    ) 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('2020-10-26') then startdate else date('2020-10-26') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-01-03') then date('2021-01-03')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-01-03')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-10-26') and date('2021-01-03')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-11-01') and date('2020-12-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-10-26') and date('2021-01-03') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-10-26') and date('2021-01-03')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06')
-                    ) 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('2020-06-29') then startdate else date('2020-06-29') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-06-29') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-07-01') and date('2020-08-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-06-29') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-urs::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06')
-                    ) 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('2020-06-29') then startdate else date('2020-06-29') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-06-29') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-07-01') and date('2020-08-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-06-29') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= '28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='28527822-7e9e-baa4-e825-684d015eed40' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='28527822-7e9e-baa4-e825-684d015eed40') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='28527822-7e9e-baa4-e825-684d015eed40' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='28527822-7e9e-baa4-e825-684d015eed40' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='2583c916-2d07-f42d-9c85-18ee42959317'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-07-01') and date('2020-08-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06')
-                    ) 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('2020-06-29') then startdate else date('2020-06-29') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-09-06') then date('2020-09-06')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-09-06')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-06-29') and date('2020-09-06')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-07-01') and date('2020-08-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-06-29') and date('2020-09-06') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-06-29') and date('2020-09-06')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '2583c916-2d07-f42d-9c85-18ee42959317'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-urs::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-urs::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28')
-                    ) 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('2020-12-28') then startdate else date('2020-12-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-02-28') then date('2021-02-28')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-02-28')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-12-28') and date('2021-02-28')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2021-01-01') and date('2021-02-28') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-12-28') and date('2021-02-28')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-12-28') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-12-28') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-12-28') between startdate and enddate) or (startdate <= date('2020-12-28') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-12-27' as datebefore,
-          '14:30' as timebefore,
-          '2020-12-29' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-12-28') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-28') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-28') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='18:30',timeend2='23:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:30',pauseend2='19:00',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='15b19d2c-6c14-7948-72c3-f97f6bc29247';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('c1d5484a-15a4-4acd-0ffa-6807756915c0',date('2020-12-28'),'cc63023b-4892-c29c-787d-088392d58b88','2020-12-28 12:00:00'::timestamp,'2020-12-28 15:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-12-28 12:00:00'::timestamp,stamp_out='2020-12-28 15:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-12-28') and id not in ('c1d5484a-15a4-4acd-0ffa-6807756915c0');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'
-QUERY: select * from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3';
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'; 
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28')
-                    ) 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('2020-12-28') then startdate else date('2020-12-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-02-28') then date('2021-02-28')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-02-28')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-12-28') and date('2021-02-28')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2021-01-01') and date('2021-02-28') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2021-01-01'))) and date(date_trunc('week',date('2021-02-28')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='e3e85c3e-1afa-768e-7938-f0c9996c618a' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,26+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2021-01-01') and date('2021-02-28') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-01-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-12-28')  and date(date_trunc('week',date('2021-02-28')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-12-28') and date('2021-02-28')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2021-01-01'))) and date(date_trunc('week',date('2021-02-28')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2021-01-01') and date('2021-02-28')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=35,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=0,last44date=date('2021-02-22'),avgtotalweekhours='39:33:20'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2021-01-01') and date('2021-02-28')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-12-29') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-12-29') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-12-29') between startdate and enddate) or (startdate <= date('2020-12-29') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-12-28' as datebefore,
-          '23:00' as timebefore,
-          '2020-12-30' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-12-29') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-12-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-12-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'cc63023b-4892-c29c-787d-088392d58b88' as id_staff,date('2020-12-29') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:30',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='aff58dc3-c594-3f62-a870-8eaf41afb464';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('14ce4790-dfe5-45c9-4894-a6e2bee135e4',date('2020-12-29'),'cc63023b-4892-c29c-787d-088392d58b88','2020-12-29 00:00:00'::timestamp,'2020-12-29 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-12-29 00:00:00'::timestamp,stamp_out='2020-12-29 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-12-29') and id not in ('14ce4790-dfe5-45c9-4894-a6e2bee135e4');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'
-QUERY: select * from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28')
-                    ) 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('2020-12-28') then startdate else date('2020-12-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-02-28') then date('2021-02-28')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-02-28')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-12-28') and date('2021-02-28')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2021-01-01') and date('2021-02-28') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'; 
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2021-01-01'))) and date(date_trunc('week',date('2021-02-28')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='e3e85c3e-1afa-768e-7938-f0c9996c618a' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,26+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2021-01-01') and date('2021-02-28') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-01-01')));
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-12-28') and date('2021-02-28')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-12-28')  and date(date_trunc('week',date('2021-02-28')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2021-01-01'))) and date(date_trunc('week',date('2021-02-28')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2021-01-01') and date('2021-02-28')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=35,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=0,last44date=date('2021-02-22'),avgtotalweekhours='39:30:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2021-01-01') and date('2021-02-28')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-12-29') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-12-29') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-12-29') between startdate and enddate) or (startdate <= date('2020-12-29') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-12-28' as datebefore,
-          '23:00' as timebefore,
-          '2020-12-30' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-12-29') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-12-29') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='17:30',timeend2='22:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:00',pauseend2='18:30',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours=null,vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='aff58dc3-c594-3f62-a870-8eaf41afb464';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('14ce4790-dfe5-45c9-4894-a6e2bee135e4',date('2020-12-29'),'cc63023b-4892-c29c-787d-088392d58b88','2020-12-29 00:00:00'::timestamp,'2020-12-29 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-12-29 00:00:00'::timestamp,stamp_out='2020-12-29 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-12-29') and id not in ('14ce4790-dfe5-45c9-4894-a6e2bee135e4');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3';
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'; 
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2021-01-01') and date('2021-02-28') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28')
-                    ) 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('2020-12-28') then startdate else date('2020-12-28') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2021-02-28') then date('2021-02-28')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2021-02-28')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-12-28') and date('2021-02-28')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2021-01-01') and date('2021-02-28') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2021-01-01'))) and date(date_trunc('week',date('2021-02-28')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='e3e85c3e-1afa-768e-7938-f0c9996c618a' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,26+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2021-01-01') and date('2021-02-28') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-01-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-12-28')  and date(date_trunc('week',date('2021-02-28')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-12-28') and date('2021-02-28') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-12-28') and date('2021-02-28')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2021-01-01'))) and date(date_trunc('week',date('2021-02-28')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2021-01-01') and date('2021-02-28')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=35,suppvacancysunwork=null,suppvacancy44hours=1,status44hcount=0,last44date=date('2021-02-22'),avgtotalweekhours='39:33:20'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2021-01-01') and date('2021-02-28')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-06-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-04-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '688a7626-ff3b-b085-a6e3-7735aab4595c' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select us.id,cp.schemata from public.users us left join public.companies cp on (us.id_company=cp.id) where lower(us.username)=lower('ksaffran@dks.lu') and us.userpassword = 'a1b496fa520a1c52edd076ca7a59e56667e7ebeb5ba5ba966d2d01628e165359' and us.isblocked is null;
-EXEC: delete from public.sessions where id_user='e9e6880b-75c7-70b5-ce61-49cf6d62630f' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36';
-QUERY: insert into public.sessions (id_user,id,remote_addr,user_agent,sessiondata) VALUES( 'e9e6880b-75c7-70b5-ce61-49cf6d62630f',public.getuuid(), '::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',('{"schemata":"demo"}'::text)::json) returning id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '127.0.0.1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '127.0.0.1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '127.0.0.1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '127.0.0.1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '127.0.0.1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = 'e3e85c3e-1afa-768e-7938-f0c9996c618a'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '127.0.0.1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '127.0.0.1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '8ee10dbb-d61a-a22a-dcfd-70d20d3324b3'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM demo.reportperiod rp ORDER BY startdate, enddate;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM demo.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
-   coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM demo.workplans wp
-  ORDER BY wp.isdefault, wp.workplan;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate < date('2020-08-31') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate > date('2020-08-31') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and ((date('2020-08-31') between startdate and enddate) or (startdate <= date('2020-08-31') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-30' as datebefore,
-          '14:30' as timebefore,
-          '2020-09-01' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-08-31') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-08-31') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-08-31') and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by stamp_in,stamp_out;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-EXEC: UPDATE demo.staffreportperioddays SET timestart1='11:00',timeend1='14:30',timestart2='18:30',timeend2='23:00',pausestart1='11:30',pauseend1='12:00',pausestart2='18:30',pauseend2='19:00',payedpause=null,timepause='01:00',daycomment=null,vacancycomment=null,vacancyhours='01:00',vacillcomment=null,vacillhours=null,vacextracomment=null,vacextrahours=null,recupcomment=null,recuperationhours=null,partunempcomment=null,partunemplhours=null,otherpaidhourscomment=null,otherpaidhours=null WHERE id='8dde55e4-8f66-f561-24bb-06336598ea36';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: INSERT INTO demo.timetracker (id,daydate,id_staff,stamp_in,stamp_out) 
-     VALUES ('f7973b0b-6509-c6a0-8f2c-ee58e17afaef',date('2020-08-31'),'cc63023b-4892-c29c-787d-088392d58b88','2020-08-31 00:00:00'::timestamp,'2020-08-31 00:00:00'::timestamp) on conflict on constraint timetracker_pkey do update set stamp_in='2020-08-31 00:00:00'::timestamp,stamp_out='2020-08-31 00:00:00'::timestamp returning id;
-EXEC: DELETE FROM demo.timetracker WHERE id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate=date('2020-08-31') and id not in ('f7973b0b-6509-c6a0-8f2c-ee58e17afaef');
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERY: select * from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce';
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='cc63023b-4892-c29c-787d-088392d58b88' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='cc63023b-4892-c29c-787d-088392d58b88') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
-    select srp.id_reportperiod ,startdate,enddate,rp.id from demo.staffreportperiod srp
-    join demo.reportperiod rp on (rp.id=srp.id_reportperiod)
-    where srp.id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by rp.startdate,rp.enddate)
-    sper ) prp where id='9b93bd90-2325-fe28-4bff-852203fc99ce'; 
-EXEC: update demo.staffreportperioddays spds set
-  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
-  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
-  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
-  from (
-    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
-    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
-    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
-    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
-    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
-    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
-    preds.interruption,
-    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
-  (preds.pdt1+preds.pdt2) as timepause,
-  wdcontracthours
-       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
-               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
-               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
-               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
-               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
-    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
-    wdcontracthours
-               from demo.staffreportperioddays where id in (select id from demo.staffreportperioddays where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days'))
-  ) preds) ds where spds.id=ds.id;
-QUERY: select * from demo.staffreportperiod where id_reportperiod='2583c916-2d07-f42d-9c85-18ee42959317' and id_staff='cc63023b-4892-c29c-787d-088392d58b88';
-QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
-select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
-select daydate,9+row_number() over (order by daydate) as rowx  from demo.staffreportperioddays 
-where daydate between date('2020-09-01') and date('2020-10-31') 
-and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
-and id_staff='cc63023b-4892-c29c-787d-088392d58b88' order by daydate
-) xsunday) sunresult;
-QUERY: select sum(suppvacancy44hours) as curvac44h from demo.staffreportperiod where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and id_reportperiod in (select id from demo.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2020-09-01')));
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
-select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
-select weekstart,0+sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
-  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
-                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and sr.daydate between  date('2020-08-31')  and date(date_trunc('week',date('2020-10-31')) - interval '1 day')
-                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
-                                 ) aa group by aa.weekstart order by weekstart
-                                 ) bb)cc;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='cc63023b-4892-c29c-787d-088392d58b88' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select weekstart,id_staff,avgtotalhours from (  
-     select ws.weekstart, ws.id_staff,
-  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
-  from (
-  SELECT weekstart, id_staff,
-sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
-                   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 demo.staffreportperioddays
-                    where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date(date_trunc('week',date('2020-09-01'))) and date(date_trunc('week',date('2020-10-31')) + interval '6 days')
-                    --where id_staff= 'cc63023b-4892-c29c-787d-088392d58b88' and daydate between date('2020-09-01') and date('2020-10-31')
-                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
-                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
-EXEC: update demo.staffreportperiod rpd set
-  --contracthours=csp.contracthours,
-  workhours=csp.workhours,
-  vacancyill=csp.vacillhours,
-  vacancynormal=csp.vacancynormal,
-  vacancyextra=csp.vacextrahours,
-  otherpaidhours=csp.otherpaidhours,
-  partunemplhours=csp.partunemplhours,
-  totalhours=csp.totalhours,
-  recuperationhours=csp.recuperationhours,statussuncount=17,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=7,last44date=date('2020-10-26'),avgtotalweekhours='36:10:00'::interval,hoursdiff=csp.diffhours
-  FROM (
-  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
-  select dp.id,
-  sum(pd.workhours) as workhours,
-  sum(pd.dayhours) as totalhours,
-  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
-  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
-  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
-  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
-  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
-  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
-  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
-  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
-  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
-  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
-  from demo.staffreportperioddays pd 
-  join demo.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce')
-  where pd.id_staff='cc63023b-4892-c29c-787d-088392d58b88' and  pd.daydate between date('2020-09-01') and date('2020-10-31')
-  group by dp.id,dp.payedhours,dp.transferedhourscalc
-  ) rp) csp where csp.id=rpd.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'cc63023b-4892-c29c-787d-088392d58b88'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select date(date_trunc('week',startdate)) as startdate,startdate as periodstart, enddate as periodend,date(date_trunc('week',enddate) + interval '6 days') as enddate from demo.reportperiod where id='9b93bd90-2325-fe28-4bff-852203fc99ce'
-QUERYBYKEY: select ws.weekstart,ws.weekend,ws.calweek,ws.calyear, ws.id_staff
-  ,to_char(ws.workhours::interval,'HH24:MI') as workhours
-  ,to_char(ws.vacancyhours,'HH24:MI') as vacancynormal
-  ,to_char(ws.vacillhours,'HH24:MI') as vacancyill
-  ,to_char(ws.vacextrahours,'HH24:MI') as vacancyextra
-  ,to_char(ws.otherpaidhours,'HH24:MI') as otherpaidhours
-  ,to_char(ws.partunemplhours,'HH24:MI') as partunemplhours
-  ,to_char(ws.recuperationhours,'HH24:MI') as recuperationhours
-  ,to_char(ws.totalhours,'HH24:MI') as totalhours
-  ,cd.contractworkdays
-  ,cd.cmpcontractdays
-  ,cd.cmpweekhours
-  ,to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval),'HH24:MI') as weektrackedhours
-  ,ws.periodworkhours
-       ,interval_to_char(sum(coalesce(ttr.weektrackedhours,'00:00:00'::interval)) over (order by ws.weekstart) - sum(ws.periodworkhours::interval) over (order by ws.weekstart)) as periodtrackdiff
-       ,sum(ws.workhours::interval) over (order by ws.weekstart) as runningworkhours
-       ,interval_to_char(coalesce(ttr.weektrackedhours,'00:00:00'::interval) - ws.periodworkhours::interval) as trackeddiff
-  ,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 interval_to_char(ws.totalhours-cd.contracthours) end as diffhours
-  ,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.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval)  else '00:00:00'::interval end) as periodworkhours,
-                    --sum(case when srpd.daydate between date('2020-09-01') and date('2020-10-31') then coalesce(srpd.workhours::interval, '00:00:00'::interval) else '00:00:00'::interval end) as periodworkhoursnopause,
-                    sum(CASE WHEN srpd.vacancyhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacancyhours::interval END) AS vacancyhours,
-                    sum(CASE WHEN srpd.vacillhours IS NULL THEN '00:00:00'::interval ELSE srpd.vacillhours::interval END) AS vacillhours,
-                    sum(CASE WHEN srpd.vacextrahours IS NULL THEN '00:00:00'::interval ELSE srpd.vacextrahours::interval END) AS vacextrahours,
-                    sum(CASE WHEN srpd.recuperationhours IS NULL THEN '00:00:00'::interval ELSE srpd.recuperationhours::interval END) AS recuperationhours,
-                    sum(CASE WHEN srpd.otherpaidhours IS NULL THEN '00:00:00'::interval ELSE srpd.otherpaidhours::interval END) AS otherpaidhours,
-                    sum(CASE WHEN srpd.partunemplhours IS NULL THEN '00:00:00'::interval ELSE srpd.partunemplhours::interval END) AS partunemplhours,
-                    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 OR srpd.vacillhours > '00:00:00'::time without time zone OR srpd.vacextrahours > '00:00:00'::time without time zone OR srpd.otherpaidhours > '00:00:00'::time without time zone or srpd.partunemplhours > '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 demo.staffreportperioddays
-                    where id_staff= 'e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and daydate between date('2020-08-31') and date('2020-11-01')
-                    ) 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('2020-08-31') then startdate else date('2020-08-31') end  as staffperiodstart, 
-    case when enddate is null or enddate > date('2020-11-01') then date('2020-11-01')
-    else enddate end as staffperiodend from demo.staffcontract where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' 
-    and startdate < date('2020-11-01')
-  ) sc 
-  join demo.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,avg(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 demo.staffreportperioddays lpd
-  left join demo.worktimes wk on (lpd.daydate between wk.startdate and wk.enddate)
-  cross join (select * from demo.worktimes where isdefault=true) wkdef
-  where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and lpd.daydate between date('2020-08-31') and date('2020-11-01')
-  order by lpd.daydate ) mh group by id_staff,weekstart
-  ) maxdata on ws.id_staff = maxdata.id_staff and ws.weekstart=maxdata.weekstart
-  left join (
-  select weekstart,id_staff,coalesce(sum(daytracked),'00:00:00'::interval) as weektrackedhours from (
-    select daydate,id_staff,weekstart,case when sum(trackedhours) > '06:00:00'::interval then sum(trackedhours)- '00:30:00'::interval else coalesce(sum(trackedhours),'00:00:00'::interval) end as daytracked from (
-select daydate,date(date_trunc('week',daydate)) as weekstart,id_staff,(stamp_out-stamp_in)::interval as trackedhours from demo.timetracker 
-where daydate between date('2020-09-01') and date('2020-10-31') and id_staff ='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507') tto group by daydate,id_staff,weekstart,trackedhours) ttx group by weekstart,id_staff
-    ) ttr on ws.weekstart=ttr.weekstart and ws.id_staff=ttr.id_staff;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype,pd.daycomment,
-            vacancycomment,vacillcomment,vacextracomment,recupcomment,otherpaidhourscomment,partunempcomment,
-            date(date_trunc('week',pd.daydate)) as weekstart,
-            to_char(pd.timestart1::interval, 'HH24:MI') AS timestart1,
-            to_char(pd.timeend1::interval, 'HH24:MI') AS timeend1,
-            to_char(pd.timestart2::interval, 'HH24:MI') AS timestart2,
-            to_char(pd.timeend2::interval, 'HH24:MI') AS timeend2,
-            to_char(pd.timepause::interval, 'HH24:MI') AS timepause,
-            --  coalesce('<div class="dspvacancynormal">' || to_char(CASE WHEN pd.vacancyhours::interval = '00:00:00'::interval THEN null ELSE pd.vacancyhours END::interval, 'HH24:MI') || '</div>','')  ||
-            -- coalesce('<div class="dspvacancyill">' || to_char(CASE WHEN pd.vacillhours::interval = '00:00:00'::interval THEN null else pd.vacillhours END::interval, 'HH24:MI') || '</div>','') || 
-            -- coalesce('<div class="dspvacancyextra">' || to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN null ELSE pd.vacextrahours END::interval, 'HH24:MI') || '</div>','') AS dspvacancyhours,
-            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.vacillhours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacillhours END::interval, 'HH24:MI') AS vacillhours,
-            to_char(CASE WHEN pd.vacextrahours::interval = '00:00:00'::interval THEN NULL ELSE pd.vacextrahours END::interval, 'HH24:MI') AS vacextrahours,
-            to_char(CASE WHEN pd.otherpaidhours::interval = '00:00:00'::interval THEN NULL ELSE pd.otherpaidhours END::interval, 'HH24:MI') AS otherpaidhours,
-            to_char(CASE WHEN pd.partunemplhours::interval = '00:00:00'::interval THEN NULL ELSE pd.partunemplhours END::interval, 'HH24:MI') AS partunemplhours,
-            to_char(pd.contracthours::interval, 'HH24:MI') AS contracthours,
-            to_char(CASE WHEN pd.workhours::interval = '00:00:00'::interval THEN NULL ELSE pd.workhours END::interval, 'HH24:MI') AS workhours,
-            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,
-            to_char(CASE WHEN pd.interruptionhours::interval = '00:00:00'::interval THEN NULL ELSE pd.interruptionhours END::interval, 'HH24:MI') AS interruptionhours,
-            to_char(pd.pausestart1::interval, 'HH24:MI') AS pausestart1,
-            to_char(pd.pauseend1::interval, 'HH24:MI') AS pauseend1,
-            to_char(pd.pausestart2::interval, 'HH24:MI') AS pausestart2,
-            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 max(freehours.freehours) < '00:00:00'::interval THEN NULL ELSE to_char(max(freehours.freehours), 'HH24:MI') END AS freehoursafter,
-            to_char(coalesce(max(wk.defaultdayhours),max(wkstd.defaultdayhours)),'HH24:MI') as defaultdayhours, 
-            to_char(coalesce(max(wk.maxdayhours),max(wkstd.maxdayhours)),'HH24:MI') as maxdayhours, 
-            to_char(coalesce(max(wk.mindailyrecuperation),max(wkstd.mindailyrecuperation)),'HH24:MI') as mindailyrecuperation,
-            to_char(coalesce(max(wk.maxinterruptionhours),max(wkstd.maxinterruptionhours)),'HH24:MI') as maxinterruptionhours,
-            max(vd.vacancyname) as vacancyname,
-            to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end,'HH24:MI') as trackedtime,
-            interval_to_char(case when (max(tt.trackedtime) >= '06:00:00'::interval) then max(tt.trackedtime) - case when pd.timepause::interval > '00:30:00'::interval then pd.timepause::interval else '00:30:00'::interval end else max(tt.trackedtime) end - coalesce(pd.workhours::interval,'00:00:00'::interval))  as trackeddiff,
-            max(tt.incompletetrack) as incompletetrack
-            FROM demo.staffreportperioddays pd
-             JOIN demo.staff st ON pd.id_staff = st.id and st.id='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' 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,
-                    yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend) AS realinterval,
-                    date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval AS freehours
-                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
-                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
-                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
-                           FROM ( SELECT sr.id_staff, sr.daydate,
-            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
-            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
-                                   FROM demo.staffreportperioddays sr
-                                  WHERE sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
-                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy) freehours ON pd.id_staff = freehours.id_staff AND freehours.daydate = pd.daydate
-          left join demo.worktimes wk on pd.daydate between wk.startdate and wk.enddate
-          cross join (select defaultdayhours,maxdayhours,mindailyrecuperation,maxinterruptionhours from demo.worktimes where isdefault =true) wkstd
-          left join demo.vacancydays vd on pd.daydate=vd.daydate 
-          left join (
-               select daydate,sum(case when stamp_out is not null then cast(stamp_out-stamp_in as interval)::interval else '00:00:00'::interval end) as trackedtime, 
-               sum(case when stamp_out is null and daydate < current_date then 1 else 0 end) as incompletetrack
-from demo.timetracker where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and daydate between date('2020-08-31') and date('2020-11-01') group by daydate
-             ) tt on pd.daydate=tt.daydate
-          WHERE pd.daydate between date('2020-08-31') and date('2020-11-01')
-          group by pd.id
-          ORDER BY pd.id_staff, pd.daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select daydate as datebefore,to_char(case when timestart2 is null then timeend1 else timeend2 end,'HH24:MI') as timeendbefore from demo.staffreportperioddays where id_staff= 'e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and daydate < date('2020-08-31') and (timestart1 is not null or timestart2 is not null) order by daydate desc limit 1;
-QUERY: select daydate as dateafter ,to_char(case when timestart1 is null then timestart2 else timestart1 end,'HH24:MI') as timestartafter from demo.staffreportperioddays where id_staff= 'e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and daydate > date('2020-08-31') and (timestart1 is not null or timestart2 is not null) order by daydate asc limit 1;
-QUERY: select weekhours from demo.staffcontract where id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' and ((date('2020-08-31') between startdate and enddate) or (startdate <= date('2020-08-31') and enddate is null)) order by startdate,enddate nulls first limit 1;
-QUERY: select to_char(wk.maxdayhours,'HH24:MI') as maxdayhours,
-          to_char(wk.maxweekhours,'HH24:MI') as maxweekhours,
-          to_char(wk.maxinterruptionhours,'HH24:MI') as maxinterruptionhours,
-          to_char(wk.mindailyrecuperation,'HH24:MI') as mindailyrecuperation,
-     to_char(wk.defaultweekhours,'HH24:MI') as defaultweekhours,
-          '2020-08-30' as datebefore,
-          '14:30' as timebefore,
-          '2020-09-01' as dateafter,
-          '11:00' as timeafter
- from demo.worktimes wk where (date('2020-08-31') between wk.startdate and wk.enddate) or (wk.startdate is null and wk.enddate is null)  and maxhourspercents is null
- order by wk.startdate,wk.enddate nulls last limit 1;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-08-31') and id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' order by stamp_in,stamp_out;
-QUERYARRAY: select id,id_staff,daydate,to_char(stamp_in,'HH24:MI') as stamp_in,to_char(stamp_out,'HH24:MI') as stamp_out,
-case when stamp_in is null or stamp_out is null then '00:00' else to_char(stamp_out-stamp_in,'HH24:MI') end as total  
-from demo.timetracker where daydate=date('2020-08-31') and id_staff='e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' order by stamp_in,stamp_out;
-QUERYARRAY: select public.getuuid() as id, 'e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' as id_staff,date('2020-08-31') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERYARRAY: select public.getuuid() as id, 'e4cc11c3-dc5c-fb32-9de0-3ce9ac721507' as id_staff,date('2020-08-31') as daydate,'00:00' as stamp_in,'00:00' as stamp_out, '00:00' as total
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
-    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
-    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
-    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
-    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
-    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
-    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
-    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
-    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
-    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
-    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
-    st.id_staffgroup, sgr.groupname,
-    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
-    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
-    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
-    ,itmcontracthours,maxdays,srp.isvalidated,
-    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
-    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
-    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
-    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
-    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
-    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
-    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM demo.staffreportperiod srp
-     LEFT JOIN demo.staff st ON srp.id_staff = st.id
-     LEFT JOIN demo.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN demo.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '9b93bd90-2325-fe28-4bff-852203fc99ce'  
-  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sessiondata from public.sessions where id='637870f8-5eb6-b156-54dc-f50aa089da15'
-EXEC: update public.sessions set sessiondata='{"schemata":"alicehartmann"}' where id='637870f8-5eb6-b156-54dc-f50aa089da15'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2018-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-groups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '637870f8-5eb6-b156-54dc-f50aa089da15' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select us.id,cp.schemata from public.users us left join public.companies cp on (us.id_company=cp.id) where lower(us.username)=lower('ksaffran@dks.lu') and us.userpassword = 'a1b496fa520a1c52edd076ca7a59e56667e7ebeb5ba5ba966d2d01628e165359' and us.isblocked is null;
-EXEC: delete from public.sessions where id_user='e9e6880b-75c7-70b5-ce61-49cf6d62630f' and remote_addr='::1' and user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36';
-QUERY: insert into public.sessions (id_user,id,remote_addr,user_agent,sessiondata) VALUES( 'e9e6880b-75c7-70b5-ce61-49cf6d62630f',public.getuuid(), '::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',('{"schemata":"demo"}'::text)::json) returning id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-05-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-11-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-12-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2022-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2022-02-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2022-03-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2022-02-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from demo.staffreportperioddays spd 
-    join demo.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2022-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='demo';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select sessiondata from public.sessions where id='052d31c8-8273-3dda-cc0c-2edb6ea4a78a'
-EXEC: update public.sessions set sessiondata='{"schemata":"alicehartmann"}' where id='052d31c8-8273-3dda-cc0c-2edb6ea4a78a'
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-groups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-05-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-11-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-05-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-09-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-02-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-03-01')) order by st.surname,st.prename,spd.daydate 
+QUERYARRAY: select id from kajiwara.staff where isdeleted is null;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','11796d0b-6de0-c137-4a20-4ef48c92e6e5') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '11796d0b-6de0-c137-4a20-4ef48c92e6e5'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '11796d0b-6de0-c137-4a20-4ef48c92e6e5'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','a21bf35f-797d-f9f1-1796-34e3591934bc') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a21bf35f-797d-f9f1-1796-34e3591934bc'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a21bf35f-797d-f9f1-1796-34e3591934bc'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='34f850b6-7a29-6900-637e-8c145886000c'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='34f850b6-7a29-6900-637e-8c145886000c')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='34f850b6-7a29-6900-637e-8c145886000c' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','34f850b6-7a29-6900-637e-8c145886000c') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='34f850b6-7a29-6900-637e-8c145886000c'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '34f850b6-7a29-6900-637e-8c145886000c'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='34f850b6-7a29-6900-637e-8c145886000c' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '34f850b6-7a29-6900-637e-8c145886000c'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','0be74e54-4c4e-3801-caa8-0031df35742a') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0be74e54-4c4e-3801-caa8-0031df35742a'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0be74e54-4c4e-3801-caa8-0031df35742a'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','4971b1a7-555b-8552-92a2-e8fc85fa6861') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4971b1a7-555b-8552-92a2-e8fc85fa6861'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4971b1a7-555b-8552-92a2-e8fc85fa6861'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='520:00:00' where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','96623b4b-5bb4-0822-ce31-1e2a0ac19e9d') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '30:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff, null as payedpause, 
+ '06:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '06:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','4dbf2328-c00b-0174-5604-67088bf87e6e') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='780:00:00' where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4dbf2328-c00b-0174-5604-67088bf87e6e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '30:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff, null as payedpause, 
+ '06:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '06:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4dbf2328-c00b-0174-5604-67088bf87e6e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='520:00:00' where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','0920d9fa-f53c-6244-1859-43c37159cca3') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='520:00:00' where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0920d9fa-f53c-6244-1859-43c37159cca3'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0920d9fa-f53c-6244-1859-43c37159cca3'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','97ac0b46-1e0a-8389-22cb-39c1dfd89596') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '97ac0b46-1e0a-8389-22cb-39c1dfd89596'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-04-30')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-05-01'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and (daydate > date('2022-05-01') or daydate < date('2021-11-01')) 
+     OR (id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' AND  daydate not between date('2021-11-01') and date('2022-05-01'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '97ac0b46-1e0a-8389-22cb-39c1dfd89596'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-04-01')) order by st.surname,st.prename,spd.daydate 
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-05-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select max(startdate) as startdate,max(enddate) as enddate,case when date(max(startdate) - interval '1 year') < current_date then null else date(max(startdate) - interval '1 year') end as alloweddate from kajiwara.reportperiod;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-04-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select reportperiodunit,reportperiodlength,reportperiodstart,periodtypes,subinterval from public.companies where schemata='kajiwara';
+QUERY: select case when max(enddate) is null then date('2021-11-01') else date(max(enddate) + interval '1 day') end as rpstart from kajiwara.reportperiod;
+QUERY: select date(date('2022-05-01') + interval  '6 months' -  interval '1 day' ) as rpend;
+QUERY: select id from kajiwara.reportperiod order by startdate DESC,enddate LIMIT 1;
+QUERY: INSERT INTO kajiwara.reportperiod (startdate, enddate, id_parentreportperiod,periodtype,subinterval) VALUES('2022-05-01','2022-10-31','3295dc17-be6c-3f8a-d5e0-b44a5de1277e','<15','1 month') returning id;
+QUERYARRAY: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+  select '883c34d8-cfea-aa41-57c0-85fa8ca0b222' as id_reportperiod,id_staff from kajiwara.staffcontract sc 
+left join kajiwara.staff st on (st.id=sc.id_staff)
+where st.isdeleted is null and sc.enddate is null or ( sc.startdate between date('2022-05-01') and date('2022-10-31')) or (sc.enddate between date('2022-05-01') and date('2022-10-31')) on conflict on constraint uniq_staffreportperiod_cal do nothing returning id_staff;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
+      join users us on (us.id=se.id_user)
+      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
+      us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-03-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
-    us.schemaaccess AS schemaname,
-    cp.datasetname
-   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
-     FROM users WHERE users.isdeleted IS null) us
-     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
 QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select yy.id_staff,yy.staffnumber,yy.staffname,yy.groupname,xx.cw,
-   xx.montime,xx.monentry,xx.monexit,
-   xx.tuetime,xx.tueentry,xx.tueexit,
-   xx.wedtime,xx.wedentry,xx.wedexit,
-   xx.thutime,xx.thuentry,xx.thuexit,
-   xx.fritime,xx.frientry,xx.friexit,
-   xx.sattime,xx.satentry,xx.satexit,
-   xx.suntime,xx.sunentry,xx.sunexit,
-    xx.weeksum from (
-    select st.id as id_staff,st.staffnumber,st.surname || ' ' || st.prename as staffname,gg.groupname  from alicehartmann.staffcontract sc  join alicehartmann.staff st on (st.id=sc.id_staff) left join alicehartmann.staffgroups gg on (gg.id=st.id_staffgroup)
-    where (sc.enddate >= date_trunc('week',date('2021-11-08') + interval '6 days') or enddate is null) and sc.startdate <= date_trunc('week',date('2021-11-08') + interval '6 days')
-    and st.isdeleted is null
-    group by st.id,st.surname,st.prename,gg.groupname) yy left join (
-    select id_staff,cw,
-    to_char(sum(case when dow = 1 then daystamptime else null end),'HH24:MI') as montime,
-    min(case when dow = 1 then timeentry else null end) as monentry,
-    max(case when dow = 1 then timeexit else null end) as monexit,
-    to_char(sum(case when dow = 2 then daystamptime else null end),'HH24:MI') as tuetime,
-    min(case when dow = 2 then timeentry else null end) as tueentry,
-    max(case when dow = 2 then timeexit else null end) as tueexit,
-    to_char(sum(case when dow = 3 then daystamptime else null end),'HH24:MI') as wedtime,
-    min(case when dow = 3 then timeentry else null end) as wedentry,
-    max(case when dow = 3 then timeexit else null end) as wedexit,
-    to_char(sum(case when dow = 4 then daystamptime else null end),'HH24:MI') as thutime,
-    min(case when dow = 4 then timeentry else null end) as thuentry,
-    max(case when dow = 4 then timeexit else null end) as thuexit,
-    to_char(sum(case when dow = 5 then daystamptime else null end),'HH24:MI') as fritime,
-    min(case when dow = 5 then timeentry else null end) as frientry,
-    max(case when dow = 5 then timeexit else null end) as friexit,
-    to_char(sum(case when dow = 6 then daystamptime else null end),'HH24:MI') as sattime,
-    min(case when dow = 6 then timeentry else null end) as satentry,
-    max(case when dow = 6 then timeexit else null end) as satexit,
-    to_char(sum(case when dow = 7 then daystamptime else null end),'HH24:MI') as suntime,
-    min(case when dow = 7 then timeentry else null end) as sunentry,
-    max(case when dow = 7 then timeexit else null end) as sunexit,
-       to_char(sum(daystamptime),'HH24:MI') as weeksum
-        from (
-       select id_staff, 
-       date_part('week',daydate) as cw,
-       to_char(min(stamp_in),'HH24:MI') as timeentry,
-       to_char(max(stamp_out),'HH24:MI') as timeexit,
-       case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
-       date_part('isodow',daydate) as dow,daydate
-       from alicehartmann.timetracker tt where tt.daydate between date_trunc('week',date('2021-11-08')) and date(date_trunc('week',date('2021-11-08')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
     us.schemaaccess AS schemaname,
     cp.datasetname
    FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
      FROM users WHERE users.isdeleted IS null) us
      LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select id,trackername from alicehartmann.timetrackerconfig order by trackername
-QUERYARRAY: select ttr.*, st.* ,stg.groupname,COALESCE(st.surname || ' ', '') || COALESCE(st.prename, '') AS staffname from alicehartmann.staff st 
-LEFT JOIN alicehartmann.staffgroups stg ON st.id_staffgroup = stg.id 
-cross join (select timetrackertype,case when timetrackertype is not null then true else null end as istimetrackerenabled,periodtypes from  public.companies where schemata='alicehartmann') ttr
-where st.isdeleted is null  order by groupname,surname,prename;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERYARRAY: SELECT id,startdate,enddate,id_parentreportperiod,periodtype,subinterval,viewpartunempl,to_char(startdate,'MM/YY') || ' - ' || to_char(enddate,'MM/YY') as dspperiod FROM kajiwara.reportperiod rp ORDER BY startdate, enddate;
 QUERYARRAY: SELECT wp.id,wp.workplan,wp.isdefault,wp.weekhours,wp.weekdays,
    coalesce((((((wp.workplan || ' / ') ||substr(wp.weekhours::text, 1, 5)) || 'h / ') || wp.weekdays) || 'j / libre: ') || (( SELECT string_agg(ww.wday, ',') AS string_agg FROM ( SELECT public.day_name(json_array_elements_text(wp.freeweekdayslist)) AS wday) ww)),wp.workplan ) AS dspworkplandetail
-   FROM alicehartmann.workplans wp
+   FROM kajiwara.workplans wp
   ORDER BY wp.isdefault, wp.workplan;
-QUERYARRAY: SELECT id,vacancyname,color
-   FROM alicehartmann.vacancytypes where isworktime is null or isworktime=false order by vacancyname;
-QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM alicehartmann.staffgroups sg LEFT JOIN alicehartmann.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
-    GROUP BY sg.id ORDER BY sg.groupname;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from alicehartmann.staff where id='e697a201-a3f0-9c0a-fa90-72aceebfdb36' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
     to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours,
@@ -41084,47 +5302,7749 @@ QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coa
     to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
     to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
     to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM alicehartmann.staffreportperiod srp
-     LEFT JOIN alicehartmann.staff st ON srp.id_staff = st.id
-     LEFT JOIN alicehartmann.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN alicehartmann.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'e697a201-a3f0-9c0a-fa90-72aceebfdb36'  
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.staff where isdeleted is null;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5')) between startdate and enddate order by startdate,enddate;
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by startdate,enddate;
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','11796d0b-6de0-c137-4a20-4ef48c92e6e5') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by startdate,enddate;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','11796d0b-6de0-c137-4a20-4ef48c92e6e5') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by daydate
+) xsunday) sunresult;
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '11796d0b-6de0-c137-4a20-4ef48c92e6e5'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='' order by startdate,enddate;
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='1048:00:00' where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select date(date_trunc('week',date(''))) as firstday , date(date_trunc('week',date('')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+QUERY: select round(cast(((extract(epoch from (current_date + ''::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/ as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'' as id_staff, null as payedpause, 
+ '' as  wdcontracthours  
+FROM generate_series( ''::timestamp,''::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='' and (daydate > date('') or daydate < date('')) 
+     OR (id_staff='' AND  daydate not between date('') and date('') AND  daydate not between date('') and date(''));
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5';
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by daydate
+) xsunday) sunresult;
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='' order by daydate
+) xsunday) sunresult;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '11796d0b-6de0-c137-4a20-4ef48c92e6e5'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours=null,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = ''  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '11796d0b-6de0-c137-4a20-4ef48c92e6e5'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'11796d0b-6de0-c137-4a20-4ef48c92e6e5' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '11796d0b-6de0-c137-4a20-4ef48c92e6e5' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='11796d0b-6de0-c137-4a20-4ef48c92e6e5' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '11796d0b-6de0-c137-4a20-4ef48c92e6e5'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','a21bf35f-797d-f9f1-1796-34e3591934bc') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','a21bf35f-797d-f9f1-1796-34e3591934bc') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a21bf35f-797d-f9f1-1796-34e3591934bc'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='1048:00:00' where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a21bf35f-797d-f9f1-1796-34e3591934bc'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a21bf35f-797d-f9f1-1796-34e3591934bc'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'a21bf35f-797d-f9f1-1796-34e3591934bc' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= 'a21bf35f-797d-f9f1-1796-34e3591934bc' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='a21bf35f-797d-f9f1-1796-34e3591934bc' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = 'a21bf35f-797d-f9f1-1796-34e3591934bc'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='34f850b6-7a29-6900-637e-8c145886000c'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='34f850b6-7a29-6900-637e-8c145886000c')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='34f850b6-7a29-6900-637e-8c145886000c' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','34f850b6-7a29-6900-637e-8c145886000c') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='34f850b6-7a29-6900-637e-8c145886000c' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','34f850b6-7a29-6900-637e-8c145886000c') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='34f850b6-7a29-6900-637e-8c145886000c'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '34f850b6-7a29-6900-637e-8c145886000c'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='34f850b6-7a29-6900-637e-8c145886000c'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='1048:00:00' where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='34f850b6-7a29-6900-637e-8c145886000c';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '34f850b6-7a29-6900-637e-8c145886000c'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='34f850b6-7a29-6900-637e-8c145886000c' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '34f850b6-7a29-6900-637e-8c145886000c'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'34f850b6-7a29-6900-637e-8c145886000c' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='34f850b6-7a29-6900-637e-8c145886000c' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='34f850b6-7a29-6900-637e-8c145886000c';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='34f850b6-7a29-6900-637e-8c145886000c' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='34f850b6-7a29-6900-637e-8c145886000c' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '34f850b6-7a29-6900-637e-8c145886000c' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='34f850b6-7a29-6900-637e-8c145886000c' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '34f850b6-7a29-6900-637e-8c145886000c'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','0be74e54-4c4e-3801-caa8-0031df35742a') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','0be74e54-4c4e-3801-caa8-0031df35742a') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0be74e54-4c4e-3801-caa8-0031df35742a'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='1048:00:00' where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='0be74e54-4c4e-3801-caa8-0031df35742a';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0be74e54-4c4e-3801-caa8-0031df35742a'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0be74e54-4c4e-3801-caa8-0031df35742a'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0be74e54-4c4e-3801-caa8-0031df35742a' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='0be74e54-4c4e-3801-caa8-0031df35742a';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '0be74e54-4c4e-3801-caa8-0031df35742a' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='0be74e54-4c4e-3801-caa8-0031df35742a' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0be74e54-4c4e-3801-caa8-0031df35742a'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','4971b1a7-555b-8552-92a2-e8fc85fa6861') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','4971b1a7-555b-8552-92a2-e8fc85fa6861') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4971b1a7-555b-8552-92a2-e8fc85fa6861'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='1048:00:00' where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4971b1a7-555b-8552-92a2-e8fc85fa6861'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4971b1a7-555b-8552-92a2-e8fc85fa6861'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4971b1a7-555b-8552-92a2-e8fc85fa6861' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '4971b1a7-555b-8552-92a2-e8fc85fa6861' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='4971b1a7-555b-8552-92a2-e8fc85fa6861' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4971b1a7-555b-8552-92a2-e8fc85fa6861'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='520:00:00' where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='524:00:00' where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '44cbd54f-c0a8-6bc7-dbe7-cdab23bc059f'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','96623b4b-5bb4-0822-ce31-1e2a0ac19e9d') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','96623b4b-5bb4-0822-ce31-1e2a0ac19e9d') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='1048:00:00' where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='96623b4b-5bb4-0822-ce31-1e2a0ac19e9d' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '96623b4b-5bb4-0822-ce31-1e2a0ac19e9d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '30:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff, null as payedpause, 
+ '06:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '06:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','4dbf2328-c00b-0174-5604-67088bf87e6e') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '30:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff, null as payedpause, 
+ '06:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '06:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','4dbf2328-c00b-0174-5604-67088bf87e6e') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='780:00:00' where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4dbf2328-c00b-0174-5604-67088bf87e6e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='786:00:00' where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4dbf2328-c00b-0174-5604-67088bf87e6e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '30:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff, null as payedpause, 
+ '06:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '06:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4dbf2328-c00b-0174-5604-67088bf87e6e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '30:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'4dbf2328-c00b-0174-5604-67088bf87e6e' as id_staff, null as payedpause, 
+ '06:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '06:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '4dbf2328-c00b-0174-5604-67088bf87e6e' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='4dbf2328-c00b-0174-5604-67088bf87e6e' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '4dbf2328-c00b-0174-5604-67088bf87e6e'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='520:00:00' where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='524:00:00' where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '6e47c7e0-a43f-9c25-977c-f6fc4bf1d55d'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','0920d9fa-f53c-6244-1859-43c37159cca3') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','0920d9fa-f53c-6244-1859-43c37159cca3') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='520:00:00' where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0920d9fa-f53c-6244-1859-43c37159cca3'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='524:00:00' where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='0920d9fa-f53c-6244-1859-43c37159cca3';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0920d9fa-f53c-6244-1859-43c37159cca3'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0920d9fa-f53c-6244-1859-43c37159cca3'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '20:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'0920d9fa-f53c-6244-1859-43c37159cca3' as id_staff, null as payedpause, 
+ '04:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '04:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='0920d9fa-f53c-6244-1859-43c37159cca3';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '0920d9fa-f53c-6244-1859-43c37159cca3' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='0920d9fa-f53c-6244-1859-43c37159cca3' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '0920d9fa-f53c-6244-1859-43c37159cca3'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id from kajiwara.reportperiod order by startdate,enddate;
+QUERYARRAY: select id,startdate,enddate from kajiwara.reportperiod where 
+startdate >= date((select min(startdate) from kajiwara.staffcontract where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596'))
+or date((select min(startdate) from kajiwara.staffcontract where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596')) between startdate and enddate order by startdate,enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('3295dc17-be6c-3f8a-d5e0-b44a5de1277e','97ac0b46-1e0a-8389-22cb-39c1dfd89596') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' group by rp.id);
+EXEC: INSERT INTO kajiwara.staffreportperiod (id_reportperiod, id_staff) 
+    VALUES ('883c34d8-cfea-aa41-57c0-85fa8ca0b222','97ac0b46-1e0a-8389-22cb-39c1dfd89596') on conflict on constraint uniq_staffreportperiod_cal do nothing;
+QUERY: select reportperiodunit,reportperiodlength from public.companies where schemata='kajiwara'
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596'
+    ) scx where startdate < enddate and id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-11-01'),date('2022-04-30'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 130 as maxdays,130 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2021-11-01') and date('2022-04-30')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=130,contracthours='1040:00:00' where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '97ac0b46-1e0a-8389-22cb-39c1dfd89596'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERYARRAY: select id,weekhours,weekdays,startdate,enddate,defaultfreedays from (
+    select rp.id,case when sc.startdate < rp.startdate then rp.startdate else sc.startdate end as startdate ,
+    case when sc.enddate is null or sc.enddate > rp.enddate then rp.enddate else sc.enddate end as enddate,
+    sc.weekhours,sc.weekdays,sc.defaultfreedays from kajiwara.staffcontract sc
+    cross join kajiwara.reportperiod rp 
+    where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596'
+    ) scx where startdate < enddate and id='883c34d8-cfea-aa41-57c0-85fa8ca0b222' order by startdate,enddate;
+QUERY: select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (6,7) then 0 else 1 end as dow from pg_catalog.generate_series(date('2022-05-01'),date('2022-10-31'),'1 day')) mxdays
+QUERY: select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from (
+      select 131 as maxdays,131 * (round(cast(((extract(epoch from (current_date + weekhours::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0) /weekdays as numeric) ,2)+0.00) * '01:00:00'::interval as contracthours from (
+      select case when count(daydate) >= weekdays then weekdays else weekdays-count(daydate)-1 end as maxdays, calweek,count(daydate) as cntdays,count(sundays) as sundays,weekdays,weekhours from (
+       
+           select id_staff,date(date_trunc('week',daydate)) as calweek,daydate,case when date_part('isodow',daydate)::int4=7 then 1 else null end as sundays
+           from kajiwara.staffreportperioddays 
+           where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2022-05-01') and date('2022-10-31')
+      ) wgr
+      left join (
+           select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2022-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2022-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kajiwara.staffcontract where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596'
+      ) sc  on (wgr.calweek between sc.weekstartdate and sc.weekenddate )   where wgr.daydate between sc.startdate and sc.enddate group by sc.weekhours,sc.weekdays,calweek
+      ) rnddays group by weekhours,weekdays) xx
+EXEC: update kajiwara.staffreportperiod set maxdays=131,contracthours='1048:00:00' where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '97ac0b46-1e0a-8389-22cb-39c1dfd89596'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+EXEC: insert into kajiwara.staffvacancyyear (id_staff,vacyear)
+  select id_staff,to_char(daydate,'YYYY')::int4 as vyear from kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' group by id_staff,vyear order by id_staff,vyear
+  on conflict on constraint staffvacancyyear_id_staff_vacyear_key do nothing;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by rp.startdate,rp.enddate)
+    sper ) prp where id='3295dc17-be6c-3f8a-d5e0-b44a5de1277e'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2021-11-01') and date('2022-04-30') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2021-11-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and sr.daydate between  date('2021-11-01')  and date(date_trunc('week',date('2022-04-30')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2021-11-01'))) and date(date_trunc('week',date('2022-04-30')) + interval '6 days')
+                    --where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2021-11-01') and date('2022-04-30')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '3295dc17-be6c-3f8a-d5e0-b44a5de1277e')
+  where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and  pd.daydate between date('2021-11-01') and date('2022-04-30')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '97ac0b46-1e0a-8389-22cb-39c1dfd89596'  
+  ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
+QUERY: select date(date_trunc('week',min(startdate))) as startdatealt,min(startdate) as startdate,max(enddate) as enddate from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select payedpauses,reportperiodunit from public.companies where schemata ='kajiwara'
+QUERYARRAY: select case when sc.startdate > rp.minstartdate then sc.startdate else rp.minstartdatealt end as startdate ,
+case when sc.enddate is null or sc.enddate > rp.maxenddate then rp.maxenddate else sc.enddate end as enddate,
+sc.startdate as scstart,sc.enddate as scend,rp.minstartdate as minperiodstart,rp.maxenddate as maxperiodend,
+sc.weekhours,sc.weekdays from kajiwara.staffcontract sc
+left join (select date(date_trunc('week',min(startdate))) as minstartdatealt,min(startdate) as minstartdate,max(enddate) as maxenddate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff from kajiwara.reportperiod) rp on rp.id_staff=sc.id_staff 
+where sc.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by startdate,enddate;
+QUERY: select date(date_trunc('week',date('2021-11-01'))) as firstday , date(date_trunc('week',date('2022-10-31')) + interval '6 days') as lastday
+QUERY: select round(cast(((extract(epoch from (current_date + '40:00:00'::interval)::timestamp) - extract(epoch from current_date::timestamp))/3600.0)/5 as numeric) ,2) * '01:00:00'::interval as wdcontracthours
+EXEC: insert into kajiwara.staffreportperioddays (daydate,id_staff,payedpause,wdcontracthours)
+SELECT date_trunc('day', dd)::date as daydate,'97ac0b46-1e0a-8389-22cb-39c1dfd89596' as id_staff, null as payedpause, 
+ '08:00:00' as  wdcontracthours  
+FROM generate_series( '2021-11-01'::timestamp,'2022-11-06'::timestamp,'1 day'::interval) dd on conflict on constraint uniq_staffworplan_staffday 
+do update set wdcontracthours = '08:00:00';
+EXEC: DELETE FROM kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and (daydate > date('2022-11-06') or daydate < date('2021-11-01')) 
+     OR (id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' AND  daydate not between date('2021-11-01') and date('2022-11-06'));
+EXEC: delete from kajiwara.staffreportperiod sp where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod not in (
+select rp.id from kajiwara.reportperiod rp left join kajiwara.staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
+where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' group by rp.id);
+QUERY: select * from kajiwara.reportperiod where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222';
+QUERY: select coalesce(prevperiod,'') as prevperiod from (select lag(id_reportperiod,1) over (order by startdate,enddate) as prevperiod,id from ( 
+    select srp.id_reportperiod ,startdate,enddate,rp.id from kajiwara.staffreportperiod srp
+    join kajiwara.reportperiod rp on (rp.id=srp.id_reportperiod)
+    where srp.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by rp.startdate,rp.enddate)
+    sper ) prp where id='883c34d8-cfea-aa41-57c0-85fa8ca0b222'; 
+EXEC: update kajiwara.staffreportperioddays spds set
+  workhours=ds.worktime, timepause=case when ds.timepause::interval > '00:00:00' then ds.timepause else null end, 
+  dayhours=(ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval + ds.partunemplhours )::interval, interruptionhours = ds.interruption , 
+  contracthours=case when ds.worktime::interval + ds.vachours::interval  + ds.vacillhours::interval  + ds.vacextrahours::interval  + ds.otherpaidhours::interval  + ds.recup::interval > '00:00:00'::interval then ds.wdcontracthours else null end 
+  from (
+    select preds.id,case when preds.recuperationhours is null then '00:00:00'::interval else preds.recuperationhours::interval end as recup,
+    case when preds.vacancyhours is null then '00:00:00'::time else preds.vacancyhours end as vachours,
+    case when preds.vacillhours is null then '00:00:00'::time else preds.vacillhours end as vacillhours,
+    case when preds.vacextrahours is null then '00:00:00'::time else preds.vacextrahours end as vacextrahours,
+    case when preds.otherpaidhours is null then '00:00:00'::time else preds.otherpaidhours end as otherpaidhours,
+    case when preds.partunemplhours is null then '00:00:00'::time else preds.partunemplhours end as partunemplhours,
+    preds.interruption,
+    (preds.dt1+preds.dt2)-(case when preds.payedpause is null then preds.pdt1+preds.pdt2 else '00:00:00'::interval end)  as worktime,
+  (preds.pdt1+preds.pdt2) as timepause,
+  wdcontracthours
+       from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,
+               case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1 - timestart1 else  timeend1 - timestart1 end else  '00:00:00'::interval end as dt1,
+               case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2 - timestart2 else  timeend2 - timestart2 end  else  '00:00:00'::interval end as dt2,
+               case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then  '24:00:00'::interval + pauseend1 - pausestart1 else  pauseend1 - pausestart1 end else '00:00:00'::interval end as pdt1,
+               case when pausestart2 is not null and pauseend2 is not null then  case when pauseend2 < pausestart2 then  '24:00:00'::interval + pauseend2 - pausestart2 else  pauseend2 - pausestart2 end else '00:00:00'::interval end as pdt2,
+    case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then timestart2 - timeend1 else null end as interruption,
+    wdcontracthours
+               from kajiwara.staffreportperioddays where id in (select id from kajiwara.staffreportperioddays where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days'))
+  ) preds) ds where spds.id=ds.id;
+QUERY: select * from kajiwara.staffreportperiod where id_reportperiod='3295dc17-be6c-3f8a-d5e0-b44a5de1277e' and id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596';
+QUERY: select max(rowx) as statussuncount, sum(modx) as suppvacancysunwork from (
+select daydate,rowx, case when mod(rowx,20) = 0 then 2 else null end as modx from (
+select daydate,+row_number() over (order by daydate) as rowx  from kajiwara.staffreportperioddays 
+where daydate between date('2022-05-01') and date('2022-10-31') 
+and date_part('isodow',daydate)::int4 = 7 and workhours > '00:00:00'::time
+and id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' order by daydate
+) xsunday) sunresult;
+QUERY: select sum(suppvacancy44hours) as curvac44h from kajiwara.staffreportperiod where id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and id_reportperiod in (select id from kajiwara.reportperiod where date_part('year',startdate)::int4=date_part('year',date('2022-05-01')));
+QUERY: select *,case when week44s >= 8 then (week44s/8)::int else null end as plusdays from (
+select date(date_trunc('week',max(maxdate)) + interval '7 days') as maxdate,max(sumx) as week44s,mod(max(sumx),8) as weeksrest from (
+select weekstart,sum(case when sum(cnt44) > 0 then 0 else 1 end) over (order by weekstart) as sumx, max(daydate) as maxdate from (
+  SELECT date(date_trunc('week',yy.daydate)) as weekstart,daydate,
+                   case when (date_part('epoch', yy.daydate + yy.timestart - (yy.ndaydate + yy.ntimeend)) * '00:00:01'::interval) >= '44:00:00'::interval then 1 else 0 end as cnt44
+                   FROM ( SELECT lag(xx_1.daydate, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ndaydate,
+                            lag(xx_1.timeend, 1) OVER (ORDER BY xx_1.id_staff, xx_1.daydate) AS ntimeend,
+                            xx_1.id_staff, xx_1.daydate, xx_1.timestart, xx_1.timeend
+                           FROM ( SELECT sr.id_staff, sr.daydate,
+            CASE WHEN sr.timestart1 IS NOT NULL THEN sr.timestart1 ELSE sr.timestart2 END AS timestart,
+            CASE WHEN sr.timestart2 IS NOT NULL THEN sr.timeend2 ELSE sr.timeend1 END AS timeend
+                                   FROM kajiwara.staffreportperioddays sr
+                                  WHERE sr.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and sr.daydate between  date('2022-05-01')  and date(date_trunc('week',date('2022-10-31')) - interval '1 day')
+                                  and sr.dayhours IS NOT NULL AND sr.dayhours <> '00:00:00'::time without time zone
+                                  ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
+                                 ) aa group by aa.weekstart order by weekstart
+                                 ) bb)cc;
+QUERY: select weekstart,id_staff,avgtotalhours from (  
+     select ws.weekstart, ws.id_staff,
+  AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+  from (
+  SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+                   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 kajiwara.staffreportperioddays
+                    where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date(date_trunc('week',date('2022-05-01'))) and date(date_trunc('week',date('2022-10-31')) + interval '6 days')
+                    --where id_staff= '97ac0b46-1e0a-8389-22cb-39c1dfd89596' and daydate between date('2022-05-01') and date('2022-10-31')
+                    ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+                  ORDER BY weekstart) ws) wsavg order by weekstart DESC LIMIT 1;
+EXEC: update kajiwara.staffreportperiod rpd set
+  --contracthours=csp.contracthours,
+  workhours=csp.workhours,
+  vacancyill=csp.vacillhours,
+  vacancynormal=csp.vacancynormal,
+  vacancyextra=csp.vacextrahours,
+  otherpaidhours=csp.otherpaidhours,
+  partunemplhours=csp.partunemplhours,
+  totalhours=csp.totalhours,
+  recuperationhours=csp.recuperationhours,statussuncount=null,suppvacancysunwork=null,suppvacancy44hours=null,status44hcount=null,last44date=null,avgtotalweekhours='00:00:00'::interval,hoursdiff=csp.diffhours
+  FROM (
+  select contracthours,workhours,totalhours,recuperationhours, totalhours-contracthours-transferedhours as diffhours,id,vacillhours,vacancynormal,vacextrahours,otherpaidhours,partunemplhours from (
+  select dp.id,
+  sum(pd.workhours) as workhours,
+  sum(pd.dayhours) as totalhours,
+  sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancynormal,
+  sum(coalesce(pd.vacillhours,'00:00:00'::time)) as vacillhours,
+  sum(coalesce(pd.vacextrahours,'00:00:00'::time)) as vacextrahours,
+  sum(coalesce(pd.otherpaidhours,'00:00:00'::time)) as otherpaidhours,
+  sum(coalesce(pd.partunemplhours,'00:00:00'::time)) as partunemplhours,
+  sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours, 
+  coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
+  coalesce(dp.payedhours0,'00:00:00'::interval) as payedhours0,
+  coalesce(dp.payedhours40,'00:00:00'::interval) as payedhours40,
+  coalesce(dp.transferedhours,'00:00:00'::interval) as transferedhours
+  from kajiwara.staffreportperioddays pd 
+  join kajiwara.staffreportperiod dp on (pd.id_staff=dp.id_staff and dp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222')
+  where pd.id_staff='97ac0b46-1e0a-8389-22cb-39c1dfd89596' and  pd.daydate between date('2022-05-01') and date('2022-10-31')
+  group by dp.id,dp.payedhours,dp.transferedhourscalc
+  ) rp) csp where csp.id=rpd.id;
+QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
+    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.vacancyill, 'HH24:MI'::text) AS vacancyill,
+    to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
+    to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra,
+    to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours,
+    to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours,
+    to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
+    case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
+    to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
+    srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate,
+    COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
+    st.id_staffgroup, sgr.groupname,
+    case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
+    case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork  else  null end as suppvacancysunwork,
+    case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours  else null end as suppvacancy44hours
+    ,itmcontracthours,maxdays,srp.isvalidated,
+    to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours,
+    to_char(payedhours0, 'HH24:MI'::text) as payedhours0,
+    to_char(payedhours40, 'HH24:MI'::text) as payedhours40,
+    to_char(payedhours40calc, 'HH24:MI'::text)  as payedhours40calc,
+    to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
+    to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
+    to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_staff = '97ac0b46-1e0a-8389-22cb-39c1dfd89596'  
   ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from alicehartmann.staffvacancyyear where id_staff='e697a201-a3f0-9c0a-fa90-72aceebfdb36' order by vacyear;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from alicehartmann.staffcontract where id_staff='e697a201-a3f0-9c0a-fa90-72aceebfdb36' order by startdate,enddate;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from alicehartmann.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='e697a201-a3f0-9c0a-fa90-72aceebfdb36' order by daydate;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select * from alicehartmann.staff where id='1081bbea-feae-e812-0734-cca5424b0718' and isdeleted is null;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: SELECT id,id as id_staffcontract,id_staff,startdate,enddate,weekdays,to_char(weekhours, 'HH24:MI'::text) AS weekhours,defaultfreedays from alicehartmann.staffcontract where id_staff='1081bbea-feae-e812-0734-cca5424b0718' order by startdate,enddate;
 QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name,
     to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours,
     to_char(srp.workhours, 'HH24:MI'::text) AS workhours,
@@ -41151,872 +13071,522 @@ QUERYARRAY: SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coa
     to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer,
     to_char(hourstotransfercalc, 'HH24:MI'::text)  as hourstotransfercalc,
     to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
-   FROM alicehartmann.staffreportperiod srp
-     LEFT JOIN alicehartmann.staff st ON srp.id_staff = st.id
-     LEFT JOIN alicehartmann.reportperiod rp ON srp.id_reportperiod = rp.id
-     LEFT JOIN alicehartmann.staffgroups sgr ON st.id_staffgroup = sgr.id
-  WHERE st.isdeleted IS NULL  AND srp.id_staff = '1081bbea-feae-e812-0734-cca5424b0718'  
+   FROM kajiwara.staffreportperiod srp
+     LEFT JOIN kajiwara.staff st ON srp.id_staff = st.id
+     LEFT JOIN kajiwara.reportperiod rp ON srp.id_reportperiod = rp.id
+     LEFT JOIN kajiwara.staffgroups sgr ON st.id_staffgroup = sgr.id
+  WHERE st.isdeleted IS NULL  AND srp.id_reportperiod = '883c34d8-cfea-aa41-57c0-85fa8ca0b222'  
   ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate;
-QUERYARRAY: select id,id_staff,vacyear,to_char(vachours,'HH24:MI') as vachours from alicehartmann.staffvacancyyear where id_staff='1081bbea-feae-e812-0734-cca5424b0718' order by vacyear;
-QUERYARRAY: select to_char(daydate,'YYYY') as vacyear,daydate,
-  to_char(vacancyhours::interval,'HH24:MI') as vacancyhours,
-  to_char(vacillhours::interval,'HH24:MI') as vacillhours,
-  to_char(vacextrahours::interval,'HH24:MI') as vacextrahours, 
-  coalesce ('<div>' || vacancycomment || '</div>','') || coalesce('<div>' ||  vacillcomment|| '</div>','') || coalesce('<div>' || vacextracomment|| '</div>','') as description 
-  from alicehartmann.staffreportperioddays where (vacancyhours is not null or vacillhours is not null or vacextrahours is not null) and id_staff='1081bbea-feae-e812-0734-cca5424b0718' order by daydate;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
 QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
     us.schemaaccess AS schemaname,
     cp.datasetname
    FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
      FROM users WHERE users.isdeleted IS null) us
      LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
-      join users us on (us.id=se.id_user)
-      left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
-      us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: SELECT * FROM public.companies WHERE schemata='kajiwara' and isdeleted IS NULL;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
+QUERYARRAY: select sg.id,sg.groupname,sg.groupcolor,sg.isdefault,COALESCE(count(st.id), 0) AS staffmembers FROM kajiwara.staffgroups sg LEFT JOIN kajiwara.staff st ON (st.id_staffgroup = sg.id and st.isdeleted IS NULL)
+    GROUP BY sg.id ORDER BY sg.groupname;
+QUERYARRAY: select * from (
+SELECT us.username,us.isblocked,us.surname,us.prename,us.id_company,us.id_usergroup,us.id,cp.company,cp.datasetname,grp.groupname,us.lang,
+case when us.id_usergroup = 'teamleader' then string_agg(stgrp.groupname,',') else null end  as staffgroups,
+            json_array_elements_text(us.schemaaccess) AS xschema
+           FROM public.users us join public.companies cp on (us.id_company=cp.id)
+           left join public.usergroups grp on (us.id_usergroup=grp.id)
+           left join (select stu.id as id_user,stu.id_staffgroup,stg.groupname from kajiwara.staffgroups stg
+join (select id,json_array_elements_text(id_staffgroups) as id_staffgroup from public.users) stu on (stu.id_staffgroup=stg.id)) stgrp on (us.id=stgrp.id_user)
+          WHERE us.isdeleted IS null  and id_usergroup in ('teamleader','manager')  group by us.id,cp.id,grp.id
+          ) xus where xschema='kajiwara' group by xus.id,xus.username,xus.groupname,xus.isblocked,xus.surname,xus.prename,xus.id_company,xus.id_usergroup,xus.company,xus.datasetname,xus.xschema,xus.staffgroups,xus.lang;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERYARRAY: select * from (
+SELECT us.username,us.isblocked,us.surname,us.prename,us.id_company,us.id_usergroup,us.id,cp.company,cp.datasetname,grp.groupname,us.lang,
+case when us.id_usergroup = 'teamleader' then string_agg(stgrp.groupname,',') else null end  as staffgroups,
+            json_array_elements_text(us.schemaaccess) AS xschema
+           FROM public.users us join public.companies cp on (us.id_company=cp.id)
+           left join public.usergroups grp on (us.id_usergroup=grp.id)
+           left join (select stu.id as id_user,stu.id_staffgroup,stg.groupname from kajiwara.staffgroups stg
+join (select id,json_array_elements_text(id_staffgroups) as id_staffgroup from public.users) stu on (stu.id_staffgroup=stg.id)) stgrp on (us.id=stgrp.id_user)
+          WHERE us.isdeleted IS null  and id_usergroup in ('teamleader','manager')  group by us.id,cp.id,grp.id
+          ) xus where xschema='kajiwara' group by xus.id,xus.username,xus.groupname,xus.isblocked,xus.surname,xus.prename,xus.id_company,xus.id_usergroup,xus.company,xus.datasetname,xus.xschema,xus.staffgroups,xus.lang;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
+EXEC: UPDATE public.users SET userpassword = 'c79a9c394eb8ff36f262e71c2e0cecfcf0f56f791b9bcbd1aa1e544fe916b785' WHERE id='940bc991-a807-ac19-49a1-6aaedcf836f7';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-02-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-03-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-04-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-05-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-06-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-07-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-08-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-09-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-10-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-11-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
+QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
+    us.schemaaccess AS schemaname,
+    cp.datasetname
+   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
+     FROM users WHERE users.isdeleted IS null) us
+     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ('<div>' || spd.vacancycomment || '</div>','') || coalesce('<div>' ||  spd.vacillcomment|| '</div>','') || coalesce('<div>' || spd.vacextracomment|| '</div>','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-12-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    to_char(spd.vacancyhours::interval,'HH24:MI') as vacancyhours,
-    to_char(spd.vacillhours::interval,'HH24:MI') as vacillhours,
-    to_char(spd.vacextrahours::interval,'HH24:MI') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
+    us.schemaaccess AS schemaname,
+    cp.datasetname
+   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
+     FROM users WHERE users.isdeleted IS null) us
+     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-05-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-09-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-07-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-02-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-05-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-07-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-03-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-09-01')) order by st.surname,st.prename,spd.daydate 
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-04-01')) order by st.surname,st.prename,spd.daydate 
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERYARRAY: select st.prename,st.surname,spd.id_staff,to_char(spd.daydate,'YYYY') as vacyear,spd.daydate,
-    coalesce(to_char(spd.vacancyhours::interval,'HH24:MI'),'') as vacancyhours,
-    coalesce(to_char(spd.vacillhours::interval,'HH24:MI'),'') as vacillhours,
-    coalesce(to_char(spd.vacextrahours::interval,'HH24:MI'),'') as vacextrahours, 
-    coalesce ( spd.vacancycomment || ' ' ,'') || coalesce(  spd.vacillcomment || ' ' ,'') || coalesce( spd.vacextracomment|| ' ','') as description 
-    from alicehartmann.staffreportperioddays spd 
-    join alicehartmann.staff st on (st.id=spd.id_staff)
-    where (spd.vacancyhours is not null or spd.vacillhours is not null or spd.vacextrahours is not null) and date_trunc('month',spd.daydate)=date_trunc('month',date('2021-01-01')) order by st.surname,st.prename,spd.daydate 
+QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
+    us.schemaaccess AS schemaname,
+    cp.datasetname
+   FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
+     FROM users WHERE users.isdeleted IS null) us
+     LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
+QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
-QUERY: select timetrackertype,sector from public.companies where schemata='alicehartmann';
+QUERY: select timetrackertype,sector from public.companies where schemata='kajiwara';
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
 QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from sessions se 
       join users us on (us.id=se.id_user)
       left join usergroups ugrp on (ugrp.id=us.id_usergroup)
-      where se.id= '052d31c8-8273-3dda-cc0c-2edb6ea4a78a' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' and 
+      where se.id= 'a046868f-3c94-adc9-caac-1e6088267672' and se.remote_addr= '::1' and se.user_agent ='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' and 
       us.isblocked is null group by se.id,us.id,ugrp.id;
+QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
 QUERYARRAY: SELECT distinct(us.schemaaccess),cp.company,
     us.schemaaccess AS schemaname,
     cp.datasetname
    FROM ( SELECT json_array_elements_text(users.schemaaccess) AS schemaaccess
      FROM users WHERE users.isdeleted IS null) us
      LEFT JOIN companies cp ON cp.schemata = us.schemaaccess AND cp.isdeleted IS NULL;
-QUERY: select terms from public.users where id='e9e6880b-75c7-70b5-ce61-49cf6d62630f';
index fae5632..6072bff 100644 (file)
@@ -37,6 +37,8 @@
 <link rel="stylesheet" href="{{ abspath }}vendors/slimselect/slimselect.css?v={{ appversion }}">
 <link rel="stylesheet" href="{{ abspath }}vendors/flatpickr/flatpickr.css?v={{ appversion }}">
 <link rel="stylesheet" href="{{ abspath }}vendors/flatpickr/themes/airbnb.css?v={{ appversion }}">
+
+
 <link rel="stylesheet" href="{{ abspath }}vendors/flatpickr/plugins/monthSelect/style.css?v={{ appversion }}">
 <link rel="stylesheet" href="{{ abspath }}vendors/suneditor/css/suneditor.min.css?v={{ appversion }}">
 <meta name="apple-mobile-web-app-status-bar-style" content="black">
index 705a3a7..cdf7a3d 100644 (file)
@@ -5,6 +5,6 @@
     </div>
   </div>
   <div class="row center" style="margin-top: 200px; height: calc(100vh - 160px);">
-    <img src="{{ abpspath}}{{ staticpath }}img/toplogo.png" style="margin: auto;">
+    <img src="{{ abspath}}{{ staticpath }}img/toplogo.png" style="margin: auto;">
   </div>
 </div>
index 85a113a..31b07dc 100644 (file)
 <script type="text/javascript" src="../profile/profile{{ minify}}.js?v={{ appversion }}"></script>
 <script type="text/javascript" src="worktimes{{ minify}}.js?v={{ appversion }}"></script>
 {% endif %}
+<script>
+  function initpage(){
+    companies.inittable();
+    users.inittable();
+    staffgroups.inittable();
+    schemadataset.initform();
+  }
+</script>
index b3e1152..07e4ecb 100644 (file)
@@ -68,12 +68,15 @@ let companies ={
       rowContext:function(e, row){e.preventDefault();}
 
   });
+  
   // companies.tbl.on("rowClick",function(e, row){
   //   companies.edit();
   // });
   // companies.tbl.on("rowContext",function(e, row){e.preventDefault();});
-  //   companies.gettbldata();
+  //   
   // },
+    companies.gettbldata();
+  },
   gettbldata: function(id){
      if (id){
       companies.current_company = id;
index 0f37ef2..5d27076 100644 (file)
@@ -57,16 +57,18 @@ let schemadataset= {
     newdata["reportperiodunit"] = schemadataset.choices["dataset_reportperiodunit"].selected();
     newdata["reportperiodlength"] = document.getElementById("dataset_reportperiodlength").value;
     newdata["payedpauses"] = schemadataset.choices["dataset_payedpauses"].selected();
-    //console.log("newdatasetdata",newdata);
+    //
     for (var n in newdata) {
       if ((n != "payedpauses") && ((newdata[n] == null) || (newdata[n] == "") )){
         document.getElementById("datasetmsg").innerHTML='<div class="panel error-panel">{{ lbl.allfieldsrequired }}</div>';
         return false;
       } 
     }
+    console.log("newdatasetdata",newdata);
     document.getElementById('dlg_dataset').style.display='none';
     showdataloaddlg('','<div class="xxlarge">{{ lbl.waitmsg }}</div>');
     postData("db.php",newdata).then(data => {
+      console.log(data);
       companies.gettbldata();
       closedataloaddlg();
     }).catch(e => {
index 442711c..e0a3ee3 100644 (file)
@@ -55,8 +55,8 @@ let users ={
   gettbldata: function(){
       let sel= companies.tbl.getSelectedData();
       if (sel[0]){
-        postData("db.php",{ "get":"userlist","schemata":companies.current_schemata}).then(data => {
-          //console.log(data);
+        postData("db.php",{"cl":"User","fn":"getUserList","schema":companies.current_schemata}).then(data => {
+          console.log(data);
           users.tbl.setData(data.result.data);
         });
       }
index e371018..f316aff 100644 (file)
@@ -39,7 +39,7 @@ let worktimes = {
   gettbldata: function(){
     let sel = companies.tbl.getSelectedData();
     if (sel[0]){
-      postData("db.php", { "get":  "worktimeslist","schemata":sel[0].schemata}).then(data => {
+      postData("db.php", {"cl":"Worktime","fn":  "getWorktimes","schema":sel[0].schemata}).then(data => {
         worktimes.tbl.setData(data.result.data);
       });
     }
index 848dab8..644cfc9 100644 (file)
@@ -158,15 +158,14 @@ let staffperiodweeks = {
       staffperiodweeks.weekdata = data.result.data;
       postData("db.php",{ "get":  "perioddays","schemata":schemata,"id_staff":selrp[0].id_staff,"date_start":weekmonstart,"date_end":weeksunend}).then(data2 => {
         if (data2 && data2.result.data) {
-          console.log("Data to Set",data2.result);
+          //console.log("Data to Set",data2.result);
           //staffperiodweeks.tbl.redraw();
-          staffperiodweeks.tbl.setData(data2.result.data);
-          // .then(dd => {
-          //   if (staffperiodweeks.selectedid != null){
-          //     //staffperiodweeks.tbl.selectRow(staffperiodweeks.selectedid);
-          //     //staffperiodweeks.tbl.scrollToRow(staffperiodweeks.selectedid, "center", false);
-          //   }
-          // });
+          staffperiodweeks.tbl.setData(data2.result.data).then(dd => {
+            if (staffperiodweeks.selectedid != null){
+              staffperiodweeks.tbl.selectRow(staffperiodweeks.selectedid);
+              staffperiodweeks.tbl.scrollToRow(staffperiodweeks.selectedid, "center", false);
+            }
+          });
           
         }
       });
index 29d9401..928ee6a 100644 (file)
@@ -55,7 +55,7 @@
         <div class="container cell">
           <div class="cell" style="width: 350px;">
             <label for="addstaff_defaultfreedays" class="label">{{ lbl.freeweekdays }} </label>
-            <select class="select data_addstaff" id="defaultfreedays" data-column="defaultfreedays" multiple data-table="addstaff" data-id="" value="" name="addstaff_defaultfreedays">
+            <select class="select data_addstaff" id="addstaff_defaultfreedays" data-column="defaultfreedays" multiple data-table="addstaff" data-id="" value="" name="addstaff_defaultfreedays">
               <option value="1">{{lbl.monday}}</option>
               <option value="2">{{lbl.tuesday}}</option>
               <option value="3">{{lbl.wednesday}}</option>
index 38851c9..8c5a34d 100644 (file)
@@ -61,6 +61,11 @@ let staff ={
       select: "#addstaff_id_staffgroup",
       showSearch: false,
     });
+    staff.choices["addstaff_defaultfreedays"] = new SlimSelect({
+      select: "#addstaff_defaultfreedays",
+      showSearch: false,
+      
+    });
     // staff.choices["timetrackerrestriction"] = new SlimSelect({
     //   select: "#timetrackerrestriction",
     //   showSearch: false,
@@ -124,6 +129,7 @@ let staff ={
         headerFilterPlaceholder:"{{ lbl.filter }}",
         columns: [
           {title: "Départment", field: "groupname", visible: false },
+          { title: "{{ lbl.staffnumber }}",field: "staffnumber",headerFilter:"input",resizable:false},
           {title: "{{ lbl.name }}",headerFilter:"input", field: "staffname" ,resizable:false },
       ],
       rowClick:function(e, row){
@@ -152,6 +158,7 @@ let staff ={
     document.getElementById("addstaff_weekdays").value="5";
     document.getElementById("addstaff_startdate")._flatpickr.setDate(moment(new Date()).format('YYYY-MM-DD'));
     staff.choices["addstaff_id_staffgroup"].set(staff.staff_defaultgroup);
+    staff.choices["addstaff_defaultfreedays"].set(["6","7"]);
     app.viewdialog("addstaff");
   },
   savenew: function(){
@@ -162,9 +169,13 @@ let staff ={
       flds[x] = flds[i];
       delete flds[i];
     }
+    if (flds["defaultfreedays"]){
+      flds["defaultfreedays"] = JSON.stringify(flds["defaultfreedays"]);
+    }
     flds["schemata"] = schemata;
+    // flds["cl"] = "Staff";
     flds["fn"]="add_staff";
-    
+    //console.log("Fields",flds);
     if ((flds["startdate"] == "") || (flds["startdate"] == "") || (flds["weekdays"] == "weekhours") || (flds["weekhours"] == "") || (flds["id_staffgroup"] == "")){
       document.getElementById("dlg_addstaff_infomsg").innerHTML = '<div class="panel error-panel">les champs "{{ lbl.startdate }}","heures/semaine","jours/semaine" et "{{ lbl.department }}" sont requis!</div>';
       return false;
@@ -180,7 +191,7 @@ let staff ={
   },
   edit: function(){
     let udata = staff.tbl.getSelectedData();
-    console.log("Staff Details",udata[0]);
+    //console.log("Staff Details",udata[0]);
     if (udata[0]) {
       
       //console.log("selstaff",udata[0]); 
index 4808d3c..1ad7c2b 100644 (file)
@@ -1,7 +1,7 @@
 let weekdays = [{label:"{{ lbl.monday }}",value:"1"},{label:"{{ lbl.thursday }}",value:"2"},{label:"{{ lbl.wednesday }}",value:"3"},{label:"{{ lbl.thursday }}",value:"4"},{label:"{{ lbl.friday }}",value:"5"},{label:"same{{ lbl.saturday }}di",value:"6"},{label:"{{ lbl.sunday }}",value:"7"}];
 let staffcontract = {
   tbl: null,
-  choices:{"id_workplan":null},
+  choices:{"id_workplan":null,"defaultfreedays":null},
   maxfreedays: 1,
   initform: function(){
     flatpickr("#startdate",{altInput: true,
@@ -19,10 +19,10 @@ let staffcontract = {
     staffcontract.choices["defaultfreedays"] = new SlimSelect({
       select: "#defaultfreedays",
       showSearch: false,
-      afterClose: function(){
-        //console.log("set timetrack");
-        //dataform.savefield(document.getElementById('timetrackerlang'),null);
-      }
+      // afterClose: function(){
+      //   //console.log("set timetrack");
+      //   //dataform.savefield(document.getElementById('timetrackerlang'),null);
+      // }
     });
   },
   inittable: function(){
index cf435aa..1f15f9e 100644 (file)
@@ -58,7 +58,7 @@ let staffperiods = {
   gettbldata: function(){
     console.log("stafftable data");
     postData("db.php",{ "cl":"Period","fn":"getPeriodsByStaff","schema":schemata,"id_staff":staff.current_id,"id_groups":'{{session.staffgroups}}'}).then(data => {
-      console.log("staffdata",data);
+      //console.log("staffdata",data);
       staffperiods.tbl.setData(data.result.data);
     });
   },
index 1d1f3c4..4f96783 100644 (file)
@@ -12,9 +12,10 @@ let staffvacancy = {
         {title: "{{ lbl.year }}",field: "vacyear",headerSort: false, width: 100},
         {title: "{{ lbl.vacancyhours }}", field: "vachours",headerSort: false}
         
-      ]
+      ],
+      rowContext:function(e, row){ e.preventDefault();}
   });
-  staffvacancy.tblyears.on("rowContext",function(e, row){ e.preventDefault();});
+  //staffvacancy.tblyears.on("rowContext",function(e, row){ e.preventDefault();});
   staffvacancy.tbl=new Tabulator("#tbl_staffvacancy", {
     headerFilterPlaceholder: "{{ lbl.filter }}",
     height: "calc(100vh - 90px)",
index f5fe42c..03eacfa 100644 (file)
@@ -5,38 +5,38 @@
     (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.flatpickr = factory());
 }(this, (function () { 'use strict';
 
-    /*! *****************************************************************************\r
-    Copyright (c) Microsoft Corporation.\r
-\r
-    Permission to use, copy, modify, and/or distribute this software for any\r
-    purpose with or without fee is hereby granted.\r
-\r
-    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r
-    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r
-    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r
-    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r
-    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r
-    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r
-    PERFORMANCE OF THIS SOFTWARE.\r
-    ***************************************************************************** */\r
-\r
-    var __assign = function() {\r
-        __assign = Object.assign || function __assign(t) {\r
-            for (var s, i = 1, n = arguments.length; i < n; i++) {\r
-                s = arguments[i];\r
-                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r
-            }\r
-            return t;\r
-        };\r
-        return __assign.apply(this, arguments);\r
-    };\r
-\r
-    function __spreadArrays() {\r
-        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r
-        for (var r = Array(s), k = 0, i = 0; i < il; i++)\r
-            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r
-                r[k] = a[j];\r
-        return r;\r
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+
+    var __assign = function() {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+
+    function __spreadArrays() {
+        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+        for (var r = Array(s), k = 0, i = 0; i < il; i++)
+            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+                r[k] = a[j];
+        return r;
     }
 
     var HOOKS = [
             else {
                 self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
                 self.monthsDropdownContainer.setAttribute("aria-label", self.l10n.monthAriaLabel);
+                self.monthsDropdownContainer.style.display = "inline";
                 bind(self.monthsDropdownContainer, "change", function (e) {
                     var target = getEventTarget(e);
                     var selectedMonth = parseInt(target.value, 10);
index efdffd5..d60fb16 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 .tabulator {
   position: relative;
   border: 1px solid #999;
index ac0146e..b9dd137 100644 (file)
@@ -1,3 +1,3 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 .tabulator{position:relative;border:1px solid #999;background-color:#888;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:1px solid #999;background-color:#e6e6e6;color:#555;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background:#e6e6e6;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#cdcdcd;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:absolute;top:0;bottom:0;right:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#cdcdcd}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter{color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter{color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{-ms-flex-pack:center;justify-content:center;left:0;right:0;top:4px;bottom:auto}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#f3f3f3!important;border-top:1px solid #aaa;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#ccc;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#e2e2e2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#e6e6e6;text-align:right;color:#555;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#f3f3f3!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator{color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#d00}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{position:relative;box-sizing:border-box;padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{display:inline-block;position:absolute;top:calc(5px + .4em);right:10px;height:7px;width:7px;content:"";border-width:1px 1px 0 0;border-style:solid;border-color:#aaa;vertical-align:top;transform:rotate(45deg)}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{text-align:initial;direction:rtl}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{text-align:initial;border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-right:0;margin-left:-1px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:0;padding-left:25px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-right:initial;border-left:1px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{margin-right:0;margin-left:5px;border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-right:0;margin-left:5px}.tabulator.tabulator-rtl .tabulator-col-resize-handle{position:absolute;left:0;right:auto}.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev{right:0;left:auto}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#d00}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
 /*# sourceMappingURL=tabulator.min.css.map */
index 096583e..86c8b41 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"AA0CA,WACC,kBAAkB,AAElB,sBAxCgB,AA0ChB,sBA3CqB,AA6CrB,eA3Ca,AA4Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAyhBxB,AAxiBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,kCA8BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA/BF,6BAmCE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAtEwB,AAuExB,yBA1E4B,AA2E5B,WA1EmB,AA2EnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAoRpB,AAvUF,qDAsDG,YAAY,CACZ,AAvDH,4CA2DG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BA7FoB,AA8FpB,mBAhG2B,AAiG3B,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAsNhB,AAxRH,6DAqEI,kBAAkB,AAClB,sBApGsB,AAqGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AAzEJ,mEA6EI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CA+DX,AA9IJ,iGAmFK,aAAc,CAMd,AAzFL,uGAsFM,eAAe,AACf,UAAW,CACX,AAxFN,+FA6FK,iBAAkB,CAClB,AA9FL,wFAkGK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAiBrB,AAzHL,gHA4GM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AApHN,8IAuHM,uBAAuB,CACvB,AAxHN,yFA6HK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AA5IL,0GAsIM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAnKkB,CAoKlB,AA3IN,0FAqJK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAvLkB,AAwLlB,gBAAgB,AAEhB,iBAAiB,CACjB,AA5JL,0FAkKK,YAAa,CACb,AAnKL,qEAwKI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA7LJ,8EAgLK,qBAAsB,CACtB,AAjLL,yEAoLK,cAAe,CACf,AArLL,sFAyLM,QAAS,AACT,QAAS,CACT,AA3LN,oFAkMK,kBAAkB,CAClB,AAnML,qEAsMK,eAAc,AACd,wBAAoD,CACpD,AAxML,4HA4MM,UArOkB,CA2OlB,AAlNN,6IA+MO,gBAAgB,AAChB,4BAzOiB,CA0OjB,AAjNP,2HAuNM,UAjPgB,CAwPhB,AA9NN,4IA0NO,gBAAgB,AAChB,4BArPe,CAuPf,AA7NP,4HAmOM,UA7PgB,CAoQhB,AA1ON,6IAsOO,mBAAmB,AACnB,0BAjQe,AAkQf,UAlQe,CAmQf,AAzOP,+GAkPM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAxPN,oHA6PM,wBAAyB,CACzB,AA9PN,2GAmQM,gBAAe,AACf,gBAAgB,CAChB,AArQN,uIAyQO,gBAAe,AACf,mBAAmB,CACnB,AA3QP,4GAgRM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AArRN,+CA2RG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AAzSH,qEAmSI,2BAvTgB,CAwThB,AApSJ,sEAuSI,0BA3TgB,CA4ThB,AAxSJ,qDA6SG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BA9UiB,AA+UjB,6BA1VoB,AA4VpB,eAAgB,CAChB,AA9TH,oEAmTI,4BAAyD,CAKzD,AAxTJ,iGAsTK,YAAa,CACb,AAvTL,2DAiUG,cAAc,CAKd,AAtUH,iEAoUI,YAAa,CACb,AArUJ,kCA2UE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAyDjC,AAxYF,wCAkVG,YAAa,CACb,AAnVH,yDAuVG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA5WH,wFA4VI,gBAAe,AACf,cAAc,CACd,AA9VJ,8DAmWI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA3WJ,mDAgXG,kBAAiB,AACjB,qBAAoB,AACpB,sBAxYqB,AAyYrB,mBAAmB,AACnB,iBAAgB,AAChB,UAxYe,CA0Zf,AAvYH,kFA0XK,gBAAiB,AACjB,4BAAwD,CASxD,AApYL,sGA8XM,4BAlZc,CAmZd,AA/XN,yGAkYM,yBAtZc,CAuZd,AAnYN,6BA8YE,iBAAgB,AAChB,0BArZwB,AAsZxB,yBAzZ4B,AA0Z5B,iBAAiB,AACjB,WA1ZmB,AA2ZnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAgFpB,AA1eF,qDA6ZG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAyD,AAUzD,6BAjciB,AAkcjB,0BAlciB,AAocjB,eAAgB,CAMhB,AAtbH,oEAsaI,4BAAyD,CAKzD,AA3aJ,iGAyaK,YAAa,CACb,AA1aL,gEAmbI,mBAAkB,AAClB,kBAAkB,CAClB,AArbJ,kDAybG,WAjckB,AAkclB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA7bH,kDAicG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA7coB,AA8cpB,iBAAiB,CACjB,AAxcH,8CA2cG,YAAY,CACZ,AA5cH,6CAgdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5doB,AA6dpB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AAzeH,oDA2dI,UAhemB,CAienB,AA5dJ,sDA+dI,UAAU,CACV,AAheJ,kEAoeK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAveL,wCA8eE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA5fF,6CAqfG,OAAM,AACN,UAAU,CACV,AAvfH,8CA0fG,gBAAgB,CAChB,AA3fH,6BAigBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAviBF,mDAghBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAtiBH,qEA6hBI,sBAAqB,AACrB,UAAU,CACV,AA/hBJ,mEAmiBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBArkBuB,CAu7BvB,AAtXD,kCAQE,wBAxkB4B,CAykB5B,AATF,0CAYE,sBAzkBsB,AA0kBtB,cAAe,CACf,AAdF,kCAiBE,wBA5kB6B,CA6kB7B,AAlBF,wCAqBE,yBA/kBkC,AAglBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BAhmBkB,AAimBlB,6BAjmBkB,AAmmBlB,oBAAoB,AACpB,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAloBiB,CAmoBjB,AApEH,wDAuEG,0BAtoBiB,CAuoBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BA/oBkB,AAgpBlB,4BAhpBkB,CAmqBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cAvqBW,CAkrBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BA3qBkB,AA4qBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA2LtB,AA3SF,iDAmHG,yBA3qBkB,AA4qBlB,aAAY,AAEZ,SAAU,CAMV,AA5HH,+GAyHI,WAAU,AACV,sBAAsB,CACtB,AA3HJ,yDA+HG,qBAtrBgB,CA6rBhB,AAtIH,+HAiII,WAAU,AACV,uBAAsB,AAEtB,UA3rBe,CA4rBf,AArIJ,6EA2II,YAAa,CACb,AA5IJ,oDAiJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAtKH,8EA4JI,SAAS,CAST,AArKJ,wGAgKK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AApKL,2DAyKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAnvBiB,AAovBjB,4BApvBiB,CAqvBjB,AAtLH,4DA0LG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAlwBe,AAmwBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA3PH,kEA2MI,eAAc,AACd,yBAA4B,CAC5B,AA7MJ,kGAgNI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAnOJ,wGAyNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA/xBa,CAgyBb,AAlOL,gGAsOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA1yBc,CAuzBd,AAzPJ,sGA+OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eArzBa,CAszBb,AAxPL,qEA8PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA90BqB,AA+0BrB,gBAAgB,AAChB,eAAe,CAmBf,AAlSH,2EAkRI,UAAU,CACV,AAnRJ,sHAuRK,eAAe,CACf,AAxRL,sOAgSI,YAAY,CACZ,AAjSJ,wDAqSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AA1SH,+BA+SE,sBAAqB,AACrB,6BAA4B,AAC5B,4BAh3BkB,AAi3BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CA4Df,AApXF,qCA2TG,eAAc,AACd,+BAA+B,CAC/B,AA7TH,wEAkUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BA14BkB,AA24BlB,eAAgB,CAChB,AAvUJ,uDA4UG,iBAAiB,CACjB,AA7UH,uDAgVG,iBAAiB,CACjB,AAjVH,uDAoVG,iBAAiB,CACjB,AArVH,uDAwVG,iBAAiB,CACjB,AAzVH,uDA4VG,kBAAkB,CAClB,AA7VH,uDAgWG,oBAAqB,CACrB,AAjWH,gDAqWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAj7BmB,AAk7BnB,qBAAqB,CACrB,AA9WH,oCAiXG,iBAAgB,AAChB,UAAU,CACV,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBA97BuB,AA+7BvB,sBA77BmB,AA87BnB,oCAAuC,AAEvC,eAh9Ba,AAk9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA8Cd,AA5DD,qCAiBE,kBAAiB,AACjB,sBAAqB,AAErB,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAiCjB,AAvDF,kEAyBG,UAAW,CACX,AA1BH,8EA6BG,eAAe,AACf,kBAt9B2B,CAu9B3B,AA/BH,iEAkCG,kBAAkB,CAoBlB,AAtDH,uEAqCI,qBAAqB,AACrB,kBAAkB,AAElB,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,UAAU,AAEV,WAAW,AAEX,yBAAyB,AACzB,mBAAmB,AACnB,kBAx+BgB,AAy+BhB,mBAAmB,AAEnB,uBAAwB,CACxB,AArDJ,0CA0DE,yBAj/BkB,CAk/BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA9/BuB,AA+/BvB,sBA7/BmB,AA+/BnB,eA/gCa,AAihCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA4Cd,AA3DD,6DAkBE,YAAW,AAEX,UAxgCgB,CA6hChB,AAzCF,oEAuBG,WA9gCqB,AA+gCrB,kBAtgCkB,CA2gClB,AA7BH,4EA2BI,oCAlhCoB,CAmhCpB,AA5BJ,qEAgCG,yBA9gCkB,CA+gClB,AAjCH,mEAoCG,eAAc,AAEd,WA7hCqB,AA8hCrB,kBArhCkB,CAshClB,AAxCH,+DA4CE,YAAW,AAEX,WAliCgB,AAmiChB,iBAAkB,CAClB,AAhDF,8DAmDE,6BAxiCkB,AA0iClB,YAAW,AACX,gBAAe,AAEf,WA5iCgB,AA6iChB,eAAgB,CAChB,AAMF,yBACC,aAAc,CACd,AAED,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BA3kCoB,AA4kCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BA7lCiB,CAqnCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BA9mCgB,CA+mChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAOH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAwKzB,AAzKD,mDAIE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BArqCkB,AAsqClB,4BAtqCkB,CAuqClB,AAjBF,oDAqBE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA7qCkB,AA8qClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CAsEf,AApGF,0DAiCG,eAAc,AACd,+BAA+B,CAC/B,AAnCH,6FAwCI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAvsCkB,AAwsClB,eAAgB,CAChB,AA7CJ,+EAmDI,2BAA4B,CAC5B,AApDJ,+EAyDI,2BAA4B,CAC5B,AA1DJ,+EA+DI,2BAA4B,CAC5B,AAhEJ,+EAqEI,2BAA4B,CAC5B,AAtEJ,+EA2EI,4BAA6B,CAC7B,AA5EJ,4EAgFG,oBAAqB,CACrB,AAjFH,qEAqFG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAxvCmB,AAyvCnB,qBAAqB,CACrB,AA9FH,yDAiGG,iBAAgB,AAChB,UAAU,CACV,AAnGH,oDAwGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAvwCgB,AAwwChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAxKF,0DAyHG,eAAc,AACd,yBAA4B,CAC5B,AA3HH,0FA8HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjJH,gGAuII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eApyCc,CAqyCd,AAhJJ,wFAoJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA/yCe,CA4zCf,AAvKH,8FA6JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA1zCc,CA2zCd","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.8.4 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\toutline:none;\r\n\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\t\tposition:relative;\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-menu-item-submenu{\r\n\t\t\tpadding-right:25px;\r\n\r\n\t\t\t&::after {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tposition: absolute;\r\n\r\n\t\t\t\ttop: calc(5px + .4em);\r\n\t\t\t\tright: 10px;\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tcontent: '';\r\n\r\n\t\t\t\tborder-width: 1px 1px 0 0;\r\n\t\t\t\tborder-style: solid;\r\n\t\t\t\tborder-color: $rowBorderColor;\r\n\t\t\t\tvertical-align: top;\r\n\r\n\t\t\t\ttransform: rotate(45deg);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"AA0CA,WACC,kBAAkB,AAElB,sBAxCgB,AA0ChB,sBA3CqB,AA6CrB,eA3Ca,AA4Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAyhBxB,AAxiBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,kCA8BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA/BF,6BAmCE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAtEwB,AAuExB,yBA1E4B,AA2E5B,WA1EmB,AA2EnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAoRpB,AAvUF,qDAsDG,YAAY,CACZ,AAvDH,4CA2DG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BA7FoB,AA8FpB,mBAhG2B,AAiG3B,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAsNhB,AAxRH,6DAqEI,kBAAkB,AAClB,sBApGsB,AAqGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AAzEJ,mEA6EI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CA+DX,AA9IJ,iGAmFK,aAAc,CAMd,AAzFL,uGAsFM,eAAe,AACf,UAAW,CACX,AAxFN,+FA6FK,iBAAkB,CAClB,AA9FL,wFAkGK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAiBrB,AAzHL,gHA4GM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AApHN,8IAuHM,uBAAuB,CACvB,AAxHN,yFA6HK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AA5IL,0GAsIM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAnKkB,CAoKlB,AA3IN,0FAqJK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAvLkB,AAwLlB,gBAAgB,AAEhB,iBAAiB,CACjB,AA5JL,0FAkKK,YAAa,CACb,AAnKL,qEAwKI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA7LJ,8EAgLK,qBAAsB,CACtB,AAjLL,yEAoLK,cAAe,CACf,AArLL,sFAyLM,QAAS,AACT,QAAS,CACT,AA3LN,oFAkMK,kBAAkB,CAClB,AAnML,qEAsMK,eAAc,AACd,wBAAoD,CACpD,AAxML,4HA4MM,UArOkB,CA2OlB,AAlNN,6IA+MO,gBAAgB,AAChB,4BAzOiB,CA0OjB,AAjNP,2HAuNM,UAjPgB,CAwPhB,AA9NN,4IA0NO,gBAAgB,AAChB,4BArPe,CAuPf,AA7NP,4HAmOM,UA7PgB,CAoQhB,AA1ON,6IAsOO,mBAAmB,AACnB,0BAjQe,AAkQf,UAlQe,CAmQf,AAzOP,+GAkPM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAxPN,oHA6PM,wBAAyB,CACzB,AA9PN,2GAmQM,gBAAe,AACf,gBAAgB,CAChB,AArQN,uIAyQO,gBAAe,AACf,mBAAmB,CACnB,AA3QP,4GAgRM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AArRN,+CA2RG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AAzSH,qEAmSI,2BAvTgB,CAwThB,AApSJ,sEAuSI,0BA3TgB,CA4ThB,AAxSJ,qDA6SG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BA9UiB,AA+UjB,6BA1VoB,AA4VpB,eAAgB,CAChB,AA9TH,oEAmTI,4BAAyD,CAKzD,AAxTJ,iGAsTK,YAAa,CACb,AAvTL,2DAiUG,cAAc,CAKd,AAtUH,iEAoUI,YAAa,CACb,AArUJ,kCA2UE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAyDjC,AAxYF,wCAkVG,YAAa,CACb,AAnVH,yDAuVG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA5WH,wFA4VI,gBAAe,AACf,cAAc,CACd,AA9VJ,8DAmWI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA3WJ,mDAgXG,kBAAiB,AACjB,qBAAoB,AACpB,sBAxYqB,AAyYrB,mBAAmB,AACnB,iBAAgB,AAChB,UAxYe,CA0Zf,AAvYH,kFA0XK,gBAAiB,AACjB,4BAAwD,CASxD,AApYL,sGA8XM,4BAlZc,CAmZd,AA/XN,yGAkYM,yBAtZc,CAuZd,AAnYN,6BA8YE,iBAAgB,AAChB,0BArZwB,AAsZxB,yBAzZ4B,AA0Z5B,iBAAiB,AACjB,WA1ZmB,AA2ZnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAgFpB,AA1eF,qDA6ZG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAyD,AAUzD,6BAjciB,AAkcjB,0BAlciB,AAocjB,eAAgB,CAMhB,AAtbH,oEAsaI,4BAAyD,CAKzD,AA3aJ,iGAyaK,YAAa,CACb,AA1aL,gEAmbI,mBAAkB,AAClB,kBAAkB,CAClB,AArbJ,kDAybG,WAjckB,AAkclB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA7bH,kDAicG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA7coB,AA8cpB,iBAAiB,CACjB,AAxcH,8CA2cG,YAAY,CACZ,AA5cH,6CAgdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5doB,AA6dpB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AAzeH,oDA2dI,UAhemB,CAienB,AA5dJ,sDA+dI,UAAU,CACV,AAheJ,kEAoeK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAveL,wCA8eE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA5fF,6CAqfG,OAAM,AACN,UAAU,CACV,AAvfH,8CA0fG,gBAAgB,CAChB,AA3fH,6BAigBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAviBF,mDAghBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAtiBH,qEA6hBI,sBAAqB,AACrB,UAAU,CACV,AA/hBJ,mEAmiBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBArkBuB,CAu7BvB,AAtXD,kCAQE,wBAxkB4B,CAykB5B,AATF,0CAYE,sBAzkBsB,AA0kBtB,cAAe,CACf,AAdF,kCAiBE,wBA5kB6B,CA6kB7B,AAlBF,wCAqBE,yBA/kBkC,AAglBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BAhmBkB,AAimBlB,6BAjmBkB,AAmmBlB,oBAAoB,AACpB,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAloBiB,CAmoBjB,AApEH,wDAuEG,0BAtoBiB,CAuoBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BA/oBkB,AAgpBlB,4BAhpBkB,CAmqBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cAvqBW,CAkrBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BA3qBkB,AA4qBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA2LtB,AA3SF,iDAmHG,yBA3qBkB,AA4qBlB,aAAY,AAEZ,SAAU,CAMV,AA5HH,+GAyHI,WAAU,AACV,sBAAsB,CACtB,AA3HJ,yDA+HG,qBAtrBgB,CA6rBhB,AAtIH,+HAiII,WAAU,AACV,uBAAsB,AAEtB,UA3rBe,CA4rBf,AArIJ,6EA2II,YAAa,CACb,AA5IJ,oDAiJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAtKH,8EA4JI,SAAS,CAST,AArKJ,wGAgKK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AApKL,2DAyKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAnvBiB,AAovBjB,4BApvBiB,CAqvBjB,AAtLH,4DA0LG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAlwBe,AAmwBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA3PH,kEA2MI,eAAc,AACd,yBAA4B,CAC5B,AA7MJ,kGAgNI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAnOJ,wGAyNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA/xBa,CAgyBb,AAlOL,gGAsOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA1yBc,CAuzBd,AAzPJ,sGA+OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eArzBa,CAszBb,AAxPL,qEA8PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA90BqB,AA+0BrB,gBAAgB,AAChB,eAAe,CAmBf,AAlSH,2EAkRI,UAAU,CACV,AAnRJ,sHAuRK,eAAe,CACf,AAxRL,sOAgSI,YAAY,CACZ,AAjSJ,wDAqSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AA1SH,+BA+SE,sBAAqB,AACrB,6BAA4B,AAC5B,4BAh3BkB,AAi3BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CA4Df,AApXF,qCA2TG,eAAc,AACd,+BAA+B,CAC/B,AA7TH,wEAkUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BA14BkB,AA24BlB,eAAgB,CAChB,AAvUJ,uDA4UG,iBAAiB,CACjB,AA7UH,uDAgVG,iBAAiB,CACjB,AAjVH,uDAoVG,iBAAiB,CACjB,AArVH,uDAwVG,iBAAiB,CACjB,AAzVH,uDA4VG,kBAAkB,CAClB,AA7VH,uDAgWG,oBAAqB,CACrB,AAjWH,gDAqWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAj7BmB,AAk7BnB,qBAAqB,CACrB,AA9WH,oCAiXG,iBAAgB,AAChB,UAAU,CACV,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBA97BuB,AA+7BvB,sBA77BmB,AA87BnB,oCAAuC,AAEvC,eAh9Ba,AAk9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA8Cd,AA5DD,qCAiBE,kBAAiB,AACjB,sBAAqB,AAErB,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAiCjB,AAvDF,kEAyBG,UAAW,CACX,AA1BH,8EA6BG,eAAe,AACf,kBAt9B2B,CAu9B3B,AA/BH,iEAkCG,kBAAkB,CAoBlB,AAtDH,uEAqCI,qBAAqB,AACrB,kBAAkB,AAElB,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,UAAU,AAEV,WAAW,AAEX,yBAAyB,AACzB,mBAAmB,AACnB,kBAx+BgB,AAy+BhB,mBAAmB,AAEnB,uBAAwB,CACxB,AArDJ,0CA0DE,yBAj/BkB,CAk/BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA9/BuB,AA+/BvB,sBA7/BmB,AA+/BnB,eA/gCa,AAihCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA4Cd,AA3DD,6DAkBE,YAAW,AAEX,UAxgCgB,CA6hChB,AAzCF,oEAuBG,WA9gCqB,AA+gCrB,kBAtgCkB,CA2gClB,AA7BH,4EA2BI,oCAlhCoB,CAmhCpB,AA5BJ,qEAgCG,yBA9gCkB,CA+gClB,AAjCH,mEAoCG,eAAc,AAEd,WA7hCqB,AA8hCrB,kBArhCkB,CAshClB,AAxCH,+DA4CE,YAAW,AAEX,WAliCgB,AAmiChB,iBAAkB,CAClB,AAhDF,8DAmDE,6BAxiCkB,AA0iClB,YAAW,AACX,gBAAe,AAEf,WA5iCgB,AA6iChB,eAAgB,CAChB,AAMF,yBACC,aAAc,CACd,AAED,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BA3kCoB,AA4kCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BA7lCiB,CAqnCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BA9mCgB,CA+mChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAOH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAwKzB,AAzKD,mDAIE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BArqCkB,AAsqClB,4BAtqCkB,CAuqClB,AAjBF,oDAqBE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA7qCkB,AA8qClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CAsEf,AApGF,0DAiCG,eAAc,AACd,+BAA+B,CAC/B,AAnCH,6FAwCI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAvsCkB,AAwsClB,eAAgB,CAChB,AA7CJ,+EAmDI,2BAA4B,CAC5B,AApDJ,+EAyDI,2BAA4B,CAC5B,AA1DJ,+EA+DI,2BAA4B,CAC5B,AAhEJ,+EAqEI,2BAA4B,CAC5B,AAtEJ,+EA2EI,4BAA6B,CAC7B,AA5EJ,4EAgFG,oBAAqB,CACrB,AAjFH,qEAqFG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAxvCmB,AAyvCnB,qBAAqB,CACrB,AA9FH,yDAiGG,iBAAgB,AAChB,UAAU,CACV,AAnGH,oDAwGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAvwCgB,AAwwChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAxKF,0DAyHG,eAAc,AACd,yBAA4B,CAC5B,AA3HH,0FA8HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjJH,gGAuII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eApyCc,CAqyCd,AAhJJ,wFAoJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA/yCe,CA4zCf,AAvKH,8FA6JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA1zCc,CA2zCd","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.9.3 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\toutline:none;\r\n\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\t\tposition:relative;\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-menu-item-submenu{\r\n\t\t\tpadding-right:25px;\r\n\r\n\t\t\t&::after {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tposition: absolute;\r\n\r\n\t\t\t\ttop: calc(5px + .4em);\r\n\t\t\t\tright: 10px;\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tcontent: '';\r\n\r\n\t\t\t\tborder-width: 1px 1px 0 0;\r\n\t\t\t\tborder-style: solid;\r\n\t\t\t\tborder-color: $rowBorderColor;\r\n\t\t\t\tvertical-align: top;\r\n\r\n\t\t\t\ttransform: rotate(45deg);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/app/vendors/tabulator/css/tabulator_midnight.css b/app/vendors/tabulator/css/tabulator_midnight.css
new file mode 100644 (file)
index 0000000..7003843
--- /dev/null
@@ -0,0 +1,1115 @@
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+.tabulator {
+  position: relative;
+  border: 1px solid #333;
+  background-color: #222;
+  overflow: hidden;
+  font-size: 14px;
+  text-align: left;
+  -ms-transform: translatez(0);
+  transform: translatez(0);
+}
+
+.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
+  min-width: 100%;
+}
+
+.tabulator[tabulator-layout="fitDataTable"] {
+  display: inline-block;
+}
+
+.tabulator.tabulator-block-select {
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator .tabulator-header {
+  position: relative;
+  box-sizing: border-box;
+  width: 100%;
+  border-bottom: 1px solid #999;
+  background-color: #333;
+  color: #fff;
+  font-weight: bold;
+  white-space: nowrap;
+  overflow: hidden;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-header.tabulator-header-hidden {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  background-color: #333;
+  text-align: left;
+  vertical-align: bottom;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-moving {
+  position: absolute;
+  border: 1px solid #999;
+  background: #1a1a1a;
+  pointer-events: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
+  box-sizing: border-box;
+  position: relative;
+  padding: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button {
+  padding: 0 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover {
+  cursor: pointer;
+  opacity: .6;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {
+  position: relative;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
+  box-sizing: border-box;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  vertical-align: bottom;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
+  box-sizing: border-box;
+  width: 100%;
+  border: 1px solid #999;
+  padding: 1px;
+  background: #444;
+  color: #fff;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button + .tabulator-title-editor {
+  width: calc(100% - 22px);
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  width: 0;
+  height: 0;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  position: relative;
+  display: -ms-flexbox;
+  display: flex;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+  margin-right: -1px;
+}
+
+.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
+  position: relative;
+  box-sizing: border-box;
+  margin-top: 2px;
+  width: 100%;
+  text-align: center;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
+  height: auto !important;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
+  margin-top: 3px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input, .tabulator .tabulator-header .tabulator-col .tabulator-header-filter select {
+  border: 1px solid #999;
+  background: #444;
+  color: #fff;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {
+  width: 0;
+  height: 0;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 25px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
+  cursor: pointer;
+  background-color: #1a1a1a;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter {
+  color: #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter {
+  color: #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter {
+  color: #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-bottom: none;
+  border-top: 6px solid #666;
+  color: #666;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {
+  -ms-writing-mode: tb-rl;
+      writing-mode: vertical-rl;
+  text-orientation: mixed;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {
+  -ms-transform: rotate(180deg);
+      transform: rotate(180deg);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-top: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {
+  padding-right: 0;
+  padding-bottom: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {
+  -ms-flex-pack: center;
+      justify-content: center;
+  left: 0;
+  right: 0;
+  top: 4px;
+  bottom: auto;
+}
+
+.tabulator .tabulator-header .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  z-index: 10;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #888;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #888;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder {
+  box-sizing: border-box;
+  min-width: 600%;
+  background: #1a1a1a !important;
+  border-top: 1px solid #888;
+  border-bottom: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
+  background: #1a1a1a !important;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder {
+  min-width: 600%;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {
+  display: none;
+}
+
+.tabulator .tabulator-tableHolder {
+  position: relative;
+  width: 100%;
+  white-space: nowrap;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.tabulator .tabulator-tableHolder:focus {
+  outline: none;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder {
+  box-sizing: border-box;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] {
+  min-height: 100%;
+  min-width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder span {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px;
+  color: #eee;
+  font-weight: bold;
+  font-size: 20px;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table {
+  position: relative;
+  display: inline-block;
+  background-color: #666;
+  white-space: nowrap;
+  overflow: visible;
+  color: #fff;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
+  font-weight: bold;
+  background: #373737 !important;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
+  border-bottom: 2px solid #888;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
+  border-top: 2px solid #888;
+}
+
+.tabulator .tabulator-col-resize-handle {
+  position: absolute;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  width: 5px;
+}
+
+.tabulator .tabulator-col-resize-handle.prev {
+  left: 0;
+  right: auto;
+}
+
+.tabulator .tabulator-col-resize-handle:hover {
+  cursor: ew-resize;
+}
+
+.tabulator .tabulator-footer {
+  padding: 5px 10px;
+  border-top: 1px solid #999;
+  background-color: #333;
+  text-align: right;
+  color: #333;
+  font-weight: bold;
+  white-space: nowrap;
+  -ms-user-select: none;
+      user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder {
+  box-sizing: border-box;
+  width: calc(100% + 20px);
+  margin: -5px -10px 5px -10px;
+  text-align: left;
+  background: #262626 !important;
+  border-bottom: 1px solid #888;
+  border-top: 1px solid #888;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
+  background: #262626 !important;
+  color: #fff;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
+  margin-bottom: -5px;
+  border-bottom: none;
+}
+
+.tabulator .tabulator-footer .tabulator-paginator label {
+  color: #fff;
+}
+
+.tabulator .tabulator-footer .tabulator-page-size {
+  display: inline-block;
+  margin: 0 5px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+}
+
+.tabulator .tabulator-footer .tabulator-pages {
+  margin: 0 7px;
+}
+
+.tabulator .tabulator-footer .tabulator-page {
+  display: inline-block;
+  margin: 0 2px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+  background: rgba(255, 255, 255, 0.2);
+  color: #333;
+  font-family: inherit;
+  font-weight: inherit;
+  font-size: inherit;
+}
+
+.tabulator .tabulator-footer .tabulator-page.active {
+  color: #fff;
+}
+
+.tabulator .tabulator-footer .tabulator-page:disabled {
+  opacity: .5;
+}
+
+.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+  color: #fff;
+}
+
+.tabulator .tabulator-loader {
+  position: absolute;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  height: 100%;
+  width: 100%;
+  background: rgba(0, 0, 0, 0.4);
+  text-align: center;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px 20px;
+  border-radius: 10px;
+  background: #fff;
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {
+  border: 4px solid #333;
+  color: #000;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {
+  border: 4px solid #D00;
+  color: #590000;
+}
+
+.tabulator-row {
+  position: relative;
+  box-sizing: border-box;
+  min-height: 22px;
+  background-color: #666;
+}
+
+.tabulator-row:nth-child(even) {
+  background-color: #444;
+}
+
+.tabulator-row.tabulator-selectable:hover {
+  background-color: #999;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-selected {
+  background-color: #000;
+}
+
+.tabulator-row.tabulator-selected:hover {
+  background-color: #888;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-moving {
+  position: absolute;
+  border-top: 1px solid #888;
+  border-bottom: 1px solid #888;
+  pointer-events: none !important;
+  z-index: 15;
+}
+
+.tabulator-row .tabulator-row-resize-handle {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 5px;
+}
+
+.tabulator-row .tabulator-row-resize-handle.prev {
+  top: 0;
+  bottom: auto;
+}
+
+.tabulator-row .tabulator-row-resize-handle:hover {
+  cursor: ns-resize;
+}
+
+.tabulator-row .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  background-color: inherit;
+  z-index: 10;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #888;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #888;
+}
+
+.tabulator-row .tabulator-responsive-collapse {
+  box-sizing: border-box;
+  padding: 5px;
+  border-top: 1px solid #888;
+  border-bottom: 1px solid #888;
+}
+
+.tabulator-row .tabulator-responsive-collapse:empty {
+  display: none;
+}
+
+.tabulator-row .tabulator-responsive-collapse table {
+  font-size: 14px;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td {
+  position: relative;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {
+  padding-right: 10px;
+}
+
+.tabulator-row .tabulator-cell {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  padding: 4px;
+  border-right: 1px solid #888;
+  vertical-align: middle;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing {
+  border: 1px solid #999;
+  outline: none;
+  padding: 0;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {
+  border: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail {
+  border: 1px solid #dd0000;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {
+  border: 1px;
+  background: transparent;
+  color: #dd0000;
+}
+
+.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
+  width: 80%;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
+  width: 100%;
+  height: 3px;
+  margin-top: 2px;
+  background: #666;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #888;
+  border-bottom: 2px solid #888;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #fff;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #fff;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #fff;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #fff;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+  height: 15px;
+  width: 15px;
+  border-radius: 20px;
+  background: #fff;
+  color: #666;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {
+  opacity: .7;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {
+  display: initial;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-traffic-light {
+  display: inline-block;
+  height: 14px;
+  width: 14px;
+  border-radius: 14px;
+}
+
+.tabulator-row.tabulator-group {
+  box-sizing: border-box;
+  border-bottom: 1px solid #999;
+  border-right: 1px solid #888;
+  border-top: 1px solid #999;
+  padding: 5px;
+  padding-left: 10px;
+  background: #ccc;
+  font-weight: bold;
+  color: #333;
+  min-width: 100%;
+}
+
+.tabulator-row.tabulator-group:hover {
+  cursor: pointer;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #666;
+  border-bottom: 0;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-1 {
+  padding-left: 30px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-2 {
+  padding-left: 50px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-3 {
+  padding-left: 70px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-4 {
+  padding-left: 90px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-5 {
+  padding-left: 110px;
+}
+
+.tabulator-row.tabulator-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-row.tabulator-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #666;
+  vertical-align: middle;
+}
+
+.tabulator-row.tabulator-group span {
+  margin-left: 10px;
+  color: #666;
+}
+
+.tabulator-menu {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  background: #666;
+  border: 1px solid #888;
+  box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-menu .tabulator-menu-item {
+  position: relative;
+  box-sizing: border-box;
+  padding: 5px 10px;
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {
+  opacity: .5;
+}
+
+.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {
+  cursor: pointer;
+  background: #444;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {
+  padding-right: 25px;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {
+  display: inline-block;
+  position: absolute;
+  top: calc(5px + .4em);
+  right: 10px;
+  height: 7px;
+  width: 7px;
+  content: '';
+  border-width: 1px 1px 0 0;
+  border-style: solid;
+  border-color: #888;
+  vertical-align: top;
+  -ms-transform: rotate(45deg);
+      transform: rotate(45deg);
+}
+
+.tabulator-menu .tabulator-menu-separator {
+  border-top: 1px solid #888;
+}
+
+.tabulator-edit-select-list {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  max-height: 200px;
+  background: #fff;
+  border: 1px solid #888;
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item {
+  padding: 4px;
+  color: #666;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active {
+  color: #999;
+  background: #444;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {
+  outline: 1px solid rgba(153, 153, 153, 0.5);
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.focused {
+  outline: 1px solid #444;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {
+  cursor: pointer;
+  color: #999;
+  background: #666;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-notice {
+  padding: 4px;
+  color: #fff;
+  text-align: center;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-group {
+  border-bottom: 1px solid #888;
+  padding: 4px;
+  padding-top: 6px;
+  color: #fff;
+  font-weight: bold;
+}
+
+.tabulator.tabulator-ltr {
+  direction: ltr;
+}
+
+.tabulator.tabulator-rtl {
+  text-align: initial;
+  direction: rtl;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col {
+  text-align: initial;
+  border-left: 1px solid #aaa;
+  border-right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  margin-right: initial;
+  margin-left: -1px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-left: 25px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
+  left: 8px;
+  right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell {
+  border-right: initial;
+  border-left: 1px solid #888;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  margin-right: initial;
+  margin-left: 5px;
+  border-bottom-left-radius: initial;
+  border-bottom-right-radius: 1px;
+  border-left: initial;
+  border-right: 2px solid #888;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  margin-right: initial;
+  margin-left: 5px;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle {
+  position: absolute;
+  left: 0;
+  right: auto;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev {
+  right: 0;
+  left: auto;
+}
+
+.tabulator-print-fullscreen {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 10000;
+}
+
+body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {
+  display: none !important;
+}
+
+.tabulator-print-table {
+  border-collapse: collapse;
+}
+
+.tabulator-print-table .tabulator-print-table-group {
+  box-sizing: border-box;
+  border-bottom: 1px solid #999;
+  border-right: 1px solid #888;
+  border-top: 1px solid #999;
+  padding: 5px;
+  padding-left: 10px;
+  background: #ccc;
+  font-weight: bold;
+  color: #333;
+  min-width: 100%;
+}
+
+.tabulator-print-table .tabulator-print-table-group:hover {
+  cursor: pointer;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #666;
+  border-bottom: 0;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {
+  padding-left: 30px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {
+  padding-left: 50px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {
+  padding-left: 70px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {
+  padding-left: 90px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {
+  padding-left: 110px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #666;
+  vertical-align: middle;
+}
+
+.tabulator-print-table .tabulator-print-table-group span {
+  margin-left: 10px;
+  color: #666;
+}
+
+.tabulator-print-table .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #888;
+  border-bottom: 2px solid #888;
+}
+
+.tabulator-print-table .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #fff;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-print-table .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #fff;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #fff;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #fff;
+}
diff --git a/app/vendors/tabulator/css/tabulator_midnight.min.css b/app/vendors/tabulator/css/tabulator_midnight.min.css
new file mode 100644 (file)
index 0000000..7be2ca5
--- /dev/null
@@ -0,0 +1,3 @@
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+.tabulator{position:relative;border:1px solid #333;background-color:#222;overflow:hidden;font-size:14px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:1px solid #999;background-color:#333;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#333;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#1a1a1a;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#444;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:absolute;top:0;bottom:0;right:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input,.tabulator .tabulator-header .tabulator-col .tabulator-header-filter select{border:1px solid #999;background:#444;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#1a1a1a}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter{color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter{color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{-ms-flex-pack:center;justify-content:center;left:0;right:0;top:4px;bottom:auto}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #888}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #888}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#1a1a1a!important;border-top:1px solid #888;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#1a1a1a!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#eee;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#666;white-space:nowrap;overflow:visible;color:#fff}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#373737!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #888}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #888}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#333;text-align:right;color:#333;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#262626!important;border-bottom:1px solid #888;border-top:1px solid #888;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#262626!important;color:#fff}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:hsla(0,0%,100%,.2);color:#333;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#fff}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#666}.tabulator-row:nth-child(2n){background-color:#444}.tabulator-row.tabulator-selectable:hover{background-color:#999;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#000}.tabulator-row.tabulator-selected:hover{background-color:#888;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #888;border-bottom:1px solid #888;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #888}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #888}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #888;border-bottom:1px solid #888}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #888;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #999;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #888;border-bottom:2px solid #888}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #fff;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#fff}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#fff}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#fff;color:#666;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #888;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;color:#333;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#666;border:1px solid #888;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{position:relative;box-sizing:border-box;padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#444}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{display:inline-block;position:absolute;top:calc(5px + .4em);right:10px;height:7px;width:7px;content:"";border-width:1px 1px 0 0;border-style:solid;border-color:#888;vertical-align:top;transform:rotate(45deg)}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #888}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #888;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#666}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#999;background:#444}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,60%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #444}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#999;background:#666}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#fff;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #888;padding:4px;padding-top:6px;color:#fff;font-weight:700}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{text-align:initial;direction:rtl}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{text-align:initial;border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-right:0;margin-left:-1px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:0;padding-left:25px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-right:initial;border-left:1px solid #888}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{margin-right:0;margin-left:5px;border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #888}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-right:0;margin-left:5px}.tabulator.tabulator-rtl .tabulator-col-resize-handle{position:absolute;left:0;right:auto}.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev{right:0;left:auto}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #888;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;color:#333;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#666}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #888;border-bottom:2px solid #888}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #fff;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#fff}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#fff}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#fff}
+/*# sourceMappingURL=tabulator_midnight.min.css.map */
diff --git a/app/vendors/tabulator/css/tabulator_midnight.min.css.map b/app/vendors/tabulator/css/tabulator_midnight.min.css.map
new file mode 100644 (file)
index 0000000..32029bf
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["tabulator_midnight.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAClB,sBAtCgB,AAuChB,sBAxCqB,AAyCrB,gBAAe,AACf,eAxCa,AAyCb,gBAAgB,AAMhB,uBAAwB,CAsiBxB,AAljBD,iFAiBI,cAAc,CACd,AAlBJ,0CAuBE,oBAAqB,CACrB,AAxBF,kCA2BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA5BF,6BAgCE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAlEwB,AAmExB,sBAtEyB,AAuEzB,WAtEmB,AAuEnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CA8RpB,AA9UF,qDAmDG,YAAY,CACZ,AApDH,4CAwDG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAzFoB,AA0FpB,sBA5FwB,AA6FxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CA+NhB,AA9RH,6DAkEI,kBAAkB,AAClB,sBAhGsB,AAiGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AAtEJ,mEA0EI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAiEX,AA7IJ,iGAgFK,aAAc,CAMd,AAtFL,uGAmFM,eAAe,AACf,UAAW,CACX,AArFN,+FA0FK,iBAAkB,CAClB,AA3FL,wFA+FK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAmBrB,AAxHL,gHAyGM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,gBAAgB,AAChB,UAAW,CACX,AAlHN,8IAqHM,uBAAuB,CACvB,AAtHN,yFA4HK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AA3IL,0GAqIM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAjKkB,CAkKlB,AA1IN,0FAoJK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BArLkB,AAsLlB,gBAAgB,AAEhB,iBAAiB,CACjB,AA3JL,0FAiKK,YAAa,CACb,AAlKL,qEAuKI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAuBlB,AAlMJ,8EA+KK,qBAAsB,CACtB,AAhLL,yEAmLK,cAAe,CACf,AApLL,uJAuLK,sBAAqB,AACrB,gBAAgB,AAChB,UAAW,CACX,AA1LL,sFA8LM,QAAS,AACT,QAAS,CACT,AAhMN,oFAuMK,kBAAkB,CAClB,AAxML,qEA2MK,eAAc,AACd,wBAAoD,CACpD,AA7ML,4HAkNM,UA1OkB,CAgPlB,AAxNN,6IAqNO,gBAAgB,AAChB,4BA9OiB,CA+OjB,AAvNP,2HA6NM,UAtPgB,CA6PhB,AApON,4IAgOO,gBAAgB,AAChB,4BA1Pe,CA4Pf,AAnOP,4HAyOM,UAlQgB,CAyQhB,AAhPN,6IA4OO,mBAAmB,AACnB,0BAtQe,AAuQf,UAvQe,CAwQf,AA/OP,+GAuPM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AA7PN,oHAkQM,wBAAyB,CACzB,AAnQN,2GAwQM,gBAAe,AACf,gBAAgB,CAChB,AA1QN,uIA8QO,gBAAe,AACf,mBAAmB,CACnB,AAhRP,4GAqRM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AA1RN,+CAiSG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AA/SH,qEAySI,2BA5TgB,CA6ThB,AA1SJ,sEA6SI,0BAhUgB,CAiUhB,AA9SJ,qDAmTG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BAnViB,AAoVjB,6BA/VoB,AAiWpB,eAAgB,CAChB,AApUH,oEAyTI,4BAAyD,CAKzD,AA9TJ,iGA4TK,YAAa,CACb,AA7TL,2DAuUG,cAAc,CAKd,AA5UH,iEA0UI,YAAa,CACb,AA3UJ,kCAkVE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAuDjC,AA7YF,wCAyVG,YAAa,CACb,AA1VH,yDA8VG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AAnXH,wFAmWI,gBAAe,AACf,cAAc,CACd,AArWJ,8DA0WI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AAlXJ,mDAuXG,kBAAiB,AACjB,qBAAoB,AACpB,sBA9YqB,AA+YrB,mBAAmB,AACnB,iBAAgB,AAChB,UA9Ye,CA8Zf,AA5YH,kFAgYK,gBAAiB,AACjB,4BAAwD,CASxD,AA1YL,sGAoYM,4BAvZc,CAwZd,AArYN,yGAwYM,yBA3Zc,CA4Zd,AAzYN,wCAiZE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA/ZF,6CAwZG,OAAM,AACN,UAAU,CACV,AA1ZH,8CA6ZG,gBAAgB,CAChB,AA9ZH,6BAoaE,iBAAgB,AAChB,0BA1awB,AA2axB,sBA9ayB,AA+azB,iBAAgB,AAChB,WA/amB,AAgbnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAuFpB,AAvgBF,qDAmbG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAwD,AAWxD,6BAvdiB,AAwdjB,0BAxdiB,AA0djB,eAAgB,CAMhB,AA7cH,oEA4bI,6BAAwD,AACxD,UA5diB,CAiejB,AAlcJ,iGAgcK,YAAa,CACb,AAjcL,gEA0cI,mBAAkB,AAClB,kBAAkB,CAClB,AA5cJ,wDAkdI,UAAU,CACV,AAndJ,kDAwdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBAneoB,AAoepB,iBAAiB,CACjB,AA/dH,8CAmeG,YAAY,CACZ,AApeH,6CAweG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBAnfoB,AAofpB,kBAAiB,AAEjB,8BAA+B,AAE/B,WAzfkB,AA0flB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAtgBH,oDAwfI,UA5fmB,CA6fnB,AAzfJ,sDA4fI,UAAU,CACV,AA7fJ,kEAigBK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AApgBL,6BA2gBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAjjBF,mDA0hBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAhjBH,qEAuiBI,sBAAqB,AACrB,UAAU,CACV,AAziBJ,mEA6iBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AAEtB,gBAA0C,AAC1C,qBA/kBuB,CA67BvB,AAnXD,6BAQE,qBAjlByB,CAklBzB,AATF,0CAYE,sBAllBsB,AAmlBtB,cAAe,CACf,AAdF,kCAiBE,qBArlB0B,CAslB1B,AAlBF,wCAqBE,sBAxlB+B,AAylB/B,cAAe,CACf,AAvBF,gCA0BE,kBAAkB,AAElB,0BApmBkB,AAqmBlB,6BArmBkB,AAumBlB,8BAA+B,AAC/B,UAAU,CACV,AAjCF,4CAqCE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAnDF,iDA4CG,MAAK,AACL,WAAW,CACX,AA9CH,kDAiDG,gBAAgB,CAChB,AAlDH,iCAsDE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AApEF,uDA8DG,2BAtoBiB,CAuoBjB,AA/DH,wDAkEG,0BA1oBiB,CA2oBjB,AAnEH,8CAuEE,sBAAqB,AAErB,YAAW,AAEX,0BAnpBkB,AAopBlB,4BAppBkB,CAuqBlB,AA/FF,oDA+EG,YAAY,CACZ,AAhFH,oDAmFG,cA3qBW,CAsrBX,AA9FH,0DAuFK,iBAAkB,CAKlB,AA5FL,wEA0FM,kBAAkB,CAClB,AA3FN,+BAoGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAhrBkB,AAirBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA4LtB,AAxSF,iDAgHG,sBAjrBe,AAkrBf,aAAY,AAEZ,SAAU,CAMV,AAzHH,+GAsHI,WAAU,AACV,sBAAsB,CACtB,AAxHJ,yDA4HG,qBA5rBgB,CAmsBhB,AAnIH,+HA8HI,WAAU,AACV,uBAAsB,AAEtB,UAjsBe,CAksBf,AAlIJ,6EAwII,YAAa,CACb,AAzIJ,oDA+IG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAnKH,8EAyJI,SAAS,CAST,AAlKJ,wGA6JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AAjKL,2DAsKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAzvBiB,AA0vBjB,4BA1vBiB,CA2vBjB,AAnLH,4DAuLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAxwBe,AAywBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAxPH,kEAwMI,eAAc,AACd,yBAA4B,CAC5B,AA1MJ,kGA6MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAhOJ,wGAsNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAryBa,CAsyBb,AA/NL,gGAmOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAhzBc,CA6zBd,AAtPJ,sGA4OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3zBa,CA4zBb,AArPL,qEA2PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WAp1BqB,AAq1BrB,gBAAgB,AAChB,eAAe,CAmBf,AA/RH,2EA+QI,UAAU,CACV,AAhRJ,sHAoRK,eAAe,CACf,AArRL,sOA6RI,YAAY,CACZ,AA9RJ,wDAkSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AAvSH,+BA8SE,sBAAqB,AACrB,6BAA4B,AAC5B,4BAx3BkB,AAy3BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAChB,WAAU,AAEV,cAAe,CA0Df,AAlXF,qCA2TG,eAAc,AACd,+BAA+B,CAC/B,AA7TH,wEAiUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAl5BkB,AAm5BlB,eAAgB,CAChB,AAtUJ,uDA0UG,iBAAiB,CACjB,AA3UH,uDA8UG,iBAAiB,CACjB,AA/UH,uDAkVG,iBAAiB,CACjB,AAnVH,uDAsVG,iBAAiB,CACjB,AAvVH,uDA0VG,kBAAkB,CAClB,AA3VH,uDA8VG,oBAAqB,CACrB,AA/VH,gDAmWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAx7BmB,AAy7BnB,qBAAqB,CACrB,AA5WH,oCA+WG,iBAAgB,AAChB,UAAU,CACV,AAIH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBAp8BuB,AAq8BvB,sBAn8BmB,AAo8BnB,oCAAuC,AAEvC,eAt9Ba,AAw9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA8Cd,AA5DD,qCAiBE,kBAAiB,AACjB,sBAAqB,AAErB,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAiCjB,AAvDF,kEAyBG,UAAW,CACX,AA1BH,8EA6BG,eAAe,AACf,eA59BwB,CA69BxB,AA/BH,iEAkCG,kBAAkB,CAoBlB,AAtDH,uEAqCI,qBAAqB,AACrB,kBAAkB,AAElB,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,UAAU,AAEV,WAAW,AAEX,yBAAyB,AACzB,mBAAmB,AACnB,kBA9+BgB,AA++BhB,mBAAmB,AAEnB,uBAAwB,CACxB,AArDJ,0CA0DE,yBAv/BkB,CAw/BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBAjgCiB,AAkgCjB,sBAngCmB,AAqgCnB,eArhCa,AAuhCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UAjhCsB,CAuiCtB,AA1CF,oEAuBG,WA3gCe,AA4gCf,eAphCwB,CAyhCxB,AA7BH,4EA2BI,mCA/gCc,CAghCd,AA5BJ,qEAgCG,sBA5hCwB,CA6hCxB,AAjCH,mEAqCG,eAAc,AAEd,WA3hCe,AA4hCf,eAriCqB,CAsiCrB,AAzCH,+DA6CE,YAAW,AAEX,WAziCgB,AA0iChB,iBAAkB,CAClB,AAjDF,8DAoDE,6BA/iCkB,AAijClB,YAAW,AACX,gBAAe,AAEf,WAnjCgB,AAojChB,eAAgB,CAChB,AAKF,yBACC,aAAc,CACd,AAGD,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BAllCoB,AAmlCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BApmCiB,CA4nCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BArnCgB,CAsnChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAMH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAwKzB,AAzKD,oDAME,sBAAqB,AACrB,6BAA4B,AAC5B,4BApqCkB,AAqqClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAChB,WAAU,AAEV,cAAe,CAoEf,AApFF,0DAmBG,eAAc,AACd,+BAA+B,CAC/B,AArBH,6FAyBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BA9rCkB,AA+rClB,eAAgB,CAChB,AA9BJ,+EAmCI,2BAA4B,CAC5B,AApCJ,+EAyCI,2BAA4B,CAC5B,AA1CJ,+EA+CI,2BAA4B,CAC5B,AAhDJ,+EAqDI,2BAA4B,CAC5B,AAtDJ,+EA2DI,4BAA6B,CAC7B,AA5DJ,4EAgEG,oBAAqB,CACrB,AAjEH,qEAqEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA9uCmB,AA+uCnB,qBAAqB,CACrB,AA9EH,yDAiFG,iBAAgB,AAChB,UAAU,CACV,AAnFH,mDAuFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA9vCkB,AA+vClB,4BA/vCkB,CAgwClB,AApGF,oDAwGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA7wCgB,AA8wChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAxKF,0DAyHG,eAAc,AACd,yBAA4B,CAC5B,AA3HH,0FA8HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjJH,gGAuII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA1yCc,CA2yCd,AAhJJ,wFAoJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eArzCe,CAk0Cf,AAvKH,8FA6JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAh0Cc,CAi0Cd","file":"tabulator_midnight.min.css","sourcesContent":["/* Tabulator v4.9.3 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #222 !default; //background color of tabulator\r\n$borderColor:#333 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#333 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#666 !default; //table row background color\r\n$rowAltBackgroundColor:#444 !default; //table row background color\r\n$rowBorderColor:#888 !default; //table border color\r\n$rowTextColor:#fff !default; //table text color\r\n$rowHoverBackground:#999 !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #000 !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #888 !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#999 !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#333 !default; //border to tabulator\r\n$footerTextColor:#333 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#fff !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tborder: 1px solid $borderColor;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #444;\r\n\t\t\t\t\t\tcolor: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput, select{\r\n\t\t\t\t\tborder:1px solid #999;\r\n\t\t\t\t\tbackground: #444;\r\n\t\t\t\t\tcolor: #fff;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:darken($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#eee;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\t\t\t\tcolor:$headerTextColor;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tlabel{\r\n\t\t\t\tcolor:#fff;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\t&:nth-child(even){\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\toutline:none;\r\n\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\t\tcolor:#333;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#666;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\t\tposition:relative;\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-menu-item-submenu{\r\n\t\t\tpadding-right:25px;\r\n\r\n\t\t\t&::after {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tposition: absolute;\r\n\r\n\t\t\t\ttop: calc(5px + .4em);\r\n\t\t\t\tright: 10px;\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tcontent: '';\r\n\r\n\t\t\t\tborder-width: 1px 1px 0 0;\r\n\t\t\t\tborder-style: solid;\r\n\t\t\t\tborder-color: $rowBorderColor;\r\n\t\t\t\tvertical-align: top;\r\n\r\n\t\t\t\ttransform: rotate(45deg);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowTextColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowBackgroundColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$editBoxColor;\r\n\t\t\tbackground:$rowAltBackgroundColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($editBoxColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$editBoxColor;\r\n\t\t\tbackground:$rowBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\t\tcolor:#333;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#666;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/app/vendors/tabulator/css/tabulator_modern.css b/app/vendors/tabulator/css/tabulator_modern.css
new file mode 100644 (file)
index 0000000..f98af62
--- /dev/null
@@ -0,0 +1,1148 @@
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+.tabulator {
+  position: relative;
+  border: 1px solid #fff;
+  background-color: #fff;
+  overflow: hidden;
+  font-size: 16px;
+  text-align: left;
+  -ms-transform: translatez(0);
+  transform: translatez(0);
+}
+
+.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
+  min-width: 100%;
+}
+
+.tabulator[tabulator-layout="fitDataTable"] {
+  display: inline-block;
+}
+
+.tabulator.tabulator-block-select {
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator .tabulator-header {
+  position: relative;
+  box-sizing: border-box;
+  width: 100%;
+  border-bottom: 3px solid #3759D7;
+  margin-bottom: 4px;
+  background-color: #fff;
+  color: #3759D7;
+  font-weight: bold;
+  white-space: nowrap;
+  overflow: hidden;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+  padding-left: 10px;
+  font-size: 1.1em;
+}
+
+.tabulator .tabulator-header.tabulator-header-hidden {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  border-right: 2px solid #fff;
+  background-color: #fff;
+  text-align: left;
+  vertical-align: bottom;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-moving {
+  position: absolute;
+  border: 1px solid #3759D7;
+  background: #e6e6e6;
+  pointer-events: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
+  box-sizing: border-box;
+  position: relative;
+  padding: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button {
+  padding: 0 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover {
+  cursor: pointer;
+  opacity: .6;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {
+  position: relative;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
+  box-sizing: border-box;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  vertical-align: bottom;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
+  box-sizing: border-box;
+  width: 100%;
+  border: 1px solid #3759D7;
+  padding: 1px;
+  background: #fff;
+  font-size: 1em;
+  color: #3759D7;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button + .tabulator-title-editor {
+  width: calc(100% - 22px);
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  width: 0;
+  height: 0;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #b7c3f1;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  position: relative;
+  display: -ms-flexbox;
+  display: flex;
+  border-top: 2px solid #3759D7;
+  overflow: hidden;
+  margin-right: -1px;
+}
+
+.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
+  position: relative;
+  box-sizing: border-box;
+  margin-top: 2px;
+  width: 100%;
+  text-align: center;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
+  height: auto !important;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
+  margin-top: 3px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {
+  width: 0;
+  height: 0;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 25px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
+  cursor: pointer;
+  background-color: #e6e6e6;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter {
+  color: #b7c3f1;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #b7c3f1;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter {
+  color: #3759D7;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #3759D7;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter {
+  color: #3759D7;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-bottom: none;
+  border-top: 6px solid #3759D7;
+  color: #3759D7;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {
+  -ms-writing-mode: tb-rl;
+      writing-mode: vertical-rl;
+  text-orientation: mixed;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {
+  -ms-transform: rotate(180deg);
+      transform: rotate(180deg);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-top: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {
+  padding-right: 0;
+  padding-bottom: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {
+  -ms-flex-pack: center;
+      justify-content: center;
+  left: 0;
+  right: 0;
+  top: 4px;
+  bottom: auto;
+}
+
+.tabulator .tabulator-header .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  z-index: 10;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
+  padding-left: 10px;
+  border-right: 2px solid #fff;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #fff;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder {
+  box-sizing: border-box;
+  min-width: 600%;
+  border-top: 2px solid #3759D7 !important;
+  background: white !important;
+  border-top: 1px solid #fff;
+  border-bottom: 1px solid #fff;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
+  padding-left: 0 !important;
+  background: white !important;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell {
+  background: none;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder {
+  min-width: 600%;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {
+  display: none;
+}
+
+.tabulator .tabulator-tableHolder {
+  position: relative;
+  width: 100%;
+  white-space: nowrap;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.tabulator .tabulator-tableHolder:focus {
+  outline: none;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder {
+  box-sizing: border-box;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] {
+  min-height: 100%;
+  min-width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder span {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px;
+  color: #3759D7;
+  font-weight: bold;
+  font-size: 20px;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table {
+  position: relative;
+  display: inline-block;
+  background-color: #f3f3f3;
+  white-space: nowrap;
+  overflow: visible;
+  color: #333;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
+  font-weight: bold;
+  background: #f2f2f2 !important;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
+  border-bottom: 2px solid #3759D7;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
+  border-top: 2px solid #3759D7;
+}
+
+.tabulator .tabulator-col-resize-handle {
+  position: absolute;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  width: 5px;
+}
+
+.tabulator .tabulator-col-resize-handle.prev {
+  left: 0;
+  right: auto;
+}
+
+.tabulator .tabulator-col-resize-handle:hover {
+  cursor: ew-resize;
+}
+
+.tabulator .tabulator-footer {
+  padding: 5px 10px;
+  border-top: 1px solid #999;
+  background-color: #fff;
+  text-align: right;
+  color: #3759D7;
+  font-weight: bold;
+  white-space: nowrap;
+  -ms-user-select: none;
+      user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder {
+  box-sizing: border-box;
+  width: calc(100% + 20px);
+  margin: -5px -10px 5px -10px;
+  text-align: left;
+  background: white !important;
+  border-top: 3px solid #3759D7 !important;
+  border-bottom: 2px solid #3759D7 !important;
+  border-bottom: 1px solid #fff;
+  border-top: 1px solid #fff;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
+  background: white !important;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell {
+  background: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell:first-child {
+  border-left: 10px solid transparent;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
+  margin-bottom: -5px;
+  border-bottom: none;
+  border-bottom: none !important;
+}
+
+.tabulator .tabulator-footer .tabulator-paginator {
+  color: #3759D7;
+  font-family: inherit;
+  font-weight: inherit;
+  font-size: inherit;
+}
+
+.tabulator .tabulator-footer .tabulator-page-size {
+  display: inline-block;
+  margin: 0 5px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+}
+
+.tabulator .tabulator-footer .tabulator-pages {
+  margin: 0 7px;
+}
+
+.tabulator .tabulator-footer .tabulator-page {
+  display: inline-block;
+  margin: 0 2px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+  background: rgba(255, 255, 255, 0.2);
+}
+
+.tabulator .tabulator-footer .tabulator-page.active {
+  color: #3759D7;
+}
+
+.tabulator .tabulator-footer .tabulator-page:disabled {
+  opacity: .5;
+}
+
+.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+  color: #fff;
+}
+
+.tabulator .tabulator-loader {
+  position: absolute;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  height: 100%;
+  width: 100%;
+  background: rgba(0, 0, 0, 0.4);
+  text-align: center;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px 20px;
+  border-radius: 10px;
+  background: #fff;
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {
+  border: 4px solid #333;
+  color: #000;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {
+  border: 4px solid #D00;
+  color: #590000;
+}
+
+.tabulator-row {
+  position: relative;
+  box-sizing: border-box;
+  box-sizing: border-box;
+  min-height: 24px;
+  margin-bottom: 2px;
+}
+
+.tabulator-row .tabulator-cell:first-child {
+  border-left: 10px solid #3759D7;
+}
+
+.tabulator-row:nth-child(even) {
+  background-color: #627ce0;
+}
+
+.tabulator-row:nth-child(even) .tabulator-cell {
+  background-color: #fff;
+}
+
+.tabulator-row:nth-child(even) .tabulator-cell:first-child {
+  border-left: 10px solid #627ce0;
+}
+
+.tabulator-row.tabulator-selectable:hover {
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-selectable:hover .tabulator-cell {
+  background-color: #bbb;
+}
+
+.tabulator-row.tabulator-selected .tabulator-cell {
+  background-color: #9ABCEA;
+}
+
+.tabulator-row.tabulator-selected:hover .tabulator-cell {
+  background-color: #769BCC;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-moving {
+  position: absolute;
+  border-top: 1px solid #fff;
+  border-bottom: 1px solid #fff;
+  pointer-events: none !important;
+  z-index: 15;
+}
+
+.tabulator-row .tabulator-row-resize-handle {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 5px;
+}
+
+.tabulator-row .tabulator-row-resize-handle.prev {
+  top: 0;
+  bottom: auto;
+}
+
+.tabulator-row .tabulator-row-resize-handle:hover {
+  cursor: ns-resize;
+}
+
+.tabulator-row .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  background-color: inherit;
+  z-index: 10;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #fff;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #fff;
+}
+
+.tabulator-row .tabulator-responsive-collapse {
+  box-sizing: border-box;
+  padding: 5px;
+  border-top: 1px solid #fff;
+  border-bottom: 1px solid #fff;
+}
+
+.tabulator-row .tabulator-responsive-collapse:empty {
+  display: none;
+}
+
+.tabulator-row .tabulator-responsive-collapse table {
+  font-size: 16px;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td {
+  position: relative;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {
+  padding-right: 10px;
+}
+
+.tabulator-row .tabulator-cell {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  padding: 6px 4px;
+  border-right: 2px solid #fff;
+  vertical-align: middle;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  background-color: #f3f3f3;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing {
+  border: 1px solid #1D68CD;
+  outline: none;
+  padding: 0;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {
+  border: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail {
+  border: 1px solid #dd0000;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {
+  border: 1px;
+  background: transparent;
+  color: #dd0000;
+}
+
+.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
+  width: 80%;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
+  width: 100%;
+  height: 3px;
+  margin-top: 2px;
+  background: #666;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #fff;
+  border-bottom: 2px solid #fff;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+  height: 15px;
+  width: 15px;
+  border-radius: 20px;
+  background: #666;
+  color: #f3f3f3;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {
+  opacity: .7;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {
+  display: initial;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-traffic-light {
+  display: inline-block;
+  height: 14px;
+  width: 14px;
+  border-radius: 14px;
+}
+
+.tabulator-row.tabulator-group {
+  box-sizing: border-box;
+  border-bottom: 2px solid #3759D7;
+  border-top: 2px solid #3759D7;
+  padding: 5px;
+  padding-left: 10px;
+  background: #8ca0e8;
+  font-weight: bold;
+  color: fff;
+  margin-bottom: 2px;
+  min-width: 100%;
+}
+
+.tabulator-row.tabulator-group:hover {
+  cursor: pointer;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #3759D7;
+  border-bottom: 0;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-1 {
+  padding-left: 30px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-2 {
+  padding-left: 50px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-3 {
+  padding-left: 70px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-4 {
+  padding-left: 90px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-5 {
+  padding-left: 110px;
+}
+
+.tabulator-row.tabulator-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-row.tabulator-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #3759D7;
+  vertical-align: middle;
+}
+
+.tabulator-row.tabulator-group span {
+  margin-left: 10px;
+  color: #3759D7;
+}
+
+.tabulator-menu {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  background: #f3f3f3;
+  border: 1px solid #fff;
+  box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+  font-size: 16px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-menu .tabulator-menu-item {
+  position: relative;
+  box-sizing: border-box;
+  padding: 5px 10px;
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {
+  opacity: .5;
+}
+
+.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {
+  cursor: pointer;
+  background: #fff;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {
+  padding-right: 25px;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {
+  display: inline-block;
+  position: absolute;
+  top: calc(5px + .4em);
+  right: 10px;
+  height: 7px;
+  width: 7px;
+  content: '';
+  border-width: 1px 1px 0 0;
+  border-style: solid;
+  border-color: #fff;
+  vertical-align: top;
+  -ms-transform: rotate(45deg);
+      transform: rotate(45deg);
+}
+
+.tabulator-menu .tabulator-menu-separator {
+  border-top: 1px solid #fff;
+}
+
+.tabulator-edit-select-list {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  max-height: 200px;
+  background: #f3f3f3;
+  border: 1px solid #1D68CD;
+  font-size: 16px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item {
+  padding: 4px;
+  color: #333;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active {
+  color: #f3f3f3;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {
+  outline: 1px solid rgba(243, 243, 243, 0.5);
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.focused {
+  outline: 1px solid #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {
+  cursor: pointer;
+  color: #f3f3f3;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-notice {
+  padding: 4px;
+  color: #333;
+  text-align: center;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-group {
+  border-bottom: 1px solid #fff;
+  padding: 4px;
+  padding-top: 6px;
+  color: #333;
+  font-weight: bold;
+}
+
+.tabulator.tabulator-ltr {
+  direction: ltr;
+}
+
+.tabulator.tabulator-rtl {
+  text-align: initial;
+  direction: rtl;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col {
+  text-align: initial;
+  border-left: 1px solid #fff;
+  border-right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  margin-right: initial;
+  margin-left: -1px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-left: 25px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
+  left: 8px;
+  right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell {
+  border-right: initial;
+  border-left: 1px solid #fff;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  margin-right: initial;
+  margin-left: 5px;
+  border-bottom-left-radius: initial;
+  border-bottom-right-radius: 1px;
+  border-left: initial;
+  border-right: 2px solid #fff;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  margin-right: initial;
+  margin-left: 5px;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle {
+  position: absolute;
+  left: 0;
+  right: auto;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev {
+  right: 0;
+  left: auto;
+}
+
+.tabulator-print-fullscreen {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 10000;
+}
+
+body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {
+  display: none !important;
+}
+
+.tabulator-print-table {
+  border-collapse: collapse;
+}
+
+.tabulator-print-table .tabulator-print-table-group {
+  box-sizing: border-box;
+  border-bottom: 2px solid #3759D7;
+  border-top: 2px solid #3759D7;
+  padding: 5px;
+  padding-left: 10px;
+  background: #8ca0e8;
+  font-weight: bold;
+  color: fff;
+  margin-bottom: 2px;
+  min-width: 100%;
+}
+
+.tabulator-print-table .tabulator-print-table-group:hover {
+  cursor: pointer;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #3759D7;
+  border-bottom: 0;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {
+  padding-left: 30px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {
+  padding-left: 50px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {
+  padding-left: 70px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {
+  padding-left: 90px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {
+  padding-left: 110px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #3759D7;
+  vertical-align: middle;
+}
+
+.tabulator-print-table .tabulator-print-table-group span {
+  margin-left: 10px;
+  color: #3759D7;
+}
+
+.tabulator-print-table .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #fff;
+  border-bottom: 2px solid #fff;
+}
+
+.tabulator-print-table .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-print-table .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
diff --git a/app/vendors/tabulator/css/tabulator_modern.min.css b/app/vendors/tabulator/css/tabulator_modern.min.css
new file mode 100644 (file)
index 0000000..ddf2a87
--- /dev/null
@@ -0,0 +1,3 @@
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+.tabulator{position:relative;border:1px solid #fff;background-color:#fff;overflow:hidden;font-size:16px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:3px solid #3759d7;margin-bottom:4px;background-color:#fff;color:#3759d7;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;padding-left:10px;font-size:1.1em}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:2px solid #fff;background-color:#fff;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3759d7;background:#e6e6e6;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #3759d7;padding:1px;background:#fff;font-size:1em;color:#3759d7}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:absolute;top:0;bottom:0;right:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #b7c3f1}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:2px solid #3759d7;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#e6e6e6}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#b7c3f1}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #b7c3f1}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter{color:#3759d7}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #3759d7}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter{color:#3759d7}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #3759d7;color:#3759d7}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{-ms-flex-pack:center;justify-content:center;left:0;right:0;top:4px;bottom:auto}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{padding-left:10px;border-right:2px solid #fff}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #fff}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;border-top:2px solid #3759d7!important;background:#fff!important;border-top:1px solid #fff;border-bottom:1px solid #fff;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{padding-left:0!important;background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell{background:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3759d7;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#f3f3f3;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#f2f2f2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #3759d7}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #3759d7}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#fff;text-align:right;color:#3759d7;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#fff!important;border-top:3px solid #3759d7!important;border-bottom:2px solid #3759d7!important;border-bottom:1px solid #fff;border-top:1px solid #fff;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell{background:none}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell:first-child{border-left:10px solid transparent}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none;border-bottom:none!important}.tabulator .tabulator-footer .tabulator-paginator{color:#3759d7;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#3759d7}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:24px;margin-bottom:2px}.tabulator-row .tabulator-cell:first-child{border-left:10px solid #3759d7}.tabulator-row:nth-child(2n){background-color:#627ce0}.tabulator-row:nth-child(2n) .tabulator-cell{background-color:#fff}.tabulator-row:nth-child(2n) .tabulator-cell:first-child{border-left:10px solid #627ce0}.tabulator-row.tabulator-selectable:hover{cursor:pointer}.tabulator-row.tabulator-selectable:hover .tabulator-cell{background-color:#bbb}.tabulator-row.tabulator-selected .tabulator-cell{background-color:#9abcea}.tabulator-row.tabulator-selected:hover .tabulator-cell{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #fff;border-bottom:1px solid #fff;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #fff}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #fff}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #fff;border-bottom:1px solid #fff}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px 4px;border-right:2px solid #fff;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background-color:#f3f3f3}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #fff;border-bottom:2px solid #fff}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#f3f3f3;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:2px solid #3759d7;border-top:2px solid #3759d7;padding:5px;padding-left:10px;background:#8ca0e8;font-weight:700;color:fff;margin-bottom:2px;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3759d7;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3759d7;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3759d7}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#f3f3f3;border:1px solid #fff;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:16px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{position:relative;box-sizing:border-box;padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#fff}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{display:inline-block;position:absolute;top:calc(5px + .4em);right:10px;height:7px;width:7px;content:"";border-width:1px 1px 0 0;border-style:solid;border-color:#fff;vertical-align:top;transform:rotate(45deg)}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #fff}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#f3f3f3;border:1px solid #1d68cd;font-size:16px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#f3f3f3;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,95%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#f3f3f3;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #fff;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{text-align:initial;direction:rtl}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{text-align:initial;border-left:1px solid #fff;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-right:0;margin-left:-1px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:0;padding-left:25px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-right:initial;border-left:1px solid #fff}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{margin-right:0;margin-left:5px;border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #fff}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-right:0;margin-left:5px}.tabulator.tabulator-rtl .tabulator-col-resize-handle{position:absolute;left:0;right:auto}.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev{right:0;left:auto}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-bottom:2px solid #3759d7;border-top:2px solid #3759d7;padding:5px;padding-left:10px;background:#8ca0e8;font-weight:700;color:fff;margin-bottom:2px;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3759d7;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3759d7;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3759d7}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #fff;border-bottom:2px solid #fff}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
+/*# sourceMappingURL=tabulator_modern.min.css.map */
diff --git a/app/vendors/tabulator/css/tabulator_modern.min.css.map b/app/vendors/tabulator/css/tabulator_modern.min.css.map
new file mode 100644 (file)
index 0000000..532ffba
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["tabulator_modern.scss"],"names":[],"mappings":"AA+CA,WACC,kBAAkB,AAClB,sBA1CgB,AA2ChB,sBA5CqB,AA6CrB,gBAAe,AACf,eA5Ca,AA6Cb,gBAAgB,AAMhB,uBAAwB,CAwjBxB,AApkBD,iFAiBI,cAAc,CACd,AAlBJ,0CAuBE,oBAAqB,CACrB,AAxBF,kCA2BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA5BF,6BAgCE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,gCAjFe,AAkFf,kBAAiB,AACjB,sBA3EyB,AA4EzB,cApFe,AAqFf,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,kBAzDe,AA2Df,eAAgB,CAmShB,AAxVF,qDAwDG,YAAY,CACZ,AAzDH,4CA6DG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAlGoB,AAmGpB,sBArGwB,AAsGxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CA4NhB,AAhSH,6DAuEI,kBAAkB,AAClB,yBApHa,AAqHb,mBAA8C,AAC9C,mBAAoB,CACpB,AA3EJ,mEA+EI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAkEX,AAnJJ,iGAqFK,aAAc,CAMd,AA3FL,uGAwFM,eAAe,AACf,UAAW,CACX,AA1FN,+FA+FK,iBAAkB,CAClB,AAhGL,wFAoGK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAoBrB,AA9HL,gHA8GM,sBAAsB,AACtB,WAAW,AAEX,yBA7JW,AA+JX,YAAW,AAEX,gBAAgB,AAEhB,cAAc,AACd,aApKW,CAqKX,AAzHN,8IA4HM,uBAAuB,CACvB,AA7HN,yFAkIK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AAjJL,0GA2IM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,+BA3KoC,CA4KpC,AAhJN,0FA0JK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,6BAzMY,AA0MZ,gBAAgB,AAEhB,iBAAiB,CACjB,AAjKL,0FAwKK,YAAa,CACb,AAzKL,qEA+KI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AApMJ,8EAuLK,qBAAsB,CACtB,AAxLL,yEA2LK,cAAe,CACf,AA5LL,sFAgMM,QAAS,AACT,QAAS,CACT,AAlMN,oFAyMK,kBAAkB,CAClB,AA1ML,qEA6MK,eAAc,AACd,wBAAoD,CACpD,AA/ML,4HAoNM,aAhPoC,CAsPpC,AA1NN,6IAuNO,gBAAgB,AAChB,+BApPmC,CAqPnC,AAzNP,2HA+NM,aA3QW,CAkRX,AAtON,4IAkOO,gBAAgB,AAChB,+BA/QU,CAiRV,AArOP,4HA2OM,aAvRW,CA8RX,AAlPN,6IA8OO,mBAAmB,AACnB,6BA3RU,AA4RV,aA5RU,CA6RV,AAjPP,+GAyPM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AA/PN,oHAoQM,wBAAyB,CACzB,AArQN,2GA0QM,gBAAe,AACf,gBAAgB,CAChB,AA5QN,uIAgRO,gBAAe,AACf,mBAAmB,CACnB,AAlRP,4GAuRM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AA5RN,+CAmSG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CAWX,AAnTH,qEA2SI,kBAjTa,AAmTb,2BApUgB,CAqUhB,AA9SJ,sEAiTI,0BAxUgB,CAyUhB,AAlTJ,qDAsTG,sBAAqB,AACrB,eAAc,AAEd,uCAAqD,AAErD,0BAAyD,AAgBzD,0BAlWiB,AAmWjB,6BA9WoB,AAgXpB,eAAgB,CAChB,AA/UH,oEA8TI,yBAA0B,AAE1B,yBAAyD,CASzD,AAzUJ,iGAmUK,YAAa,CACb,AApUL,oFAuUK,eAAe,CACf,AAxUL,2DAkVG,cAAc,CAKd,AAvVH,iEAqVI,YAAa,CACb,AAtVJ,kCA4VE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAuDjC,AAvZF,wCAmWG,YAAa,CACb,AApWH,yDAwWG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA7XH,wFA6WI,gBAAe,AACf,cAAc,CACd,AA/WJ,8DAoXI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,cAraa,AAsab,gBAAiB,AACjB,cAAe,CACf,AA5XJ,mDAiYG,kBAAiB,AACjB,qBAAoB,AACpB,yBA5ZwB,AA6ZxB,mBAAmB,AACnB,iBAAgB,AAChB,UA5Ze,CA4af,AAtZH,kFA0YK,gBAAiB,AACjB,4BAAwD,CASxD,AApZL,sGA8YM,+BA1bW,CA2bX,AA/YN,yGAkZM,4BA9bW,CA+bX,AAnZN,wCA4ZE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA1aF,6CAmaG,OAAM,AACN,UAAU,CACV,AAraH,8CAwaG,gBAAgB,CAChB,AAzaH,6BA+aE,iBAAgB,AAChB,0BAzbwB,AA0bxB,sBA7byB,AA8bzB,iBAAgB,AAChB,cA/de,AAgef,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CA8FpB,AAzhBF,qDA8bG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,0BAAyD,AAEzD,uCAAqD,AACrD,0CAAwD,AAkBxD,6BAhfiB,AAifjB,0BAjfiB,AAmfjB,eAAgB,CAOhB,AAneH,oEA0cI,yBAAyD,CAazD,AAvdJ,iGA6cK,YAAa,CACb,AA9cL,oFAidK,eAAe,CAKf,AAtdL,gGAodM,kCAA2C,CAC3C,AArdN,gEA+dI,mBAAkB,AAClB,mBAAkB,AAClB,4BAA6B,CAC7B,AAleJ,kDAueG,cAnhBc,AAohBd,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA3eH,kDA+eG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9foB,AA+fpB,iBAAiB,CACjB,AAtfH,8CA0fG,YAAY,CACZ,AA3fH,6CA+fG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9gBoB,AA+gBpB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AAxhBH,oDA0gBI,aAtjBa,CAujBb,AA3gBJ,sDA8gBI,UAAU,CACV,AA/gBJ,kEAmhBK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAthBL,6BA6hBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAnkBF,mDA4iBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAlkBH,qEAyjBI,sBAAqB,AACrB,UAAU,CACV,AA3jBJ,mEA+jBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAGlB,sBAAsB,AACtB,gBAA0C,AAM1C,iBAAkB,CAuYlB,AAlZD,2CAeG,8BAloBc,CAmoBd,AAhBH,6BAqBE,wBAhmBqC,CAymBrC,AA9BF,6CAwBG,qBAvnBwB,CA4nBxB,AA7BH,yDA2BI,8BAtmBmC,CAumBnC,AA5BJ,0CAiCE,cAAe,CAKf,AAtCF,0DAoCG,qBAhoBqB,CAioBrB,AArCH,kDA0CG,wBApoB4B,CAqoB5B,AA3CH,wDAgDG,yBAzoBiC,AA0oBjC,cAAe,CACf,AAlDH,gCAsDE,kBAAkB,AAElB,0BAtpBkB,AAupBlB,6BAvpBkB,AAypBlB,8BAA+B,AAC/B,UAAU,CACV,AA7DF,4CAiEE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AA/EF,iDAwEG,MAAK,AACL,WAAW,CACX,AA1EH,kDA6EG,gBAAgB,CAChB,AA9EH,iCAkFE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CAUX,AAjGF,uDA2FG,2BAzrBiB,CA0rBjB,AA5FH,wDA+FG,0BA7rBiB,CA8rBjB,AAhGH,8CAoGE,sBAAqB,AAErB,YAAW,AAEX,0BAtsBkB,AAusBlB,4BAvsBkB,CA0tBlB,AA5HF,oDA4GG,YAAY,CACZ,AA7GH,oDAgHG,cA9tBW,CAyuBX,AA3HH,0DAoHK,iBAAkB,CAKlB,AAzHL,wEAuHM,kBAAkB,CAClB,AAxHN,+BAgIE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,gBAAe,AACf,4BAluBkB,AAmuBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,uBAAsB,AAEtB,wBA1uByB,CAs6BzB,AAtUF,iDA6IG,yBApuBkB,AAquBlB,aAAY,AAEZ,SAAU,CAMV,AAtJH,+GAmJI,WAAU,AACV,sBAAsB,CACtB,AArJJ,yDAyJG,qBA/uBgB,CAsvBhB,AAhKH,+HA2JI,WAAU,AACV,uBAAsB,AAEtB,UApvBe,CAqvBf,AA/JJ,6EAqKI,YAAa,CACb,AAtKJ,oDA4KG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAuB,AAAvB,uBAAuB,AAEvB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAjMH,8EAuLI,SAAS,CAST,AAhMJ,wGA2LK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AA/LL,2DAoMG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA7yBiB,AA8yBjB,4BA9yBiB,CA+yBjB,AAjNH,4DAqNG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA5zBe,AA6zBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAtRH,kEAsOI,eAAc,AACd,yBAA4B,CAC5B,AAxOJ,kGA2OI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AA9PJ,wGAoPK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAz1Ba,CA01Bb,AA7PL,gGAiQI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAp2Bc,CAi3Bd,AApRJ,sGA0QK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA/2Ba,CAg3Bb,AAnRL,qEAyRG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,cAx4BwB,AAy4BxB,gBAAgB,AAChB,eAAe,CAmBf,AA7TH,2EA6SI,UAAU,CACV,AA9SJ,sHAkTK,eAAe,CACf,AAnTL,sOA2TI,YAAY,CACZ,AA5TJ,wDAgUG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AArUH,+BA2UE,sBAAqB,AACrB,gCA/7Be,AAg8Bf,6BAh8Be,AAi8Bf,YAAW,AACX,kBAAiB,AACjB,mBAAiC,AACjC,gBAAgB,AAChB,UAAS,AACT,kBAAkB,AAElB,cAAe,CA4Df,AAjZF,qCAwVG,eAAc,AACd,+BAA+B,CAC/B,AA1VH,wEA+VI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAr9Ba,AAs9Bb,eAAgB,CAChB,AApWJ,uDAwWG,iBAAiB,CACjB,AAzWH,uDA4WG,iBAAiB,CACjB,AA7WH,uDAgXG,iBAAiB,CACjB,AAjXH,uDAoXG,iBAAiB,CACjB,AArXH,uDAwXG,kBAAkB,CAClB,AAzXH,uDA4XG,oBAAqB,CACrB,AA7XH,gDAkYG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BA5/Bc,AA6/Bd,qBAAqB,CACrB,AA3YH,oCA8YG,iBAAgB,AAChB,aAlgCc,CAmgCd,AAIH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,mBAz/B0B,AA0/B1B,sBAx/BmB,AAy/BnB,oCAAuC,AAEvC,eA3gCa,AA6gCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA8Cd,AA5DD,qCAiBE,kBAAiB,AACjB,sBAAqB,AAErB,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAiCjB,AAvDF,kEAyBG,UAAW,CACX,AA1BH,8EA6BG,eAAe,AACf,eAjhCwB,CAkhCxB,AA/BH,iEAkCG,kBAAkB,CAoBlB,AAtDH,uEAqCI,qBAAqB,AACrB,kBAAkB,AAElB,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,UAAU,AAEV,WAAW,AAEX,yBAAyB,AACzB,mBAAmB,AACnB,kBAniCgB,AAoiChB,mBAAmB,AAEnB,uBAAwB,CACxB,AArDJ,0CA0DE,yBA5iCkB,CA6iClB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,mBAzjC0B,AA0jC1B,yBAjjCoB,AAmjCpB,eA1kCa,AA4kCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UAnkCgB,CAylChB,AA1CF,oEAuBG,cAzkCwB,AA0kCxB,kBAjkCkB,CAskClB,AA7BH,4EA2BI,mCA7kCuB,CA8kCvB,AA5BJ,qEAgCG,yBAzkCkB,CA0kClB,AAjCH,mEAqCG,eAAc,AAEd,cAzlCwB,AA0lCxB,kBAjlCkB,CAklClB,AAzCH,+DA6CE,YAAW,AAEX,WA9lCgB,AA+lChB,iBAAkB,CAClB,AAjDF,8DAoDE,6BApmCkB,AAsmClB,YAAW,AACX,gBAAe,AAEf,WAxmCgB,AAymChB,eAAgB,CAChB,AAKF,yBACC,aAAc,CACd,AAGD,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BAvoCoB,AAwoCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BAzpCiB,CAirCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BA1qCgB,CA2qChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAOH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAyKzB,AA1KD,oDAME,sBAAqB,AACrB,gCA9uCe,AA+uCf,6BA/uCe,AAgvCf,YAAW,AACX,kBAAiB,AACjB,mBAAiC,AACjC,gBAAgB,AAChB,UAAS,AACT,kBAAkB,AAElB,cAAe,CAqEf,AArFF,0DAmBG,eAAc,AACd,+BAA+B,CAC/B,AArBH,6FA0BI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BApwCa,AAqwCb,eAAgB,CAChB,AA/BJ,+EAoCI,2BAA4B,CAC5B,AArCJ,+EA0CI,2BAA4B,CAC5B,AA3CJ,+EAgDI,2BAA4B,CAC5B,AAjDJ,+EAsDI,2BAA4B,CAC5B,AAvDJ,+EA4DI,4BAA6B,CAC7B,AA7DJ,4EAiEG,oBAAqB,CACrB,AAlEH,qEAsEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BApzCc,AAqzCd,qBAAqB,CACrB,AA/EH,yDAkFG,iBAAgB,AAChB,aA1zCc,CA2zCd,AApFH,mDAwFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BArzCkB,AAszClB,4BAtzCkB,CAuzClB,AArGF,oDAyGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAp0CgB,AAq0ChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAzKF,0DA0HG,eAAc,AACd,yBAA4B,CAC5B,AA5HH,0FA+HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAlJH,gGAwII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAj2Cc,CAk2Cd,AAjJJ,wFAqJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA52Ce,CAy3Cf,AAxKH,8FA8JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAv3Cc,CAw3Cd","file":"tabulator_modern.min.css","sourcesContent":["/* Tabulator v4.9.3 (c) Oliver Folkerd */\n\n\r\n$primary: #3759D7 !default; //the base text color from which the rest of the theme derives\r\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#fff !default; //border to tabulator\r\n$textSize:16px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#fff !default; //border to tabulator\r\n$headerTextColor:$primary !default; //header text colour\r\n$headerBorderColor:#fff !default;  //header border color\r\n$headerSeperatorColor:$primary !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: $primary !default;\r\n$sortArrowInactive: lighten($primary, 30%) !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#f3f3f3 !default; //table row background color\r\n$rowAltBackgroundColor:#fff !default; //table row background color\r\n$rowBorderColor:#fff !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#fff !default; //border to tabulator\r\n$footerTextColor:$primary !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:$primary !default; //footer bottom active text color\r\n\r\n$handleWidth:10px !default; //width of the row handle\r\n$handleColor: $primary !default; //color for odd numbered rows\r\n$handleColorAlt: lighten($primary, 10%) !default; //color for even numbered rows\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tborder: 1px solid $borderColor;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tmargin-bottom:4px;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\tpadding-left:$handleWidth;\r\n\r\n\t\tfont-size: 1.1em;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:2px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid $primary;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\r\n\t\t\t\t\t\tfont-size: 1em;\r\n\t\t\t\t\t\tcolor: $primary;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:2px solid $headerSeperatorColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tpadding-left: $handleWidth;\r\n\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tborder-top:2px solid $headerSeperatorColor !important;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tpadding-left: 0 !important;\r\n\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-cell{\r\n\t\t\t\t\tbackground:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$primary;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $headerSeperatorColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\tborder-top:3px solid $headerSeperatorColor !important;\r\n\t\t\tborder-bottom:2px solid $headerSeperatorColor !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-cell{\r\n\t\t\t\t\tbackground:none;\r\n\r\n\t\t\t\t\t&:first-child{\r\n\t\t\t\t\t\tborder-left: $handleWidth solid transparent;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t\tborder-bottom:none !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\r\n\t// background-color: $handleColor;\r\n\r\n\t// padding-left: $handleWidth !important;\r\n\r\n\tmargin-bottom: 2px;\r\n\r\n\t.tabulator-cell{\r\n\t\t&:first-child{\r\n\t\t\tborder-left: $handleWidth solid $handleColor;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&:nth-child(even){\r\n\t\tbackground-color: $handleColorAlt;\r\n\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color: $rowAltBackgroundColor;\r\n\r\n\t\t\t&:first-child{\r\n\t\t\t\tborder-left: $handleWidth solid $handleColorAlt;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tcursor: pointer;\r\n\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowHoverBackground;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowSelectedBackground;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\t// padding-left: $handleWidth;\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px 4px;\r\n\t\tborder-right:2px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\tbackground-color: $rowBackgroundColor;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\toutline:none;\r\n\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content: center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:2px solid $primary;\r\n\t\tborder-top:2px solid $primary;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:lighten($primary, 20%);\r\n\t\tfont-weight:bold;\r\n\t\tcolor:fff;\r\n\t\tmargin-bottom: 2px;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$primary;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\t\tposition:relative;\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-menu-item-submenu{\r\n\t\t\tpadding-right:25px;\r\n\r\n\t\t\t&::after {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tposition: absolute;\r\n\r\n\t\t\t\ttop: calc(5px + .4em);\r\n\t\t\t\tright: 10px;\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tcontent: '';\r\n\r\n\t\t\t\tborder-width: 1px 1px 0 0;\r\n\t\t\t\tborder-style: solid;\r\n\t\t\t\tborder-color: $rowBorderColor;\r\n\t\t\t\tvertical-align: top;\r\n\r\n\t\t\t\ttransform: rotate(45deg);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $editBoxColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:2px solid $primary;\r\n\t\tborder-top:2px solid $primary;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:lighten($primary, 20%);\r\n\t\tfont-weight:bold;\r\n\t\tcolor:fff;\r\n\t\tmargin-bottom: 2px;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$primary;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
index d2b0e2c..ab4bd64 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 .tabulator {
   position: relative;
   background-color: #fff;
index b3711f4..c1db5db 100644 (file)
@@ -1,3 +1,3 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 .tabulator{position:relative;background-color:#fff;overflow:hidden;font-size:14px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:1px solid #999;background-color:#fff;color:#555;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #ddd;background-color:#fff;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#e6e6e6;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:absolute;top:0;bottom:0;right:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #ddd;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#e6e6e6}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter{color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter{color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #666;color:#666}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{-ms-flex-pack:center;justify-content:center;left:0;right:0;top:4px;bottom:auto}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#f2f2f2!important;border-top:1px solid #ddd;border-bottom:1px solid #999;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f2f2f2!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#000;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#f2f2f2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #ddd}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #ddd}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#fff;text-align:right;color:#555;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#f2f2f2!important;border-bottom:1px solid #fff;border-top:1px solid #ddd;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f2f2f2!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator{color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:hsla(0,0%,100%,.2)}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;border-bottom:1px solid #ddd}.tabulator-row,.tabulator-row:nth-child(2n){background-color:#fff}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #ddd;border-bottom:1px solid #ddd;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #ddd;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #ddd;border-bottom:2px solid #ddd}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;padding:5px;padding-left:10px;background:#fafafa;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #ddd;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{position:relative;box-sizing:border-box;padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#fff}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{display:inline-block;position:absolute;top:calc(5px + .4em);right:10px;height:7px;width:7px;content:"";border-width:1px 1px 0 0;border-style:solid;border-color:#ddd;vertical-align:top;transform:rotate(45deg)}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #ddd}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #ddd;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #ddd;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{text-align:initial;direction:rtl}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{text-align:initial;border-left:1px solid #ddd;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-right:0;margin-left:-1px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:0;padding-left:25px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-right:initial;border-left:1px solid #ddd}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{margin-right:0;margin-left:5px;border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #ddd}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-right:0;margin-left:5px}.tabulator.tabulator-rtl .tabulator-col-resize-handle{position:absolute;left:0;right:auto}.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev{right:0;left:auto}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;padding:5px;padding-left:10px;background:#fafafa;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#666}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #ddd;border-bottom:2px solid #ddd}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
 /*# sourceMappingURL=tabulator_simple.min.css.map */
index 8338688..599019d 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["tabulator_simple.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAClB,sBAvCqB,AAwCrB,gBAAe,AACf,eAvCa,AAwCb,gBAAgB,AAMhB,uBAAwB,CA4hBxB,AAviBD,iFAgBI,cAAc,CACd,AAjBJ,0CAsBE,oBAAqB,CACrB,AAvBF,kCA0BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA3BF,6BA+BE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAjEwB,AAkExB,sBArEyB,AAsEzB,WArEmB,AAsEnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAsRpB,AArUF,qDAkDG,YAAY,CACZ,AAnDH,4CAuDG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAxFoB,AAyFpB,sBA3FwB,AA4FxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAyNhB,AAvRH,6DAiEI,kBAAkB,AAClB,sBA/FsB,AAgGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AArEJ,mEAyEI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CA+DX,AA1IJ,iGA+EK,aAAc,CAMd,AArFL,uGAkFM,eAAe,AACf,UAAW,CACX,AApFN,+FAyFK,iBAAkB,CAClB,AA1FL,wFA8FK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAiBrB,AArHL,gHAwGM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AAhHN,8IAmHM,uBAAuB,CACvB,AApHN,yFAyHK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AAxIL,0GAkIM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BA9JkB,CA+JlB,AAvIN,0FAiJK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAlLkB,AAmLlB,gBAAgB,AAEhB,iBAAiB,CACjB,AAxJL,0FA+JK,YAAa,CACb,AAhKL,qEAqKI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA1LJ,8EA6KK,qBAAsB,CACtB,AA9KL,yEAiLK,cAAe,CACf,AAlLL,sFAsLM,QAAS,AACT,QAAS,CACT,AAxLN,oFAgMK,kBAAkB,CAClB,AAjML,qEAoMK,eAAc,AACd,wBAAoD,CACpD,AAtML,4HA2MM,UAnOkB,CAyOlB,AAjNN,6IA8MO,gBAAgB,AAChB,4BAvOiB,CAwOjB,AAhNP,2HAsNM,UA/OgB,CAsPhB,AA7NN,4IAyNO,gBAAgB,AAChB,4BAnPe,CAqPf,AA5NP,4HAkOM,UA3PgB,CAkQhB,AAzON,6IAqOO,mBAAmB,AACnB,0BA/Pe,AAgQf,UAhQe,CAiQf,AAxOP,+GAgPM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAtPN,oHA2PM,wBAAyB,CACzB,AA5PN,2GAiQM,gBAAe,AACf,gBAAgB,CAChB,AAnQN,uIAuQO,gBAAe,AACf,mBAAmB,CACnB,AAzQP,4GA8QM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AAnRN,+CA0RG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AAxSH,qEAkSI,2BArTgB,CAsThB,AAnSJ,sEAsSI,0BAzTgB,CA0ThB,AAvSJ,qDA2SG,sBAAqB,AACrB,eAAc,AAEd,6BAAwD,AAUxD,0BA3UiB,AA4UjB,6BAtVuB,AAwVvB,eAAgB,CAChB,AA5TH,oEAiTI,4BAAwD,CAKxD,AAtTJ,iGAoTK,YAAa,CACb,AArTL,2DA+TG,cAAc,CAKd,AApUH,iEAkUI,YAAa,CACb,AAnUJ,kCA2UE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAwDjC,AAvYF,wCAkVG,YAAa,CACb,AAnVH,yDAuVG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA5WH,wFA4VI,gBAAe,AACf,cAAc,CACd,AA9VJ,8DAmWI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA3WJ,mDAgXG,kBAAiB,AACjB,qBAAoB,AACpB,sBAvYqB,AAwYrB,mBAAmB,AACnB,iBAAgB,AAChB,UAvYe,CAwZf,AAtYH,kFAyXK,gBAAiB,AACjB,4BAAwD,CASxD,AAnYL,sGA6XM,4BAhZc,CAiZd,AA9XN,yGAiYM,yBApZc,CAqZd,AAlYN,wCA2YE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AAzZF,6CAkZG,OAAM,AACN,UAAU,CACV,AApZH,8CAuZG,gBAAgB,CAChB,AAxZH,6BA8ZE,iBAAgB,AAChB,0BAnawB,AAoaxB,sBAvayB,AAwazB,iBAAgB,AAChB,WAxamB,AAyanB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAkFpB,AA5fF,qDA6aG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAwD,AAUxD,6BApcwB,AAqcxB,0BAjdiB,AAmdjB,eAAgB,CAMhB,AAtcH,oEAsbI,4BAAwD,CAKxD,AA3bJ,iGAybK,YAAa,CACb,AA1bL,gEAmcI,mBAAkB,AAClB,kBAAkB,CAClB,AArcJ,kDA0cG,WAhdkB,AAidlB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA9cH,kDAkdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5doB,AA6dpB,iBAAiB,CACjB,AAzdH,8CA6dG,YAAY,CACZ,AA9dH,6CAkeG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5eoB,AA6epB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AA3fH,oDA6eI,UAhfmB,CAifnB,AA9eJ,sDAifI,UAAU,CACV,AAlfJ,kEAsfK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAzfL,6BAggBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAtiBF,mDA+gBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAriBH,qEA4hBI,sBAAqB,AACrB,UAAU,CACV,AA9hBJ,mEAkiBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AAEtB,gBAA0C,AAE1C,4BAnkBmB,CAi7BnB,AApXD,4CAKC,qBApkBuB,CAykBtB,AAVF,0CAaE,sBAxkBsB,AAykBtB,cAAe,CACf,AAfF,kCAkBE,wBA3kB6B,CA4kB7B,AAnBF,wCAsBE,yBA9kBkC,AA+kBlC,cAAe,CACf,AAxBF,gCA2BE,kBAAkB,AAElB,0BA1lBkB,AA2lBlB,6BA3lBkB,AA6lBlB,8BAA+B,AAC/B,UAAU,CACV,AAlCF,4CAsCE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AApDF,iDA6CG,MAAK,AACL,WAAW,CACX,AA/CH,kDAkDG,gBAAgB,CAChB,AAnDH,iCAuDE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AArEF,uDA+DG,2BA5nBiB,CA6nBjB,AAhEH,wDAmEG,0BAhoBiB,CAioBjB,AApEH,8CAwEE,sBAAqB,AAErB,YAAW,AAEX,0BAzoBkB,AA0oBlB,4BA1oBkB,CA6pBlB,AAhGF,oDAgFG,YAAY,CACZ,AAjFH,oDAoFG,cAjqBW,CA4qBX,AA/FH,0DAwFK,iBAAkB,CAKlB,AA7FL,wEA2FM,kBAAkB,CAClB,AA5FN,+BAoGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BArqBkB,AAsqBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA+LtB,AA3SF,4CA+GG,iBAAkB,CAClB,AAhHH,iDAmHG,yBAxqBkB,AAyqBlB,aAAY,AAEZ,SAAU,CAMV,AA5HH,+GAyHI,WAAU,AACV,sBAAsB,CACtB,AA3HJ,yDA+HG,qBAnrBgB,CA0rBhB,AAtIH,+HAiII,WAAU,AACV,uBAAsB,AAEtB,UAxrBe,CAyrBf,AArIJ,6EA2II,YAAa,CACb,AA5IJ,oDAkJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAtKH,8EA4JI,SAAS,CAST,AArKJ,wGAgKK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AApKL,2DAyKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAjvBiB,AAkvBjB,4BAlvBiB,CAmvBjB,AAtLH,4DA0LG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAhwBe,AAiwBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA3PH,kEA2MI,eAAc,AACd,yBAA4B,CAC5B,AA7MJ,kGAgNI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAnOJ,wGAyNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA7xBa,CA8xBb,AAlOL,gGAsOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAxyBc,CAqzBd,AAzPJ,sGA+OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAnzBa,CAozBb,AAxPL,qEA8PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA50BqB,AA60BrB,gBAAgB,AAChB,eAAe,CAmBf,AAlSH,2EAkRI,UAAU,CACV,AAnRJ,sHAuRK,eAAe,CACf,AAxRL,sOAgSI,YAAY,CACZ,AAjSJ,wDAqSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AA1SH,+BAgTE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA/2BkB,AAg3BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,mBAAkB,AAClB,gBAAgB,AAEhB,cAAe,CA0Df,AAnXF,qCA4TG,eAAc,AACd,+BAA+B,CAC/B,AA9TH,wEAkUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAx4BkB,AAy4BlB,eAAgB,CAChB,AAvUJ,uDA2UG,iBAAiB,CACjB,AA5UH,uDA+UG,iBAAiB,CACjB,AAhVH,uDAmVG,iBAAiB,CACjB,AApVH,uDAuVG,iBAAiB,CACjB,AAxVH,uDA2VG,kBAAkB,CAClB,AA5VH,uDA+VG,oBAAqB,CACrB,AAhWH,gDAoWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA96BmB,AA+6BnB,qBAAqB,CACrB,AA7WH,oCAgXG,iBAAgB,AAChB,UAAU,CACV,AAIH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBA17BuB,AA27BvB,sBAz7BmB,AA07BnB,oCAAuC,AAEvC,eA58Ba,AA88Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA8Cd,AA5DD,qCAiBE,kBAAiB,AACjB,sBAAqB,AAErB,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAiCjB,AAvDF,kEAyBG,UAAW,CACX,AA1BH,8EA6BG,eAAe,AACf,eAl9BwB,CAm9BxB,AA/BH,iEAkCG,kBAAkB,CAoBlB,AAtDH,uEAqCI,qBAAqB,AACrB,kBAAkB,AAElB,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,UAAU,AAEV,WAAW,AAEX,yBAAyB,AACzB,mBAAmB,AACnB,kBAp+BgB,AAq+BhB,mBAAmB,AAEnB,uBAAwB,CACxB,AArDJ,0CA0DE,yBA7+BkB,CA8+BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA1/BuB,AA2/BvB,sBAz/BmB,AA2/BnB,eA3gCa,AA6gCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UApgCgB,CA0hChB,AA1CF,oEAuBG,WA1gCqB,AA2gCrB,kBAjgCkB,CAsgClB,AA7BH,4EA2BI,oCA9gCoB,CA+gCpB,AA5BJ,qEAgCG,yBAzgCkB,CA0gClB,AAjCH,mEAqCG,eAAc,AAEd,WA1hCqB,AA2hCrB,kBAjhCkB,CAkhClB,AAzCH,+DA6CE,YAAW,AAEX,WA/hCgB,AAgiChB,iBAAkB,CAClB,AAjDF,8DAoDE,6BAriCkB,AAuiClB,YAAW,AACX,gBAAe,AAEf,WAziCgB,AA0iChB,eAAgB,CAChB,AAKF,yBACC,aAAc,CACd,AAGD,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BAxkCoB,AAykCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BA1lCiB,CAknCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BA3mCgB,CA4mChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAQH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAuKzB,AAxKD,oDAME,sBAAqB,AACrB,6BAA4B,AAC5B,4BA5pCkB,AA6pClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,mBAAkB,AAClB,gBAAgB,AAEhB,cAAe,CAoEf,AAnFF,0DAkBG,eAAc,AACd,+BAA+B,CAC/B,AApBH,6FAwBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BArrCkB,AAsrClB,eAAgB,CAChB,AA7BJ,+EAkCI,2BAA4B,CAC5B,AAnCJ,+EAwCI,2BAA4B,CAC5B,AAzCJ,+EA8CI,2BAA4B,CAC5B,AA/CJ,+EAoDI,2BAA4B,CAC5B,AArDJ,+EA0DI,4BAA6B,CAC7B,AA3DJ,4EA+DG,oBAAqB,CACrB,AAhEH,qEAoEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAruCmB,AAsuCnB,qBAAqB,CACrB,AA7EH,yDAgFG,iBAAgB,AAChB,UAAU,CACV,AAlFH,mDAsFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BArvCkB,AAsvClB,4BAtvCkB,CAuvClB,AAnGF,oDAuGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBApwCgB,AAqwChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAvKF,0DAwHG,eAAc,AACd,yBAA4B,CAC5B,AA1HH,0FA6HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAhJH,gGAsII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAjyCc,CAkyCd,AA/IJ,wFAmJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA5yCe,CAyzCf,AAtKH,8FA4JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAvzCc,CAwzCd","file":"tabulator_simple.min.css","sourcesContent":["/* Tabulator v4.8.4 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#fff !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#ddd !default;  //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#fff !default; //table row background color\r\n$rowBorderColor:#ddd !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#fff !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:darken($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#000;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $footerBackgroundColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t&:nth-child(even){\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&:last-of-type{\r\n\t\t\tborder-right: none;\r\n\t\t}\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\toutline:none;\r\n\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#fafafa;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#666;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\t\tposition:relative;\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-menu-item-submenu{\r\n\t\t\tpadding-right:25px;\r\n\r\n\t\t\t&::after {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tposition: absolute;\r\n\r\n\t\t\t\ttop: calc(5px + .4em);\r\n\t\t\t\tright: 10px;\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tcontent: '';\r\n\r\n\t\t\t\tborder-width: 1px 1px 0 0;\r\n\t\t\t\tborder-style: solid;\r\n\t\t\t\tborder-color: $rowBorderColor;\r\n\t\t\t\tvertical-align: top;\r\n\r\n\t\t\t\ttransform: rotate(45deg);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#fafafa;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#666;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"sources":["tabulator_simple.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAClB,sBAvCqB,AAwCrB,gBAAe,AACf,eAvCa,AAwCb,gBAAgB,AAMhB,uBAAwB,CA4hBxB,AAviBD,iFAgBI,cAAc,CACd,AAjBJ,0CAsBE,oBAAqB,CACrB,AAvBF,kCA0BE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA3BF,6BA+BE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAjEwB,AAkExB,sBArEyB,AAsEzB,WArEmB,AAsEnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAsRpB,AArUF,qDAkDG,YAAY,CACZ,AAnDH,4CAuDG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAxFoB,AAyFpB,sBA3FwB,AA4FxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAyNhB,AAvRH,6DAiEI,kBAAkB,AAClB,sBA/FsB,AAgGtB,mBAA8C,AAC9C,mBAAoB,CACpB,AArEJ,mEAyEI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CA+DX,AA1IJ,iGA+EK,aAAc,CAMd,AArFL,uGAkFM,eAAe,AACf,UAAW,CACX,AApFN,+FAyFK,iBAAkB,CAClB,AA1FL,wFA8FK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAiBrB,AArHL,gHAwGM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AAhHN,8IAmHM,uBAAuB,CACvB,AApHN,yFAyHK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AAxIL,0GAkIM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BA9JkB,CA+JlB,AAvIN,0FAiJK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAlLkB,AAmLlB,gBAAgB,AAEhB,iBAAiB,CACjB,AAxJL,0FA+JK,YAAa,CACb,AAhKL,qEAqKI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA1LJ,8EA6KK,qBAAsB,CACtB,AA9KL,yEAiLK,cAAe,CACf,AAlLL,sFAsLM,QAAS,AACT,QAAS,CACT,AAxLN,oFAgMK,kBAAkB,CAClB,AAjML,qEAoMK,eAAc,AACd,wBAAoD,CACpD,AAtML,4HA2MM,UAnOkB,CAyOlB,AAjNN,6IA8MO,gBAAgB,AAChB,4BAvOiB,CAwOjB,AAhNP,2HAsNM,UA/OgB,CAsPhB,AA7NN,4IAyNO,gBAAgB,AAChB,4BAnPe,CAqPf,AA5NP,4HAkOM,UA3PgB,CAkQhB,AAzON,6IAqOO,mBAAmB,AACnB,0BA/Pe,AAgQf,UAhQe,CAiQf,AAxOP,+GAgPM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAtPN,oHA2PM,wBAAyB,CACzB,AA5PN,2GAiQM,gBAAe,AACf,gBAAgB,CAChB,AAnQN,uIAuQO,gBAAe,AACf,mBAAmB,CACnB,AAzQP,4GA8QM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AAnRN,+CA0RG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AAxSH,qEAkSI,2BArTgB,CAsThB,AAnSJ,sEAsSI,0BAzTgB,CA0ThB,AAvSJ,qDA2SG,sBAAqB,AACrB,eAAc,AAEd,6BAAwD,AAUxD,0BA3UiB,AA4UjB,6BAtVuB,AAwVvB,eAAgB,CAChB,AA5TH,oEAiTI,4BAAwD,CAKxD,AAtTJ,iGAoTK,YAAa,CACb,AArTL,2DA+TG,cAAc,CAKd,AApUH,iEAkUI,YAAa,CACb,AAnUJ,kCA2UE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAwDjC,AAvYF,wCAkVG,YAAa,CACb,AAnVH,yDAuVG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AA5WH,wFA4VI,gBAAe,AACf,cAAc,CACd,AA9VJ,8DAmWI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA3WJ,mDAgXG,kBAAiB,AACjB,qBAAoB,AACpB,sBAvYqB,AAwYrB,mBAAmB,AACnB,iBAAgB,AAChB,UAvYe,CAwZf,AAtYH,kFAyXK,gBAAiB,AACjB,4BAAwD,CASxD,AAnYL,sGA6XM,4BAhZc,CAiZd,AA9XN,yGAiYM,yBApZc,CAqZd,AAlYN,wCA2YE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AAzZF,6CAkZG,OAAM,AACN,UAAU,CACV,AApZH,8CAuZG,gBAAgB,CAChB,AAxZH,6BA8ZE,iBAAgB,AAChB,0BAnawB,AAoaxB,sBAvayB,AAwazB,iBAAgB,AAChB,WAxamB,AAyanB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAkFpB,AA5fF,qDA6aG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAwD,AAUxD,6BApcwB,AAqcxB,0BAjdiB,AAmdjB,eAAgB,CAMhB,AAtcH,oEAsbI,4BAAwD,CAKxD,AA3bJ,iGAybK,YAAa,CACb,AA1bL,gEAmcI,mBAAkB,AAClB,kBAAkB,CAClB,AArcJ,kDA0cG,WAhdkB,AAidlB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CACjB,AA9cH,kDAkdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5doB,AA6dpB,iBAAiB,CACjB,AAzdH,8CA6dG,YAAY,CACZ,AA9dH,6CAkeG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA5eoB,AA6epB,kBAAiB,AAEjB,6BAA+B,CAiB/B,AA3fH,oDA6eI,UAhfmB,CAifnB,AA9eJ,sDAifI,UAAU,CACV,AAlfJ,kEAsfK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAzfL,6BAggBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAtiBF,mDA+gBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAriBH,qEA4hBI,sBAAqB,AACrB,UAAU,CACV,AA9hBJ,mEAkiBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AAEtB,gBAA0C,AAE1C,4BAnkBmB,CAi7BnB,AApXD,4CAKC,qBApkBuB,CAykBtB,AAVF,0CAaE,sBAxkBsB,AAykBtB,cAAe,CACf,AAfF,kCAkBE,wBA3kB6B,CA4kB7B,AAnBF,wCAsBE,yBA9kBkC,AA+kBlC,cAAe,CACf,AAxBF,gCA2BE,kBAAkB,AAElB,0BA1lBkB,AA2lBlB,6BA3lBkB,AA6lBlB,8BAA+B,AAC/B,UAAU,CACV,AAlCF,4CAsCE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AApDF,iDA6CG,MAAK,AACL,WAAW,CACX,AA/CH,kDAkDG,gBAAgB,CAChB,AAnDH,iCAuDE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AArEF,uDA+DG,2BA5nBiB,CA6nBjB,AAhEH,wDAmEG,0BAhoBiB,CAioBjB,AApEH,8CAwEE,sBAAqB,AAErB,YAAW,AAEX,0BAzoBkB,AA0oBlB,4BA1oBkB,CA6pBlB,AAhGF,oDAgFG,YAAY,CACZ,AAjFH,oDAoFG,cAjqBW,CA4qBX,AA/FH,0DAwFK,iBAAkB,CAKlB,AA7FL,wEA2FM,kBAAkB,CAClB,AA5FN,+BAoGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BArqBkB,AAsqBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA+LtB,AA3SF,4CA+GG,iBAAkB,CAClB,AAhHH,iDAmHG,yBAxqBkB,AAyqBlB,aAAY,AAEZ,SAAU,CAMV,AA5HH,+GAyHI,WAAU,AACV,sBAAsB,CACtB,AA3HJ,yDA+HG,qBAnrBgB,CA0rBhB,AAtIH,+HAiII,WAAU,AACV,uBAAsB,AAEtB,UAxrBe,CAyrBf,AArIJ,6EA2II,YAAa,CACb,AA5IJ,oDAkJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAtKH,8EA4JI,SAAS,CAST,AArKJ,wGAgKK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AApKL,2DAyKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAjvBiB,AAkvBjB,4BAlvBiB,CAmvBjB,AAtLH,4DA0LG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAhwBe,AAiwBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA3PH,kEA2MI,eAAc,AACd,yBAA4B,CAC5B,AA7MJ,kGAgNI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAnOJ,wGAyNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA7xBa,CA8xBb,AAlOL,gGAsOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAxyBc,CAqzBd,AAzPJ,sGA+OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAnzBa,CAozBb,AAxPL,qEA8PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA50BqB,AA60BrB,gBAAgB,AAChB,eAAe,CAmBf,AAlSH,2EAkRI,UAAU,CACV,AAnRJ,sHAuRK,eAAe,CACf,AAxRL,sOAgSI,YAAY,CACZ,AAjSJ,wDAqSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AA1SH,+BAgTE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA/2BkB,AAg3BlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,mBAAkB,AAClB,gBAAgB,AAEhB,cAAe,CA0Df,AAnXF,qCA4TG,eAAc,AACd,+BAA+B,CAC/B,AA9TH,wEAkUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAx4BkB,AAy4BlB,eAAgB,CAChB,AAvUJ,uDA2UG,iBAAiB,CACjB,AA5UH,uDA+UG,iBAAiB,CACjB,AAhVH,uDAmVG,iBAAiB,CACjB,AApVH,uDAuVG,iBAAiB,CACjB,AAxVH,uDA2VG,kBAAkB,CAClB,AA5VH,uDA+VG,oBAAqB,CACrB,AAhWH,gDAoWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA96BmB,AA+6BnB,qBAAqB,CACrB,AA7WH,oCAgXG,iBAAgB,AAChB,UAAU,CACV,AAIH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBA17BuB,AA27BvB,sBAz7BmB,AA07BnB,oCAAuC,AAEvC,eA58Ba,AA88Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA8Cd,AA5DD,qCAiBE,kBAAiB,AACjB,sBAAqB,AAErB,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAiCjB,AAvDF,kEAyBG,UAAW,CACX,AA1BH,8EA6BG,eAAe,AACf,eAl9BwB,CAm9BxB,AA/BH,iEAkCG,kBAAkB,CAoBlB,AAtDH,uEAqCI,qBAAqB,AACrB,kBAAkB,AAElB,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,UAAU,AAEV,WAAW,AAEX,yBAAyB,AACzB,mBAAmB,AACnB,kBAp+BgB,AAq+BhB,mBAAmB,AAEnB,uBAAwB,CACxB,AArDJ,0CA0DE,yBA7+BkB,CA8+BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA1/BuB,AA2/BvB,sBAz/BmB,AA2/BnB,eA3gCa,AA6gCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UApgCgB,CA0hChB,AA1CF,oEAuBG,WA1gCqB,AA2gCrB,kBAjgCkB,CAsgClB,AA7BH,4EA2BI,oCA9gCoB,CA+gCpB,AA5BJ,qEAgCG,yBAzgCkB,CA0gClB,AAjCH,mEAqCG,eAAc,AAEd,WA1hCqB,AA2hCrB,kBAjhCkB,CAkhClB,AAzCH,+DA6CE,YAAW,AAEX,WA/hCgB,AAgiChB,iBAAkB,CAClB,AAjDF,8DAoDE,6BAriCkB,AAuiClB,YAAW,AACX,gBAAe,AAEf,WAziCgB,AA0iChB,eAAgB,CAChB,AAKF,yBACC,aAAc,CACd,AAGD,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BAxkCoB,AAykCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BA1lCiB,CAknCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BA3mCgB,CA4mChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAQH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAuKzB,AAxKD,oDAME,sBAAqB,AACrB,6BAA4B,AAC5B,4BA5pCkB,AA6pClB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,mBAAkB,AAClB,gBAAgB,AAEhB,cAAe,CAoEf,AAnFF,0DAkBG,eAAc,AACd,+BAA+B,CAC/B,AApBH,6FAwBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BArrCkB,AAsrClB,eAAgB,CAChB,AA7BJ,+EAkCI,2BAA4B,CAC5B,AAnCJ,+EAwCI,2BAA4B,CAC5B,AAzCJ,+EA8CI,2BAA4B,CAC5B,AA/CJ,+EAoDI,2BAA4B,CAC5B,AArDJ,+EA0DI,4BAA6B,CAC7B,AA3DJ,4EA+DG,oBAAqB,CACrB,AAhEH,qEAoEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAruCmB,AAsuCnB,qBAAqB,CACrB,AA7EH,yDAgFG,iBAAgB,AAChB,UAAU,CACV,AAlFH,mDAsFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BArvCkB,AAsvClB,4BAtvCkB,CAuvClB,AAnGF,oDAuGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBApwCgB,AAqwChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAvKF,0DAwHG,eAAc,AACd,yBAA4B,CAC5B,AA1HH,0FA6HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAhJH,gGAsII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAjyCc,CAkyCd,AA/IJ,wFAmJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA5yCe,CAyzCf,AAtKH,8FA4JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAvzCc,CAwzCd","file":"tabulator_simple.min.css","sourcesContent":["/* Tabulator v4.9.3 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#fff !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#ddd !default;  //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#fff !default; //table row background color\r\n$rowBorderColor:#ddd !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#fff !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:darken($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#000;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $footerBackgroundColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t&:nth-child(even){\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&:last-of-type{\r\n\t\t\tborder-right: none;\r\n\t\t}\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\toutline:none;\r\n\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#fafafa;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#666;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\t\tposition:relative;\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-menu-item-submenu{\r\n\t\t\tpadding-right:25px;\r\n\r\n\t\t\t&::after {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tposition: absolute;\r\n\r\n\t\t\t\ttop: calc(5px + .4em);\r\n\t\t\t\tright: 10px;\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tcontent: '';\r\n\r\n\t\t\t\tborder-width: 1px 1px 0 0;\r\n\t\t\t\tborder-style: solid;\r\n\t\t\t\tborder-color: $rowBorderColor;\r\n\t\t\t\tvertical-align: top;\r\n\r\n\t\t\t\ttransform: rotate(45deg);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#fafafa;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#666;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
index bb034f7..c87696f 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 .tabulator {
   position: relative;
   border-bottom: 5px solid #222;
index 4f16d62..7c52231 100644 (file)
@@ -1,3 +1,3 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 .tabulator{position:relative;border-bottom:5px solid #222;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitDataTable]{display:inline-block}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:3px solid #3fb449;background-color:#222;color:#fff;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header.tabulator-header-hidden{display:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background-color:#222;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3fb449;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button{padding:0 8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover{cursor:pointer;opacity:.6}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder{position:relative}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button+.tabulator-title-editor{width:calc(100% - 22px)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:absolute;top:0;bottom:0;right:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden;margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter{color:#bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter{color:#3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-top:none;border-bottom:6px solid #3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter{color:#3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow{border-bottom:none;border-top:6px solid #3fb449;color:#3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter{-ms-flex-pack:center;justify-content:center;left:0;right:0;top:4px;bottom:auto}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:10}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:600%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:600%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{min-height:100%;min-width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;border-top:3px solid #3fb449;background-color:#222;text-align:right;color:#222;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-paginator label{color:#fff}.tabulator .tabulator-footer .tabulator-page-size{display:inline-block;margin:0 5px;padding:2px 5px;border:1px solid #aaa;border-radius:3px}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#222;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#3fb449}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:100;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:15}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:10}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;outline:none;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row .tabulator-cell .tabulator-traffic-light{display:inline-block;height:14px;width:14px;border-radius:14px}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:30px}.tabulator-row.tabulator-group.tabulator-group-level-2{padding-left:50px}.tabulator-row.tabulator-group.tabulator-group-level-3{padding-left:70px}.tabulator-row.tabulator-group.tabulator-group-level-4{padding-left:90px}.tabulator-row.tabulator-group.tabulator-group-level-5{padding-left:110px}.tabulator-row.tabulator-group .tabulator-group-toggle{display:inline-block}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3fb449}.tabulator-menu{position:absolute;display:inline-block;box-sizing:border-box;background:#fff;border:1px solid #aaa;box-shadow:0 0 5px 0 rgba(0,0,0,.2);font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-menu .tabulator-menu-item{position:relative;box-sizing:border-box;padding:5px 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.5}.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{cursor:pointer;background:#efefef}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu{padding-right:25px}.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu:after{display:inline-block;position:absolute;top:calc(5px + .4em);right:10px;height:7px;width:7px;content:"";border-width:1px 1px 0 0;border-style:solid;border-color:#aaa;vertical-align:top;transform:rotate(45deg)}.tabulator-menu .tabulator-menu-separator{border-top:1px solid #aaa}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:10000}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused{outline:1px solid hsla(0,0%,100%,.5)}.tabulator-edit-select-list .tabulator-edit-select-list-item.focused{outline:1px solid #1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-notice{padding:4px;color:#333;text-align:center}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700}.tabulator.tabulator-ltr{direction:ltr}.tabulator.tabulator-rtl{text-align:initial;direction:rtl}.tabulator.tabulator-rtl .tabulator-header .tabulator-col{text-align:initial;border-left:1px solid #aaa;border-right:initial}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{margin-right:0;margin-left:-1px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:0;padding-left:25px}.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{left:8px;right:auto}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell{border-right:initial;border-left:1px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch{margin-right:0;margin-left:5px;border-bottom-left-radius:0;border-bottom-right-radius:1px;border-left:initial;border-right:2px solid #aaa}.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control{margin-right:0;margin-left:5px}.tabulator.tabulator-rtl .tabulator-col-resize-handle{position:absolute;left:0;right:auto}.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev{right:0;left:auto}.tabulator-print-fullscreen{position:absolute;top:0;bottom:0;left:0;right:0;z-index:10000}body.tabulator-print-fullscreen-hide>:not(.tabulator-print-fullscreen){display:none!important}.tabulator-print-table{border-collapse:collapse}.tabulator-print-table .tabulator-print-table-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-print-table .tabulator-print-table-group:hover{cursor:pointer;background-color:#090909}.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td{padding-left:30px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td{padding-left:50px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td{padding-left:70px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td{padding-left:90px!important}.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td{padding-left:110px!important}.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle{display:inline-block}.tabulator-print-table .tabulator-print-table-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-print-table .tabulator-print-table-group span{margin-left:10px;color:#3fb449}.tabulator-print-table .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-print-table .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-print-table .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}
 /*# sourceMappingURL=tabulator_site.min.css.map */
index d80287b..618e3f9 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAElB,6BAvCgB,AAyChB,sBA1CqB,AA4CrB,eA1Ca,AA2Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAiiBxB,AAhjBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,oFAiCK,iBAAkB,CAClB,AAlCL,kCAyCE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA1CF,6BA8CE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,gCAhF2B,AAiF3B,sBApFyB,AAqFzB,WApFmB,AAqFnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAmRpB,AAjVF,qDAiEG,YAAY,CACZ,AAlEH,4CAsEG,qBAAoB,AAEpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAxGoB,AAyGpB,sBA3GwB,AA4GxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAqNhB,AAnSH,6DAiFI,kBAAkB,AAClB,yBA/GyB,AAgHzB,mBAA8C,AAC9C,mBAAoB,CACpB,AArFJ,mEAyFI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CA8DX,AAzJJ,iGA+FK,aAAc,CAMd,AArGL,uGAkGM,eAAe,AACf,UAAW,CACX,AApGN,+FAyGK,iBAAkB,CAClB,AA1GL,wFA8GK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAiBrB,AArIL,gHAwHM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AAhIN,8IAmIM,uBAAuB,CACvB,AApIN,yFAyIK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AAxJL,0GAkJM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BA9KkB,CA+KlB,AAvJN,0FAgKK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAjMkB,AAkMlB,gBAAgB,AAEhB,iBAAiB,CACjB,AAvKL,0FA6KK,YAAa,CACb,AA9KL,qEAmLI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AAxMJ,8EA2LK,qBAAsB,CACtB,AA5LL,yEA+LK,cAAe,CACf,AAhML,sFAoMM,QAAS,AACT,QAAS,CACT,AAtMN,oFA6MK,kBAAkB,CAClB,AA9ML,qEAiNK,eAAc,AACd,wBAAoD,CACpD,AAnNL,4HAuNM,UA/OkB,CAqPlB,AA7NN,6IA0NO,gBAAgB,AAChB,4BAnPiB,CAoPjB,AA5NP,2HAkOM,aA3PmB,CAkQnB,AAzON,4IAqOO,gBAAgB,AAChB,+BA/PkB,CAiQlB,AAxOP,4HA8OM,aAvQmB,CA8QnB,AArPN,6IAiPO,mBAAmB,AACnB,6BA3QkB,AA4QlB,aA5QkB,CA6QlB,AApPP,+GA4PM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAlQN,oHAuQM,wBAAyB,CACzB,AAxQN,2GA6QM,gBAAe,AACf,gBAAgB,CAChB,AA/QN,uIAmRO,gBAAe,AACf,mBAAmB,CACnB,AArRP,4GA0RM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AA/RN,+CAsSG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AApTH,qEA8SI,2BAjUgB,CAkUhB,AA/SJ,sEAkTI,0BArUgB,CAsUhB,AAnTJ,qDAuTG,sBAAqB,AACrB,eAAc,AAEd,6BAA0D,AAU1D,0BAvViB,AA0VjB,eAAgB,CAChB,AAxUH,oEA6TI,4BAA0D,CAK1D,AAlUJ,iGAgUK,YAAa,CACb,AAjUL,2DA2UG,cAAc,CAKd,AAhVH,iEA8UI,YAAa,CACb,AA/UJ,kCAqVE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAgDjC,AAzYF,wCA4VG,YAAa,CACb,AA7VH,yDAiWG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AAtXH,wFAsWI,gBAAe,AACf,cAAc,CACd,AAxWJ,8DA6WI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,cA/YyB,AAgZzB,gBAAiB,AACjB,cAAe,CACf,AArXJ,mDA0XG,kBAAiB,AACjB,qBAAoB,AACpB,sBAjZqB,AAkZrB,mBAAmB,AACnB,iBAAgB,AAChB,UAjZe,CA0Zf,AAxYH,kFAmYK,gBAAiB,AACjB,6BAA0D,AAC1D,UApagB,CAqahB,AAtYL,6BA8YE,iBAAgB,AAChB,gBAAe,AACf,6BArZ2B,AAsZ3B,sBAzZyB,AA0ZzB,iBAAgB,AAChB,WA1ZmB,AA2ZnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAuFpB,AAlfF,qDA8ZG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAA0D,AAY1D,6BAnciB,AAqcjB,eAAgB,CAMhB,AAxbH,oEAuaI,6BAA0D,AAC1D,oBAAiC,CAKjC,AA7aJ,iGA2aK,YAAa,CACb,AA5aL,gEAqbI,mBAAkB,AAClB,kBAAkB,CAClB,AAvbJ,wDA6bI,UAAU,CACV,AA9bJ,kDAmcG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9coB,AA+cpB,iBAAiB,CACjB,AA1cH,8CA8cG,YAAY,CACZ,AA/cH,6CAmdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9doB,AA+dpB,kBAAiB,AAEjB,gBAAe,AAEf,WApekB,AAqelB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAjfH,oDAmeI,aAxeyB,CAyezB,AApeJ,sDAueI,UAAU,CACV,AAxeJ,kEA4eK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AA/eL,wCAsfE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AApgBF,6CA6fG,OAAM,AACN,UAAU,CACV,AA/fH,8CAkgBG,gBAAgB,CAChB,AAngBH,6BAygBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AA/iBF,mDAwhBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AA9iBH,qEAqiBI,sBAAqB,AACrB,UAAU,CACV,AAviBJ,mEA2iBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBA5kBuB,CA87BvB,AAtXD,kCAQE,wBA/kB4B,CAglB5B,AATF,0CAYE,sBAhlBsB,AAilBtB,cAAe,CACf,AAdF,kCAiBE,wBAnlB6B,CAolB7B,AAlBF,wCAqBE,yBAtlBkC,AAulBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BAvmBkB,AAwmBlB,6BAxmBkB,AA0mBlB,8BAA+B,AAC/B,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAzoBiB,CA0oBjB,AApEH,wDAuEG,0BA7oBiB,CA8oBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BAtpBkB,AAupBlB,4BAvpBkB,CA0qBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cA9qBW,CAyrBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAlrBkB,AAmrBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA4LtB,AA5SF,iDAoHG,yBAnrBkB,AAorBlB,aAAY,AAEZ,SAAU,CAMV,AA7HH,+GA0HI,WAAU,AACV,sBAAsB,CACtB,AA5HJ,yDAgIG,qBA9rBgB,CAqsBhB,AAvIH,+HAkII,WAAU,AACV,uBAAsB,AAEtB,UAnsBe,CAosBf,AAtIJ,6EA4II,YAAa,CACb,AA7IJ,oDAmJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAvKH,8EA6JI,SAAS,CAST,AAtKJ,wGAiKK,WAAU,AACV,WAAU,AACV,eAAc,AACd,kBAhvBoB,CAivBpB,AArKL,2DA0KG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA3vBiB,AA4vBjB,4BA5vBiB,CA6vBjB,AAvLH,4DA2LG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA1wBe,AA2wBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA5PH,kEA4MI,eAAc,AACd,yBAA4B,CAC5B,AA9MJ,kGAiNI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AApOJ,wGA0NK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAvyBa,CAwyBb,AAnOL,gGAuOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAlzBc,CA+zBd,AA1PJ,sGAgPK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA7zBa,CA8zBb,AAzPL,qEA+PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WAt1BqB,AAu1BrB,gBAAgB,AAChB,eAAe,CAmBf,AAnSH,2EAmRI,UAAU,CACV,AApRJ,sHAwRK,eAAe,CACf,AAzRL,sOAiSI,YAAY,CACZ,AAlSJ,wDAsSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AA3SH,+BAgTE,sBAAqB,AACrB,4BAv3BkB,AAw3BlB,0BAAyB,AACzB,gCAn4B2B,AAo4B3B,YAAW,AACX,kBAAiB,AACjB,gBAz4ByB,AA04BzB,WAz4BmB,AA04BnB,gBAAgB,AAEhB,cAAe,CA0Df,AApXF,qCA6TG,eAAc,AACd,wBAAoD,CACpD,AA/TH,wEAmUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAl5BqB,AAm5BrB,eAAgB,CAChB,AAxUJ,uDA4UG,iBAAiB,CACjB,AA7UH,uDAgVG,iBAAiB,CACjB,AAjVH,uDAoVG,iBAAiB,CACjB,AArVH,uDAwVG,iBAAiB,CACjB,AAzVH,uDA4VG,kBAAkB,CAClB,AA7VH,uDAgWG,oBAAqB,CACrB,AAjWH,gDAqWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BAx7BsB,AAy7BtB,qBAAqB,CACrB,AA9WH,oCAiXG,iBAAgB,AAChB,aAl8B0B,CAm8B1B,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBAr8BuB,AAs8BvB,sBAp8BmB,AAq8BnB,oCAAuC,AAEvC,eAv9Ba,AAy9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA8Cd,AA5DD,qCAiBE,kBAAiB,AACjB,sBAAqB,AAErB,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAiCjB,AAvDF,kEAyBG,UAAW,CACX,AA1BH,8EA6BG,eAAe,AACf,kBA79B2B,CA89B3B,AA/BH,iEAkCG,kBAAkB,CAoBlB,AAtDH,uEAqCI,qBAAqB,AACrB,kBAAkB,AAElB,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,UAAU,AAEV,WAAW,AAEX,yBAAyB,AACzB,mBAAmB,AACnB,kBA/+BgB,AAg/BhB,mBAAmB,AAEnB,uBAAwB,CACxB,AArDJ,0CA0DE,yBAx/BkB,CAy/BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBArgCuB,AAsgCvB,sBApgCmB,AAsgCnB,eAthCa,AAwhCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UA/gCgB,CAqiChB,AA1CF,oEAuBG,WArhCqB,AAshCrB,kBA7gCkB,CAkhClB,AA7BH,4EA2BI,oCAzhCoB,CA0hCpB,AA5BJ,qEAgCG,yBArhCkB,CAshClB,AAjCH,mEAqCG,eAAc,AAEd,WAriCqB,AAsiCrB,kBA7hCkB,CA8hClB,AAzCH,+DA6CE,YAAW,AAEX,WA1iCgB,AA2iChB,iBAAkB,CAClB,AAjDF,8DAoDE,6BAhjCkB,AAkjClB,YAAW,AACX,gBAAe,AAEf,WApjCgB,AAqjChB,eAAgB,CAChB,AAMF,yBACC,aAAc,CACd,AAGD,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BAplCoB,AAqlCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BAtmCiB,CA8nCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BAvnCgB,CAwnChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAOH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAsKzB,AAvKD,oDAKE,sBAAqB,AACrB,4BArqCkB,AAsqClB,0BAAyB,AACzB,gCAjrC2B,AAkrC3B,YAAW,AACX,kBAAiB,AACjB,gBAvrCyB,AAwrCzB,WAvrCmB,AAwrCnB,gBAAgB,AAEhB,cAAe,CAmEf,AAlFF,0DAkBG,eAAc,AACd,wBAAoD,CACpD,AApBH,6FAwBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAhsCqB,AAisCrB,eAAgB,CAChB,AA7BJ,+EAkCI,2BAA4B,CAC5B,AAnCJ,+EAwCI,2BAA4B,CAC5B,AAzCJ,+EA8CI,2BAA4B,CAC5B,AA/CJ,+EAoDI,2BAA4B,CAC5B,AArDJ,+EA0DI,4BAA6B,CAC7B,AA3DJ,4EA8DG,oBAAqB,CACrB,AA/DH,qEAmEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BA/uCsB,AAgvCtB,qBAAqB,CACrB,AA5EH,yDA+EG,iBAAgB,AAChB,aAzvC0B,CA0vC1B,AAjFH,mDAqFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA/vCkB,AAgwClB,4BAhwCkB,CAiwClB,AAlGF,oDAsGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA9wCgB,AA+wChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAtKF,0DAuHG,eAAc,AACd,yBAA4B,CAC5B,AAzHH,0FA4HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AA/IH,gGAqII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3yCc,CA4yCd,AA9IJ,wFAkJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAtzCe,CAm0Cf,AArKH,8FA2JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAj0Cc,CAk0Cd","file":"tabulator_site.min.css","sourcesContent":["/* Tabulator v4.8.4 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#222 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#222 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#3FB449 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #3FB449 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#222 !default; //border to tabulator\r\n$footerTextColor:#222 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#3FB449 !default; //footer bottom seperator color\r\n$footerActiveColor:$footerSeperatorColor !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder-bottom: 5px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitColumns\"]{\r\n\t\t.tabulator-row{\r\n\t\t\t.tabulator-cell{\r\n\t\t\t\t&:last-of-type{\r\n\t\t\t\t\tborder-right: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:8px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\t// border-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$headerSeperatorColor;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:lighten($headerBackgroundColor, 15%) !important;\r\n\t\t\t\t\tcolor:$headerTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tpadding-top:8px;\r\n\t\tborder-top:3px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-8px -10px 8px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\t\t\t\tcolor:$headerTextColor !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// border-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tlabel{\r\n\t\t\t\tcolor:#fff;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\toutline:none;\r\n\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:$sortArrowActive;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\t\tposition:relative;\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-menu-item-submenu{\r\n\t\t\tpadding-right:25px;\r\n\r\n\t\t\t&::after {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tposition: absolute;\r\n\r\n\t\t\t\ttop: calc(5px + .4em);\r\n\t\t\t\tright: 10px;\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tcontent: '';\r\n\r\n\t\t\t\tborder-width: 1px 1px 0 0;\r\n\t\t\t\tborder-style: solid;\r\n\t\t\t\tborder-color: $rowBorderColor;\r\n\t\t\t\tvertical-align: top;\r\n\r\n\t\t\t\ttransform: rotate(45deg);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAElB,6BAvCgB,AAyChB,sBA1CqB,AA4CrB,eA1Ca,AA2Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAiiBxB,AAhjBD,iFAoBI,cAAc,CACd,AArBJ,0CA0BE,oBAAqB,CACrB,AA3BF,oFAiCK,iBAAkB,CAClB,AAlCL,kCAyCE,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA1CF,6BA8CE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,gCAhF2B,AAiF3B,sBApFyB,AAqFzB,WApFmB,AAqFnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAmRpB,AAjVF,qDAiEG,YAAY,CACZ,AAlEH,4CAsEG,qBAAoB,AAEpB,kBAAiB,AACjB,sBAAqB,AACrB,4BAxGoB,AAyGpB,sBA3GwB,AA4GxB,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAqNhB,AAnSH,6DAiFI,kBAAkB,AAClB,yBA/GyB,AAgHzB,mBAA8C,AAC9C,mBAAoB,CACpB,AArFJ,mEAyFI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CA8DX,AAzJJ,iGA+FK,aAAc,CAMd,AArGL,uGAkGM,eAAe,AACf,UAAW,CACX,AApGN,+FAyGK,iBAAkB,CAClB,AA1GL,wFA8GK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAiBrB,AArIL,gHAwHM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AAhIN,8IAmIM,uBAAuB,CACvB,AApIN,yFAyIK,oBAAa,AAAb,aAAa,AACb,sBAAmB,AAAnB,mBAAmB,AAEnB,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,SAAS,CAST,AAxJL,0GAkJM,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BA9KkB,CA+KlB,AAvJN,0FAgKK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAjMkB,AAkMlB,gBAAgB,AAEhB,iBAAiB,CACjB,AAvKL,0FA6KK,YAAa,CACb,AA9KL,qEAmLI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AAxMJ,8EA2LK,qBAAsB,CACtB,AA5LL,yEA+LK,cAAe,CACf,AAhML,sFAoMM,QAAS,AACT,QAAS,CACT,AAtMN,oFA6MK,kBAAkB,CAClB,AA9ML,qEAiNK,eAAc,AACd,wBAAoD,CACpD,AAnNL,4HAuNM,UA/OkB,CAqPlB,AA7NN,6IA0NO,gBAAgB,AAChB,4BAnPiB,CAoPjB,AA5NP,2HAkOM,aA3PmB,CAkQnB,AAzON,4IAqOO,gBAAgB,AAChB,+BA/PkB,CAiQlB,AAxOP,4HA8OM,aAvQmB,CA8QnB,AArPN,6IAiPO,mBAAmB,AACnB,6BA3QkB,AA4QlB,aA5QkB,CA6QlB,AApPP,+GA4PM,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAlQN,oHAuQM,wBAAyB,CACzB,AAxQN,2GA6QM,gBAAe,AACf,gBAAgB,CAChB,AA/QN,uIAmRO,gBAAe,AACf,mBAAmB,CACnB,AArRP,4GA0RM,qBAAuB,AAAvB,uBAAuB,AACvB,OAAM,AACN,QAAO,AACP,QAAO,AACP,WAAW,CACX,AA/RN,+CAsSG,qBAAqB,AACrB,kBAAkB,AAIlB,UAAW,CASX,AApTH,qEA8SI,2BAjUgB,CAkUhB,AA/SJ,sEAkTI,0BArUgB,CAsUhB,AAnTJ,qDAuTG,sBAAqB,AACrB,eAAc,AAEd,6BAA0D,AAU1D,0BAvViB,AA0VjB,eAAgB,CAChB,AAxUH,oEA6TI,4BAA0D,CAK1D,AAlUJ,iGAgUK,YAAa,CACb,AAjUL,2DA2UG,cAAc,CAKd,AAhVH,iEA8UI,YAAa,CACb,AA/UJ,kCAqVE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAgDjC,AAzYF,wCA4VG,YAAa,CACb,AA7VH,yDAiWG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAOlB,UAAU,CAYV,AAtXH,wFAsWI,gBAAe,AACf,cAAc,CACd,AAxWJ,8DA6WI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,cA/YyB,AAgZzB,gBAAiB,AACjB,cAAe,CACf,AArXJ,mDA0XG,kBAAiB,AACjB,qBAAoB,AACpB,sBAjZqB,AAkZrB,mBAAmB,AACnB,iBAAgB,AAChB,UAjZe,CA0Zf,AAxYH,kFAmYK,gBAAiB,AACjB,6BAA0D,AAC1D,UApagB,CAqahB,AAtYL,6BA8YE,iBAAgB,AAChB,gBAAe,AACf,6BArZ2B,AAsZ3B,sBAzZyB,AA0ZzB,iBAAgB,AAChB,WA1ZmB,AA2ZnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAuFpB,AAlfF,qDA8ZG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAA0D,AAY1D,6BAnciB,AAqcjB,eAAgB,CAMhB,AAxbH,oEAuaI,6BAA0D,AAC1D,oBAAiC,CAKjC,AA7aJ,iGA2aK,YAAa,CACb,AA5aL,gEAqbI,mBAAkB,AAClB,kBAAkB,CAClB,AAvbJ,wDA6bI,UAAU,CACV,AA9bJ,kDAmcG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9coB,AA+cpB,iBAAiB,CACjB,AA1cH,8CA8cG,YAAY,CACZ,AA/cH,6CAmdG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBA9doB,AA+dpB,kBAAiB,AAEjB,gBAAe,AAEf,WApekB,AAqelB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAjfH,oDAmeI,aAxeyB,CAyezB,AApeJ,sDAueI,UAAU,CACV,AAxeJ,kEA4eK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AA/eL,wCAsfE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AApgBF,6CA6fG,OAAM,AACN,UAAU,CACV,AA/fH,8CAkgBG,gBAAgB,CAChB,AAngBH,6BAygBE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,YAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AA/iBF,mDAwhBG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AA9iBH,qEAqiBI,sBAAqB,AACrB,UAAU,CACV,AAviBJ,mEA2iBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBA5kBuB,CA87BvB,AAtXD,kCAQE,wBA/kB4B,CAglB5B,AATF,0CAYE,sBAhlBsB,AAilBtB,cAAe,CACf,AAdF,kCAiBE,wBAnlB6B,CAolB7B,AAlBF,wCAqBE,yBAtlBkC,AAulBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BAvmBkB,AAwmBlB,6BAxmBkB,AA0mBlB,8BAA+B,AAC/B,UAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,UAAW,CASX,AAzEF,uDAmEG,2BAzoBiB,CA0oBjB,AApEH,wDAuEG,0BA7oBiB,CA8oBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BAtpBkB,AAupBlB,4BAvpBkB,CA0qBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cA9qBW,CAyrBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAlrBkB,AAmrBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CA4LtB,AA5SF,iDAoHG,yBAnrBkB,AAorBlB,aAAY,AAEZ,SAAU,CAMV,AA7HH,+GA0HI,WAAU,AACV,sBAAsB,CACtB,AA5HJ,yDAgIG,qBA9rBgB,CAqsBhB,AAvIH,+HAkII,WAAU,AACV,uBAAsB,AAEtB,UAnsBe,CAosBf,AAtIJ,6EA4II,YAAa,CACb,AA7IJ,oDAmJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAvKH,8EA6JI,SAAS,CAST,AAtKJ,wGAiKK,WAAU,AACV,WAAU,AACV,eAAc,AACd,kBAhvBoB,CAivBpB,AArKL,2DA0KG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA3vBiB,AA4vBjB,4BA5vBiB,CA6vBjB,AAvLH,4DA2LG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA1wBe,AA2wBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA5PH,kEA4MI,eAAc,AACd,yBAA4B,CAC5B,AA9MJ,kGAiNI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AApOJ,wGA0NK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAvyBa,CAwyBb,AAnOL,gGAuOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAlzBc,CA+zBd,AA1PJ,sGAgPK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA7zBa,CA8zBb,AAzPL,qEA+PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WAt1BqB,AAu1BrB,gBAAgB,AAChB,eAAe,CAmBf,AAnSH,2EAmRI,UAAU,CACV,AApRJ,sHAwRK,eAAe,CACf,AAzRL,sOAiSI,YAAY,CACZ,AAlSJ,wDAsSG,qBAAqB,AACrB,YAAW,AACX,WAAU,AAEV,kBAAkB,CAClB,AA3SH,+BAgTE,sBAAqB,AACrB,4BAv3BkB,AAw3BlB,0BAAyB,AACzB,gCAn4B2B,AAo4B3B,YAAW,AACX,kBAAiB,AACjB,gBAz4ByB,AA04BzB,WAz4BmB,AA04BnB,gBAAgB,AAEhB,cAAe,CA0Df,AApXF,qCA6TG,eAAc,AACd,wBAAoD,CACpD,AA/TH,wEAmUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAl5BqB,AAm5BrB,eAAgB,CAChB,AAxUJ,uDA4UG,iBAAiB,CACjB,AA7UH,uDAgVG,iBAAiB,CACjB,AAjVH,uDAoVG,iBAAiB,CACjB,AArVH,uDAwVG,iBAAiB,CACjB,AAzVH,uDA4VG,kBAAkB,CAClB,AA7VH,uDAgWG,oBAAqB,CACrB,AAjWH,gDAqWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BAx7BsB,AAy7BtB,qBAAqB,CACrB,AA9WH,oCAiXG,iBAAgB,AAChB,aAl8B0B,CAm8B1B,AAKH,gBACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,gBAr8BuB,AAs8BvB,sBAp8BmB,AAq8BnB,oCAAuC,AAEvC,eAv9Ba,AAy9Bb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA8Cd,AA5DD,qCAiBE,kBAAiB,AACjB,sBAAqB,AAErB,iBAAgB,AAEhB,yBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CAiCjB,AAvDF,kEAyBG,UAAW,CACX,AA1BH,8EA6BG,eAAe,AACf,kBA79B2B,CA89B3B,AA/BH,iEAkCG,kBAAkB,CAoBlB,AAtDH,uEAqCI,qBAAqB,AACrB,kBAAkB,AAElB,qBAAqB,AACrB,WAAW,AACX,WAAW,AACX,UAAU,AAEV,WAAW,AAEX,yBAAyB,AACzB,mBAAmB,AACnB,kBA/+BgB,AAg/BhB,mBAAmB,AAEnB,uBAAwB,CACxB,AArDJ,0CA0DE,yBAx/BkB,CAy/BlB,AAGF,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBArgCuB,AAsgCvB,sBApgCmB,AAsgCnB,eAthCa,AAwhCb,gBAAe,AACf,iCAAiC,AAEjC,aAAc,CA6Cd,AA5DD,6DAkBE,YAAW,AAEX,UA/gCgB,CAqiChB,AA1CF,oEAuBG,WArhCqB,AAshCrB,kBA7gCkB,CAkhClB,AA7BH,4EA2BI,oCAzhCoB,CA0hCpB,AA5BJ,qEAgCG,yBArhCkB,CAshClB,AAjCH,mEAqCG,eAAc,AAEd,WAriCqB,AAsiCrB,kBA7hCkB,CA8hClB,AAzCH,+DA6CE,YAAW,AAEX,WA1iCgB,AA2iChB,iBAAkB,CAClB,AAjDF,8DAoDE,6BAhjCkB,AAkjClB,YAAW,AACX,gBAAe,AAEf,WApjCgB,AAqjChB,eAAgB,CAChB,AAMF,yBACC,aAAc,CACd,AAGD,yBACC,mBAAmB,AACnB,aAAc,CAwEd,AA1ED,0DAMG,mBAAmB,AACnB,2BAplCoB,AAqlCpB,oBAAoB,CAsBpB,AA9BH,wGAYK,eAAoB,AACpB,gBAAgB,CAChB,AAdL,kGAmBK,gBAAe,AACf,iBAAiB,CACjB,AArBL,kGA0BK,SAAQ,AACR,UAAa,CACb,AA5BL,wDAmCG,qBAAoB,AACpB,0BAtmCiB,CA8nCjB,AA5DH,oFA8CI,eAAoB,AACpB,gBAAe,AAEf,4BAAiC,AACjC,+BAA8B,AAE9B,oBAAmB,AACnB,2BAvnCgB,CAwnChB,AAtDJ,qFAyDI,eAAoB,AACpB,eAAe,CACf,AA3DJ,sDAiEE,kBAAiB,AACjB,OAAM,AACN,UAAU,CAMV,AAzEF,2DAsEG,QAAO,AACP,SAAS,CACT,AAOH,4BACC,kBAAkB,AAClB,MAAK,AACL,SAAQ,AACR,OAAM,AACN,QAAO,AAEP,aAAc,CACd,AAED,uEACC,sBAAuB,CACvB,AAED,uBACC,wBAAyB,CAsKzB,AAvKD,oDAKE,sBAAqB,AACrB,4BArqCkB,AAsqClB,0BAAyB,AACzB,gCAjrC2B,AAkrC3B,YAAW,AACX,kBAAiB,AACjB,gBAvrCyB,AAwrCzB,WAvrCmB,AAwrCnB,gBAAgB,AAEhB,cAAe,CAmEf,AAlFF,0DAkBG,eAAc,AACd,wBAAoD,CACpD,AApBH,6FAwBI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAhsCqB,AAisCrB,eAAgB,CAChB,AA7BJ,+EAkCI,2BAA4B,CAC5B,AAnCJ,+EAwCI,2BAA4B,CAC5B,AAzCJ,+EA8CI,2BAA4B,CAC5B,AA/CJ,+EAoDI,2BAA4B,CAC5B,AArDJ,+EA0DI,4BAA6B,CAC7B,AA3DJ,4EA8DG,oBAAqB,CACrB,AA/DH,qEAmEG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BA/uCsB,AAgvCtB,qBAAqB,CACrB,AA5EH,yDA+EG,iBAAgB,AAChB,aAzvC0B,CA0vC1B,AAjFH,mDAqFE,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA/vCkB,AAgwClB,4BAhwCkB,CAiwClB,AAlGF,oDAsGE,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA9wCgB,AA+wChB,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAkDf,AAtKF,0DAuHG,eAAc,AACd,yBAA4B,CAC5B,AAzHH,0FA4HG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AA/IH,gGAqII,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3yCc,CA4yCd,AA9IJ,wFAkJG,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAtzCe,CAm0Cf,AArKH,8FA2JI,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAj0Cc,CAk0Cd","file":"tabulator_site.min.css","sourcesContent":["/* Tabulator v4.9.3 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#222 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#222 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default;  //header border color\r\n$headerSeperatorColor:#3FB449 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #3FB449 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#222 !default; //border to tabulator\r\n$footerTextColor:#222 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#3FB449 !default; //footer bottom seperator color\r\n$footerActiveColor:$footerSeperatorColor !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder-bottom: 5px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitDataTable\"]{\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitColumns\"]{\r\n\t\t.tabulator-row{\r\n\t\t\t.tabulator-cell{\r\n\t\t\t\t&:last-of-type{\r\n\t\t\t\t\tborder-right: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t&.tabulator-header-hidden{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid  $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:8px;\r\n\r\n\t\t\t\t//header menu button\r\n\t\t\t\t.tabulator-header-menu-button{\r\n\t\t\t\t\tpadding: 0 8px;\r\n\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tcursor: pointer;\r\n\t\t\t\t\t\topacity: .6;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title and sort arrow\r\n\t\t\t\t.tabulator-col-title-holder{\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-header-menu-button + .tabulator-title-editor{\r\n\t\t\t\t\t\twidth:calc(100% - 22px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\tdisplay: flex;\r\n\t\t\t\t\talign-items: center;\r\n\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:0;\r\n\t\t\t\t\tbottom:0;\r\n\t\t\t\t\tright:4px;\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\twidth: 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowInactive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-col-sorter{\r\n\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\r\n\t\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\t\tcolor: $sortArrowActive;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-col-sorter{\r\n\t\t\t\t\t\tjustify-content: center;\r\n\t\t\t\t\t\tleft:0;\r\n\t\t\t\t\t\tright:0;\r\n\t\t\t\t\t\ttop:4px;\r\n\t\t\t\t\t\tbottom:auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\t// border-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:600%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tmin-height:100%;\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$headerSeperatorColor;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:lighten($headerBackgroundColor, 15%) !important;\r\n\t\t\t\t\tcolor:$headerTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tpadding-top:8px;\r\n\t\tborder-top:3px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-8px -10px 8px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\t\t\t\tcolor:$headerTextColor !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// border-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-paginator{\r\n\t\t\tlabel{\r\n\t\t\t\tcolor:#fff;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//page size select element\r\n\t\t.tabulator-page-size{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 5px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid  $rowBorderColor;\r\n\t\tborder-bottom:1px solid  $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid  $editBoxColor;\r\n\t\t\toutline:none;\r\n\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:$sortArrowActive;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-traffic-light{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\theight:14px;\r\n\t\t\twidth:14px;\r\n\r\n\t\t\tborder-radius:14px;\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\tpadding-left:30px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\tpadding-left:50px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\tpadding-left:70px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\tpadding-left:90px;\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\tpadding-left:110px;\r\n\t\t}\r\n\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-menu{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\tbox-shadow: 0 0 5px 0 rgba(0, 0, 0, .2);\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-menu-item{\r\n\t\tposition:relative;\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px 10px;\r\n\r\n\t\tuser-select: none;\r\n\r\n\t\t&.tabulator-menu-item-disabled{\r\n\t\t\topacity: .5;\r\n\t\t}\r\n\r\n\t\t&:not(.tabulator-menu-item-disabled):hover{\r\n\t\t\tcursor: pointer;\r\n\t\t\tbackground: $rowAltBackgroundColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-menu-item-submenu{\r\n\t\t\tpadding-right:25px;\r\n\r\n\t\t\t&::after {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tposition: absolute;\r\n\r\n\t\t\t\ttop: calc(5px + .4em);\r\n\t\t\t\tright: 10px;\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tcontent: '';\r\n\r\n\t\t\t\tborder-width: 1px 1px 0 0;\r\n\t\t\t\tborder-style: solid;\r\n\t\t\t\tborder-color: $rowBorderColor;\r\n\t\t\t\tvertical-align: top;\r\n\r\n\t\t\t\ttransform: rotate(45deg);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-menu-separator{\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\r\n\t\t\t&.focused{\r\n\t\t\t\toutline:1px solid rgba($rowBackgroundColor, .5);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.focused{\r\n\t\t\toutline:1px solid $editBoxColor;\r\n\t\t}\r\n\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-notice{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}\r\n\r\n\r\n//RTL Styling\r\n\r\n.tabulator.tabulator-ltr{\r\n\tdirection: ltr;\r\n}\r\n\r\n\r\n.tabulator.tabulator-rtl{\r\n\ttext-align: initial;\r\n\tdirection: rtl;\r\n\r\n\t.tabulator-header {\r\n\t\t.tabulator-col{\r\n\t\t\ttext-align: initial;\r\n\t\t\tborder-left:1px solid $headerBorderColor;\r\n\t\t\tborder-right:initial;\r\n\r\n\t\t\t&.tabulator-col-group{\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tmargin-right:initial;\r\n\t\t\t\t\tmargin-left:-1px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\tpadding-left:25px;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tleft:8px;\r\n\t\t\t\t\tright:initial;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-row{\r\n\t\t.tabulator-cell{\r\n\t\t\tborder-right:initial;\r\n\t\t\tborder-left:1px solid $rowBorderColor;\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t// &:first-child{\r\n\t\t\t// \t.tabulator-col-resize-handle.prev{\r\n\t\t\t// \t\tdisplay: none;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t.tabulator-data-tree-branch{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\r\n\t\t\t\tborder-bottom-left-radius:initial;\r\n\t\t\t\tborder-bottom-right-radius:1px;\r\n\r\n\t\t\t\tborder-left:initial;\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control{\r\n\t\t\t\tmargin-right:initial;\r\n\t\t\t\tmargin-left:5px;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tleft:0;\r\n\t\tright:auto;\r\n\r\n\t\t&.prev{\r\n\t\t\tright:0;\r\n\t\t\tleft:auto;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n// Table print styling\r\n\r\n.tabulator-print-fullscreen{\r\n\tposition: absolute;\r\n\ttop:0;\r\n\tbottom:0;\r\n\tleft:0;\r\n\tright:0;\r\n\r\n\tz-index: 10000;\r\n}\r\n\r\nbody.tabulator-print-fullscreen-hide>*:not(.tabulator-print-fullscreen){\r\n\tdisplay:none !important;\r\n}\r\n\r\n.tabulator-print-table{\r\n\tborder-collapse: collapse;\r\n\r\n\t//row grouping element\r\n\t.tabulator-print-table-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:30px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:50px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:70px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:90px !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\ttd{\r\n\t\t\t\tpadding-left:110px !important;\r\n\t\t\t}\r\n\t\t}\r\n\t\t.tabulator-group-toggle{\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-data-tree-branch{\r\n\t\tdisplay:inline-block;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:9px;\r\n\t\twidth:7px;\r\n\r\n\t\tmargin-top:-9px;\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\tborder-left:2px solid $rowBorderColor;\r\n\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t}\r\n\r\n\t.tabulator-data-tree-control{\r\n\r\n\t\tdisplay:inline-flex;\r\n\t\tjustify-content:center;\r\n\t\talign-items:center;\r\n\t\tvertical-align:middle;\r\n\r\n\t\theight:11px;\r\n\t\twidth:11px;\r\n\r\n\t\tmargin-right:5px;\r\n\r\n\t\tborder:1px solid $rowTextColor;\r\n\t\tborder-radius:2px;\r\n\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\toverflow:hidden;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: transparent;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control-expand{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\theight: 7px;\r\n\t\t\twidth: 1px;\r\n\r\n\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tcontent: \"\";\r\n\t\t\t\tleft: -3px;\r\n\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\theight: 1px;\r\n\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/app/vendors/tabulator/css/tabulator_site.orig.css b/app/vendors/tabulator/css/tabulator_site.orig.css
new file mode 100644 (file)
index 0000000..bb034f7
--- /dev/null
@@ -0,0 +1,1109 @@
+/* Tabulator v4.8.4 (c) Oliver Folkerd */
+.tabulator {
+  position: relative;
+  border-bottom: 5px solid #222;
+  background-color: #fff;
+  font-size: 14px;
+  text-align: left;
+  overflow: hidden;
+  -ms-transform: translatez(0);
+  transform: translatez(0);
+}
+
+.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
+  min-width: 100%;
+}
+
+.tabulator[tabulator-layout="fitDataTable"] {
+  display: inline-block;
+}
+
+.tabulator[tabulator-layout="fitColumns"] .tabulator-row .tabulator-cell:last-of-type {
+  border-right: none;
+}
+
+.tabulator.tabulator-block-select {
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator .tabulator-header {
+  position: relative;
+  box-sizing: border-box;
+  width: 100%;
+  border-bottom: 3px solid #394462;
+  background-color: #222;
+  color: #fff;
+  font-weight: bold;
+  white-space: nowrap;
+  overflow: hidden;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-header.tabulator-header-hidden {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  background-color: #222;
+  text-align: left;
+  vertical-align: bottom;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-moving {
+  position: absolute;
+  border: 1px solid #394462;
+  background: #090909;
+  pointer-events: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
+  box-sizing: border-box;
+  position: relative;
+  padding: 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button {
+  padding: 0 8px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-header-menu-button:hover {
+  cursor: pointer;
+  opacity: .6;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title-holder {
+  position: relative;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
+  box-sizing: border-box;
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  vertical-align: bottom;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
+  box-sizing: border-box;
+  width: 100%;
+  border: 1px solid #999;
+  padding: 1px;
+  background: #fff;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-header-menu-button + .tabulator-title-editor {
+  width: calc(100% - 22px);
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 4px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  width: 0;
+  height: 0;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  position: relative;
+  display: -ms-flexbox;
+  display: flex;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+  margin-right: -1px;
+}
+
+.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
+  position: relative;
+  box-sizing: border-box;
+  margin-top: 2px;
+  width: 100%;
+  text-align: center;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
+  height: auto !important;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
+  margin-top: 3px;
+}
+
+.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {
+  width: 0;
+  height: 0;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 25px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter {
+  color: #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #bbb;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter {
+  color: #394462;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-top: none;
+  border-bottom: 6px solid #394462;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter {
+  color: #394462;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-col-sorter .tabulator-arrow {
+  border-bottom: none;
+  border-top: 6px solid #394462;
+  color: #394462;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {
+  -ms-writing-mode: tb-rl;
+      writing-mode: vertical-rl;
+  text-orientation: mixed;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {
+  -ms-transform: rotate(180deg);
+      transform: rotate(180deg);
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-top: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {
+  padding-right: 0;
+  padding-bottom: 20px;
+}
+
+.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-sorter {
+  -ms-flex-pack: center;
+      justify-content: center;
+  left: 0;
+  right: 0;
+  top: 4px;
+  bottom: auto;
+}
+
+.tabulator .tabulator-header .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  z-index: 10;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder {
+  box-sizing: border-box;
+  min-width: 600%;
+  background: #3c3c3c !important;
+  border-top: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
+  background: #3c3c3c !important;
+}
+
+.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder {
+  min-width: 600%;
+}
+
+.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {
+  display: none;
+}
+
+.tabulator .tabulator-tableHolder {
+  position: relative;
+  width: 100%;
+  white-space: nowrap;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.tabulator .tabulator-tableHolder:focus {
+  outline: none;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder {
+  box-sizing: border-box;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] {
+  min-height: 100%;
+  min-width: 100%;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-placeholder span {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px;
+  color: #394462;
+  font-weight: bold;
+  font-size: 20px;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table {
+  position: relative;
+  display: inline-block;
+  background-color: #fff;
+  white-space: nowrap;
+  overflow: visible;
+  color: #333;
+}
+
+.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
+  font-weight: bold;
+  background: #484848 !important;
+  color: #fff;
+}
+
+.tabulator .tabulator-footer {
+  padding: 5px 10px;
+  padding-top: 8px;
+  border-top: 3px solid #394462;
+  background-color: #222;
+  text-align: right;
+  color: #222;
+  font-weight: bold;
+  white-space: nowrap;
+  -ms-user-select: none;
+      user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder {
+  box-sizing: border-box;
+  width: calc(100% + 20px);
+  margin: -8px -10px 8px -10px;
+  text-align: left;
+  background: #3c3c3c !important;
+  border-bottom: 1px solid #aaa;
+  overflow: hidden;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
+  background: #3c3c3c !important;
+  color: #fff !important;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
+  display: none;
+}
+
+.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
+  margin-bottom: -5px;
+  border-bottom: none;
+}
+
+.tabulator .tabulator-footer .tabulator-paginator label {
+  color: #fff;
+}
+
+.tabulator .tabulator-footer .tabulator-page-size {
+  display: inline-block;
+  margin: 0 5px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+}
+
+.tabulator .tabulator-footer .tabulator-pages {
+  margin: 0 7px;
+}
+
+.tabulator .tabulator-footer .tabulator-page {
+  display: inline-block;
+  margin: 0 2px;
+  padding: 2px 5px;
+  border: 1px solid #aaa;
+  border-radius: 3px;
+  background: #fff;
+  color: #222;
+  font-family: inherit;
+  font-weight: inherit;
+  font-size: inherit;
+}
+
+.tabulator .tabulator-footer .tabulator-page.active {
+  color: #394462;
+}
+
+.tabulator .tabulator-footer .tabulator-page:disabled {
+  opacity: .5;
+}
+
+.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+  color: #fff;
+}
+
+.tabulator .tabulator-col-resize-handle {
+  position: absolute;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  width: 5px;
+}
+
+.tabulator .tabulator-col-resize-handle.prev {
+  left: 0;
+  right: auto;
+}
+
+.tabulator .tabulator-col-resize-handle:hover {
+  cursor: ew-resize;
+}
+
+.tabulator .tabulator-loader {
+  position: absolute;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+      align-items: center;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  height: 100%;
+  width: 100%;
+  background: rgba(0, 0, 0, 0.4);
+  text-align: center;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg {
+  display: inline-block;
+  margin: 0 auto;
+  padding: 10px 20px;
+  border-radius: 10px;
+  background: #fff;
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {
+  border: 4px solid #333;
+  color: #000;
+}
+
+.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {
+  border: 4px solid #D00;
+  color: #590000;
+}
+
+.tabulator-row {
+  position: relative;
+  box-sizing: border-box;
+  min-height: 22px;
+  background-color: #fff;
+}
+
+.tabulator-row.tabulator-row-even {
+  background-color: #EFEFEF;
+}
+
+.tabulator-row.tabulator-selectable:hover {
+  background-color: #bbb;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-selected {
+  background-color: #9ABCEA;
+}
+
+.tabulator-row.tabulator-selected:hover {
+  background-color: #769BCC;
+  cursor: pointer;
+}
+
+.tabulator-row.tabulator-row-moving {
+  border: 1px solid #000;
+  background: #fff;
+}
+
+.tabulator-row.tabulator-moving {
+  position: absolute;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+  pointer-events: none !important;
+  z-index: 15;
+}
+
+.tabulator-row .tabulator-row-resize-handle {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 5px;
+}
+
+.tabulator-row .tabulator-row-resize-handle.prev {
+  top: 0;
+  bottom: auto;
+}
+
+.tabulator-row .tabulator-row-resize-handle:hover {
+  cursor: ns-resize;
+}
+
+.tabulator-row .tabulator-frozen {
+  display: inline-block;
+  position: absolute;
+  background-color: inherit;
+  z-index: 10;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-left {
+  border-right: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-frozen.tabulator-frozen-right {
+  border-left: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse {
+  box-sizing: border-box;
+  padding: 5px;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #aaa;
+}
+
+.tabulator-row .tabulator-responsive-collapse:empty {
+  display: none;
+}
+
+.tabulator-row .tabulator-responsive-collapse table {
+  font-size: 14px;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td {
+  position: relative;
+}
+
+.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {
+  padding-right: 10px;
+}
+
+.tabulator-row .tabulator-cell {
+  display: inline-block;
+  position: relative;
+  box-sizing: border-box;
+  padding: 6px;
+  border-right: 1px solid #aaa;
+  vertical-align: middle;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing {
+  border: 1px solid #1D68CD;
+  outline: none;
+  padding: 0;
+}
+
+.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {
+  border: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail {
+  border: 1px solid #dd0000;
+}
+
+.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {
+  border: 1px;
+  background: transparent;
+  color: #dd0000;
+}
+
+.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
+  width: 80%;
+}
+
+.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
+  width: 100%;
+  height: 3px;
+  margin-top: 2px;
+  background: #394462;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+      align-items: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -webkit-user-select: none;
+  -o-user-select: none;
+  height: 15px;
+  width: 15px;
+  border-radius: 20px;
+  background: #666;
+  color: #fff;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {
+  opacity: .7;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {
+  display: initial;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {
+  display: none;
+}
+
+.tabulator-row .tabulator-cell .tabulator-traffic-light {
+  display: inline-block;
+  height: 14px;
+  width: 14px;
+  border-radius: 14px;
+}
+
+.tabulator-row.tabulator-group {
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #000;
+  border-bottom: 2px solid #394462;
+  padding: 5px;
+  padding-left: 10px;
+  background: #222;
+  color: #fff;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-row.tabulator-group:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #394462;
+  border-bottom: 0;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-1 {
+  padding-left: 30px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-2 {
+  padding-left: 50px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-3 {
+  padding-left: 70px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-4 {
+  padding-left: 90px;
+}
+
+.tabulator-row.tabulator-group.tabulator-group-level-5 {
+  padding-left: 110px;
+}
+
+.tabulator-row.tabulator-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-row.tabulator-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #394462;
+  vertical-align: middle;
+}
+
+.tabulator-row.tabulator-group span {
+  margin-left: 10px;
+  color: #394462;
+}
+
+.tabulator-menu {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  background: #fff;
+  border: 1px solid #aaa;
+  box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-menu .tabulator-menu-item {
+  position: relative;
+  box-sizing: border-box;
+  padding: 5px 10px;
+  -webkit-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled {
+  opacity: .5;
+}
+
+.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover {
+  cursor: pointer;
+  background: #EFEFEF;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu {
+  padding-right: 25px;
+}
+
+.tabulator-menu .tabulator-menu-item.tabulator-menu-item-submenu::after {
+  display: inline-block;
+  position: absolute;
+  top: calc(5px + .4em);
+  right: 10px;
+  height: 7px;
+  width: 7px;
+  content: '';
+  border-width: 1px 1px 0 0;
+  border-style: solid;
+  border-color: #aaa;
+  vertical-align: top;
+  -ms-transform: rotate(45deg);
+      transform: rotate(45deg);
+}
+
+.tabulator-menu .tabulator-menu-separator {
+  border-top: 1px solid #aaa;
+}
+
+.tabulator-edit-select-list {
+  position: absolute;
+  display: inline-block;
+  box-sizing: border-box;
+  max-height: 200px;
+  background: #fff;
+  border: 1px solid #aaa;
+  font-size: 14px;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+  z-index: 10000;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item {
+  padding: 4px;
+  color: #333;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active {
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.active.focused {
+  outline: 1px solid rgba(255, 255, 255, 0.5);
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item.focused {
+  outline: 1px solid #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {
+  cursor: pointer;
+  color: #fff;
+  background: #1D68CD;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-notice {
+  padding: 4px;
+  color: #333;
+  text-align: center;
+}
+
+.tabulator-edit-select-list .tabulator-edit-select-list-group {
+  border-bottom: 1px solid #aaa;
+  padding: 4px;
+  padding-top: 6px;
+  color: #333;
+  font-weight: bold;
+}
+
+.tabulator.tabulator-ltr {
+  direction: ltr;
+}
+
+.tabulator.tabulator-rtl {
+  text-align: initial;
+  direction: rtl;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col {
+  text-align: initial;
+  border-left: 1px solid #aaa;
+  border-right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
+  margin-right: initial;
+  margin-left: -1px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
+  padding-right: 0;
+  padding-left: 25px;
+}
+
+.tabulator.tabulator-rtl .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
+  left: 8px;
+  right: initial;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell {
+  border-right: initial;
+  border-left: 1px solid #aaa;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-branch {
+  margin-right: initial;
+  margin-left: 5px;
+  border-bottom-left-radius: initial;
+  border-bottom-right-radius: 1px;
+  border-left: initial;
+  border-right: 2px solid #aaa;
+}
+
+.tabulator.tabulator-rtl .tabulator-row .tabulator-cell .tabulator-data-tree-control {
+  margin-right: initial;
+  margin-left: 5px;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle {
+  position: absolute;
+  left: 0;
+  right: auto;
+}
+
+.tabulator.tabulator-rtl .tabulator-col-resize-handle.prev {
+  right: 0;
+  left: auto;
+}
+
+.tabulator-print-fullscreen {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 10000;
+}
+
+body.tabulator-print-fullscreen-hide > *:not(.tabulator-print-fullscreen) {
+  display: none !important;
+}
+
+.tabulator-print-table {
+  border-collapse: collapse;
+}
+
+.tabulator-print-table .tabulator-print-table-group {
+  box-sizing: border-box;
+  border-right: 1px solid #aaa;
+  border-top: 1px solid #000;
+  border-bottom: 2px solid #394462;
+  padding: 5px;
+  padding-left: 10px;
+  background: #222;
+  color: #fff;
+  font-weight: bold;
+  min-width: 100%;
+}
+
+.tabulator-print-table .tabulator-print-table-group:hover {
+  cursor: pointer;
+  background-color: #090909;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-visible .tabulator-arrow {
+  margin-right: 10px;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid #394462;
+  border-bottom: 0;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-1 td {
+  padding-left: 30px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-2 td {
+  padding-left: 50px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-3 td {
+  padding-left: 70px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-4 td {
+  padding-left: 90px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group.tabulator-group-level-5 td {
+  padding-left: 110px !important;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-group-toggle {
+  display: inline-block;
+}
+
+.tabulator-print-table .tabulator-print-table-group .tabulator-arrow {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-right: 16px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right: 0;
+  border-left: 6px solid #394462;
+  vertical-align: middle;
+}
+
+.tabulator-print-table .tabulator-print-table-group span {
+  margin-left: 10px;
+  color: #394462;
+}
+
+.tabulator-print-table .tabulator-data-tree-branch {
+  display: inline-block;
+  vertical-align: middle;
+  height: 9px;
+  width: 7px;
+  margin-top: -9px;
+  margin-right: 5px;
+  border-bottom-left-radius: 1px;
+  border-left: 2px solid #aaa;
+  border-bottom: 2px solid #aaa;
+}
+
+.tabulator-print-table .tabulator-data-tree-control {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-pack: center;
+      justify-content: center;
+  -ms-flex-align: center;
+      align-items: center;
+  vertical-align: middle;
+  height: 11px;
+  width: 11px;
+  margin-right: 5px;
+  border: 1px solid #333;
+  border-radius: 2px;
+  background: rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.tabulator-print-table .tabulator-data-tree-control:hover {
+  cursor: pointer;
+  background: rgba(0, 0, 0, 0.2);
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: transparent;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand {
+  display: inline-block;
+  position: relative;
+  height: 7px;
+  width: 1px;
+  background: #333;
+}
+
+.tabulator-print-table .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {
+  position: absolute;
+  content: "";
+  left: -3px;
+  top: 3px;
+  height: 1px;
+  width: 7px;
+  background: #333;
+}
diff --git a/app/vendors/tabulator/js/jquery_wrapper.js b/app/vendors/tabulator/js/jquery_wrapper.js
new file mode 100644 (file)
index 0000000..7e1dd5f
--- /dev/null
@@ -0,0 +1,52 @@
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+
+/*
+ * This file is part of the Tabulator package.
+ *
+ * (c) Oliver Folkerd <oliver.folkerd@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * Full Documentation & Demos can be found at: http://olifolkerd.github.io/tabulator/
+ *
+ */
+
+(function (factory) {
+  "use strict";
+
+  if (typeof define === 'function' && define.amd) {
+    define(['jquery', 'tabulator', 'jquery-ui'], factory);
+  } else if (typeof module !== 'undefined' && module.exports) {
+    module.exports = factory(require('jquery'), require('tabulator'), require('jquery-ui'));
+  } else {
+    factory(jQuery, Tabulator);
+  }
+})(function ($, Tabulator) {
+
+  $.widget("ui.tabulator", {
+    _create: function _create() {
+      var options = Object.assign({}, this.options);
+
+      delete options.create;
+      delete options.disabled;
+
+      this.table = new Tabulator(this.element[0], options);
+
+      //map tabulator functions to jquery wrapper
+      for (var key in Tabulator.prototype) {
+        if (typeof Tabulator.prototype[key] === "function" && key.charAt(0) !== "_") {
+          this[key] = this.table[key].bind(this.table);
+        }
+      }
+    },
+
+    _setOption: function _setOption(option, value) {
+      console.error("Tabulator jQuery wrapper does not support setting options after the table has been instantiated");
+    },
+
+    _destroy: function _destroy(option, value) {
+      this.table.destroy();
+    }
+  });
+});
\ No newline at end of file
diff --git a/app/vendors/tabulator/js/jquery_wrapper.min.js b/app/vendors/tabulator/js/jquery_wrapper.min.js
new file mode 100644 (file)
index 0000000..5f19aa4
--- /dev/null
@@ -0,0 +1,2 @@
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery","tabulator","jquery-ui"],e):"undefined"!=typeof module&&module.exports?module.exports=e(require("jquery"),require("tabulator"),require("jquery-ui")):e(jQuery,Tabulator)}(function(e,t){e.widget("ui.tabulator",{_create:function(){var e=Object.assign({},this.options);delete e.create,delete e.disabled,this.table=new t(this.element[0],e);for(var o in t.prototype)"function"==typeof t.prototype[o]&&"_"!==o.charAt(0)&&(this[o]=this.table[o].bind(this.table))},_setOption:function(e,t){console.error("Tabulator jQuery wrapper does not support setting options after the table has been instantiated")},_destroy:function(e,t){this.table.destroy()}})});
\ No newline at end of file
index 1124140..2a930ff 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Accessor = function Accessor(table) {
        this.table = table; //hold Tabulator object
index e3f67e0..760f000 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},Accessor=function(o){this.table=o,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(o){var e=this,s=!1,t={};this.allowedTypes.forEach(function(r){var c,a="accessor"+(r.charAt(0).toUpperCase()+r.slice(1));o.definition[a]&&(c=e.lookupAccessor(o.definition[a]))&&(s=!0,t[a]={accessor:c,params:o.definition[a+"Params"]||{}})}),s&&(o.modules.accessor=t)},Accessor.prototype.lookupAccessor=function(o){var e=!1;switch(void 0===o?"undefined":_typeof(o)){case"string":this.accessors[o]?e=this.accessors[o]:console.warn("Accessor Error - No such accessor found, ignoring: ",o);break;case"function":e=o}return e},Accessor.prototype.transformRow=function(o,e){var s="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),t=o.getComponent(),r=Tabulator.prototype.helpers.deepClone(o.data||{});return this.table.columnManager.traverse(function(o){var c,a,n,i;o.modules.accessor&&(a=o.modules.accessor[s]||o.modules.accessor.accessor||!1)&&"undefined"!=(c=o.getFieldValue(r))&&(i=o.getComponent(),n="function"==typeof a.params?a.params(c,r,e,i,t):a.params,o.setFieldValue(r,a.accessor(c,r,e,n,i,t)))}),r},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor);
\ No newline at end of file
index 5a7c2d9..25ac690 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Ajax = function Ajax(table) {
 
@@ -277,7 +277,7 @@ Ajax.prototype.sendRequest = function (silent) {
 
                                self.loading = false;
 
-                               reject();
+                               reject(error);
                        });
                } else {
                        reject();
@@ -342,7 +342,7 @@ Ajax.prototype.defaultURLGenerator = function (url, config, params) {
                        if (!config.method || config.method.toLowerCase() == "get") {
                                config.method = "get";
 
-                               url += (url.includes("?") ? "&" : "?") + this.serializeParams(params);
+                               url += (url.includes("?") ? "&" : "?") + this.modules.ajax.serializeParams(params);
                        }
                }
        }
@@ -357,7 +357,7 @@ Ajax.prototype.defaultLoaderPromise = function (url, config, params) {
        return new Promise(function (resolve, reject) {
 
                //set url
-               url = self.urlGenerator(url, config, params);
+               url = self.urlGenerator.call(self.table, url, config, params);
 
                //set body content if not GET request
                if (config.method.toUpperCase() != "GET") {
index 2f6db56..b62c0c3 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ajax=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},Ajax.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},Ajax.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},Ajax.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},Ajax.prototype.setUrl=function(e){this.url=e},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},Ajax.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,e<t&&this.table.modules.page.nextPage().then(function(){}).catch(function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(e,t){var o=this;return new Promise(function(a,r){o.sendRequest(e).then(function(i){o.table.rowManager.setData(i,e,t).then(function(){a()}).catch(function(e){r(e)})}).catch(function(e){r(e)})})},Ajax.prototype.generateParamsList=function(e,t){var o=this,a=[];if(t=t||"",Array.isArray(e))e.forEach(function(e,r){a=a.concat(o.generateParamsList(e,t?t+"["+r+"]":r))});else if("object"===(void 0===e?"undefined":_typeof(e)))for(var r in e)a=a.concat(o.generateParamsList(e[r],t?t+"["+r+"]":r));else a.push({key:t,value:e});return a},Ajax.prototype.serializeParams=function(e){var t=this.generateParamsList(e),o=[];return t.forEach(function(e){o.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))}),o.join("&")},Ajax.prototype.sendRequest=function(e){var t,o=this,a=this,r=a.url;return a.requestOrder++,t=a.requestOrder,a._loadDefaultConfig(),new Promise(function(i,n){!1!==a.table.options.ajaxRequesting.call(o.table,a.url,a.params)?(a.loading=!0,e||a.showLoader(),o.loaderPromise(r,a.config,a.params).then(function(e){t===a.requestOrder?(a.table.options.ajaxResponse&&(e=a.table.options.ajaxResponse.call(a.table,a.url,a.params,e)),i(e),a.hideLoader(),a.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")}).catch(function(e){console.error("Ajax Load Error: ",e),a.table.options.ajaxError.call(a.table,e),a.showError(),setTimeout(function(){a.hideLoader()},3e3),a.loading=!1,n()})):n()})},Ajax.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(e,t,o){return e&&o&&Object.keys(o).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.serializeParams(o))),e},Ajax.prototype.defaultLoaderPromise=function(e,t,o){var a,r=this;return new Promise(function(i,n){if(e=r.urlGenerator(e,t,o),"GET"!=t.method.toUpperCase())if(a="object"===_typeof(r.table.options.ajaxContentType)?r.table.options.ajaxContentType:r.contentTypeFormatters[r.table.options.ajaxContentType]){for(var s in a.headers)t.headers||(t.headers={}),void 0===t.headers[s]&&(t.headers[s]=a.headers[s]);t.body=a.body.call(r,e,t,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",r.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then(function(e){e.ok?e.json().then(function(e){i(e)}).catch(function(e){n(e),console.warn("Ajax Load Error - Invalid JSON returned",e)}):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),n(e))}).catch(function(e){console.error("Ajax Load Error - Connection Error: ",e),n(e)})):(console.warn("Ajax Load Error - No URL Set"),i([]))})},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(e,t,o){return JSON.stringify(o)}},form:{headers:{},body:function(e,t,o){var a=this.generateParamsList(o),r=new FormData;return a.forEach(function(e){r.append(e.key,e.value)}),r}}},Tabulator.prototype.registerModule("ajax",Ajax);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ajax=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},Ajax.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},Ajax.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},Ajax.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},Ajax.prototype.setUrl=function(e){this.url=e},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},Ajax.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,e<t&&this.table.modules.page.nextPage().then(function(){}).catch(function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(e,t){var o=this;return new Promise(function(a,r){o.sendRequest(e).then(function(i){o.table.rowManager.setData(i,e,t).then(function(){a()}).catch(function(e){r(e)})}).catch(function(e){r(e)})})},Ajax.prototype.generateParamsList=function(e,t){var o=this,a=[];if(t=t||"",Array.isArray(e))e.forEach(function(e,r){a=a.concat(o.generateParamsList(e,t?t+"["+r+"]":r))});else if("object"===(void 0===e?"undefined":_typeof(e)))for(var r in e)a=a.concat(o.generateParamsList(e[r],t?t+"["+r+"]":r));else a.push({key:t,value:e});return a},Ajax.prototype.serializeParams=function(e){var t=this.generateParamsList(e),o=[];return t.forEach(function(e){o.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))}),o.join("&")},Ajax.prototype.sendRequest=function(e){var t,o=this,a=this,r=a.url;return a.requestOrder++,t=a.requestOrder,a._loadDefaultConfig(),new Promise(function(i,n){!1!==a.table.options.ajaxRequesting.call(o.table,a.url,a.params)?(a.loading=!0,e||a.showLoader(),o.loaderPromise(r,a.config,a.params).then(function(e){t===a.requestOrder?(a.table.options.ajaxResponse&&(e=a.table.options.ajaxResponse.call(a.table,a.url,a.params,e)),i(e),a.hideLoader(),a.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")}).catch(function(e){console.error("Ajax Load Error: ",e),a.table.options.ajaxError.call(a.table,e),a.showError(),setTimeout(function(){a.hideLoader()},3e3),a.loading=!1,n(e)})):n()})},Ajax.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(e,t,o){return e&&o&&Object.keys(o).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.modules.ajax.serializeParams(o))),e},Ajax.prototype.defaultLoaderPromise=function(e,t,o){var a,r=this;return new Promise(function(i,n){if(e=r.urlGenerator.call(r.table,e,t,o),"GET"!=t.method.toUpperCase())if(a="object"===_typeof(r.table.options.ajaxContentType)?r.table.options.ajaxContentType:r.contentTypeFormatters[r.table.options.ajaxContentType]){for(var s in a.headers)t.headers||(t.headers={}),void 0===t.headers[s]&&(t.headers[s]=a.headers[s]);t.body=a.body.call(r,e,t,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",r.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then(function(e){e.ok?e.json().then(function(e){i(e)}).catch(function(e){n(e),console.warn("Ajax Load Error - Invalid JSON returned",e)}):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),n(e))}).catch(function(e){console.error("Ajax Load Error - Connection Error: ",e),n(e)})):(console.warn("Ajax Load Error - No URL Set"),i([]))})},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(e,t,o){return JSON.stringify(o)}},form:{headers:{},body:function(e,t,o){var a=this.generateParamsList(o),r=new FormData;return a.forEach(function(e){r.append(e.key,e.value)}),r}}},Tabulator.prototype.registerModule("ajax",Ajax);
\ No newline at end of file
index 6d9030a..9088951 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 //public calc object
 var CalcComponent = function CalcComponent(row) {
@@ -151,7 +151,6 @@ ColumnCalcs.prototype.removeCalcs = function () {
 
 ColumnCalcs.prototype.initializeTopRow = function () {
        if (!this.topInitialized) {
-               // this.table.columnManager.headersElement.after(this.topElement);
                this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
                this.topInitialized = true;
        }
@@ -165,9 +164,6 @@ ColumnCalcs.prototype.initializeBottomRow = function () {
 };
 
 ColumnCalcs.prototype.scrollHorizontal = function (left) {
-       var hozAdjust = 0,
-           scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth;
-
        if (this.botInitialized && this.botRow) {
                this.botRow.getElement().style.marginLeft = -left + "px";
        }
index f8bd28f..2d2f015 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},CalcComponent=function(t){this._row=t};CalcComponent.prototype.getData=function(t){return this._row.getData(t)},CalcComponent.prototype.getElement=function(){return this._row.getElement()},CalcComponent.prototype.getTable=function(){return this._row.table},CalcComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(o){t.push(o.getComponent())}),t},CalcComponent.prototype.getCell=function(t){var o=this._row.getCell(t);return!!o&&o.getComponent()},CalcComponent.prototype._getSelf=function(){return this._row};var ColumnCalcs=function(t){this.table=t,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(t){var o=t.definition,e={topCalcParams:o.topCalcParams||{},botCalcParams:o.bottomCalcParams||{}};if(o.topCalc){switch(_typeof(o.topCalc)){case"string":this.calculations[o.topCalc]?e.topCalc=this.calculations[o.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.topCalc);break;case"function":e.topCalc=o.topCalc}e.topCalc&&(t.modules.columnCalcs=e,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(o.bottomCalc){switch(_typeof(o.bottomCalc)){case"string":this.calculations[o.bottomCalc]?e.botCalc=this.calculations[o.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.bottomCalc);break;case"function":e.botCalc=o.bottomCalc}e.botCalc&&(t.modules.columnCalcs=e,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(t){this.table.columnManager.getElement().scrollWidth,this.table.element.clientWidth;this.botInitialized&&this.botRow&&(this.botRow.getElement().style.marginLeft=-t+"px")},ColumnCalcs.prototype.recalc=function(t){var o;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),o=this.generateRow("top",this.rowsToData(t)),this.topRow=o;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(o.getElement()),o.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),o=this.generateRow("bottom",this.rowsToData(t)),this.botRow=o;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(o.getElement()),o.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},ColumnCalcs.prototype.recalcAll=function(){var t=this;if((this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs)){table.modules.groupRows.getChildGroups().forEach(function(o){t.recalcGroup(o)})}},ColumnCalcs.prototype.recalcGroup=function(t){var o,e;t&&t.calcs&&(t.calcs.bottom&&(o=this.rowsToData(t.rows),e=this.generateRowData("bottom",o),t.calcs.bottom.updateData(e),t.calcs.bottom.reinitialize()),t.calcs.top&&(o=this.rowsToData(t.rows),e=this.generateRowData("top",o),t.calcs.top.updateData(e),t.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},ColumnCalcs.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},ColumnCalcs.prototype.rowsToData=function(t){var o=this,e=[];return t.forEach(function(t){if(e.push(t.getData()),o.table.options.dataTree&&o.table.options.dataTreeChildColumnCalcs&&t.modules.dataTree.open){var n=o.rowsToData(o.table.modules.dataTree.getFilteredTreeChildren(t));e=e.concat(n)}}),e},ColumnCalcs.prototype.generateRow=function(t,o){var e,n=this,l=this.generateRowData(t,o);return n.table.modExists("mutator")&&n.table.modules.mutator.disable(),e=new Row(l,this,"calc"),n.table.modExists("mutator")&&n.table.modules.mutator.enable(),e.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),e.component=!1,e.getComponent=function(){return this.component||(this.component=new CalcComponent(this)),this.component},e.generateCells=function(){var o=[];n.table.columnManager.columnsByIndex.forEach(function(l){n.genColumn.setField(l.getField()),n.genColumn.hozAlign=l.hozAlign,l.definition[t+"CalcFormatter"]&&n.table.modExists("format")?n.genColumn.modules.format={formatter:n.table.modules.format.getFormatter(l.definition[t+"CalcFormatter"]),params:l.definition[t+"CalcFormatterParams"]||{}}:n.genColumn.modules.format={formatter:n.table.modules.format.getFormatter("plaintext"),params:{}},n.genColumn.definition.cssClass=l.definition.cssClass;var i=new Cell(n.genColumn,e);i.getElement(),i.column=l,i.setWidth(),l.cells.push(i),o.push(i),l.visible||i.hide()}),this.cells=o},e},ColumnCalcs.prototype.generateRowData=function(t,o){var e,n,l={},i="top"==t?this.topCalcs:this.botCalcs,a="top"==t?"topCalc":"botCalc";return i.forEach(function(t){var i=[];t.modules.columnCalcs&&t.modules.columnCalcs[a]&&(o.forEach(function(o){i.push(t.getFieldValue(o))}),n=a+"Params",e="function"==typeof t.modules.columnCalcs[n]?t.modules.columnCalcs[n](i,o):t.modules.columnCalcs[n],t.setFieldValue(l,t.modules.columnCalcs[a](i,o,e)))}),l},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var t,o=this,e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(function(t){e[t.getKey()]=o.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e},ColumnCalcs.prototype.getGroupResults=function(t){var o=this,e=t._getSelf(),n=t.getSubGroups(),l={};return n.forEach(function(t){l[t.getKey()]=o.getGroupResults(t)}),{top:e.calcs.top?e.calcs.top.getData():{},bottom:e.calcs.bottom?e.calcs.bottom.getData():{},groups:l}},ColumnCalcs.prototype.calculations={avg:function(t,o,e){var n=0,l=void 0!==e.precision?e.precision:2;return t.length&&(n=t.reduce(function(t,o){return Number(t)+Number(o)}),n/=t.length,n=!1!==l?n.toFixed(l):n),parseFloat(n).toString()},max:function(t,o,e){var n=null,l=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))>n||null===n)&&(n=t)}),null!==n?!1!==l?n.toFixed(l):n:""},min:function(t,o,e){var n=null,l=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))<n||null===n)&&(n=t)}),null!==n?!1!==l?n.toFixed(l):n:""},sum:function(t,o,e){var n=0,l=void 0!==e.precision&&e.precision;return t.length&&t.forEach(function(t){t=Number(t),n+=isNaN(t)?0:Number(t)}),!1!==l?n.toFixed(l):n},concat:function(t,o,e){var n=0;return t.length&&(n=t.reduce(function(t,o){return String(t)+String(o)})),n},count:function(t,o,e){var n=0;return t.length&&t.forEach(function(t){t&&n++}),n}},Tabulator.prototype.registerModule("columnCalcs",ColumnCalcs);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},CalcComponent=function(t){this._row=t};CalcComponent.prototype.getData=function(t){return this._row.getData(t)},CalcComponent.prototype.getElement=function(){return this._row.getElement()},CalcComponent.prototype.getTable=function(){return this._row.table},CalcComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(o){t.push(o.getComponent())}),t},CalcComponent.prototype.getCell=function(t){var o=this._row.getCell(t);return!!o&&o.getComponent()},CalcComponent.prototype._getSelf=function(){return this._row};var ColumnCalcs=function(t){this.table=t,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(t){var o=t.definition,e={topCalcParams:o.topCalcParams||{},botCalcParams:o.bottomCalcParams||{}};if(o.topCalc){switch(_typeof(o.topCalc)){case"string":this.calculations[o.topCalc]?e.topCalc=this.calculations[o.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.topCalc);break;case"function":e.topCalc=o.topCalc}e.topCalc&&(t.modules.columnCalcs=e,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(o.bottomCalc){switch(_typeof(o.bottomCalc)){case"string":this.calculations[o.bottomCalc]?e.botCalc=this.calculations[o.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.bottomCalc);break;case"function":e.botCalc=o.bottomCalc}e.botCalc&&(t.modules.columnCalcs=e,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(t){this.botInitialized&&this.botRow&&(this.botRow.getElement().style.marginLeft=-t+"px")},ColumnCalcs.prototype.recalc=function(t){var o;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),o=this.generateRow("top",this.rowsToData(t)),this.topRow=o;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(o.getElement()),o.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),o=this.generateRow("bottom",this.rowsToData(t)),this.botRow=o;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(o.getElement()),o.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},ColumnCalcs.prototype.recalcAll=function(){var t=this;if((this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs)){table.modules.groupRows.getChildGroups().forEach(function(o){t.recalcGroup(o)})}},ColumnCalcs.prototype.recalcGroup=function(t){var o,e;t&&t.calcs&&(t.calcs.bottom&&(o=this.rowsToData(t.rows),e=this.generateRowData("bottom",o),t.calcs.bottom.updateData(e),t.calcs.bottom.reinitialize()),t.calcs.top&&(o=this.rowsToData(t.rows),e=this.generateRowData("top",o),t.calcs.top.updateData(e),t.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},ColumnCalcs.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},ColumnCalcs.prototype.rowsToData=function(t){var o=this,e=[];return t.forEach(function(t){if(e.push(t.getData()),o.table.options.dataTree&&o.table.options.dataTreeChildColumnCalcs&&t.modules.dataTree.open){var n=o.rowsToData(o.table.modules.dataTree.getFilteredTreeChildren(t));e=e.concat(n)}}),e},ColumnCalcs.prototype.generateRow=function(t,o){var e,n=this,i=this.generateRowData(t,o);return n.table.modExists("mutator")&&n.table.modules.mutator.disable(),e=new Row(i,this,"calc"),n.table.modExists("mutator")&&n.table.modules.mutator.enable(),e.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),e.component=!1,e.getComponent=function(){return this.component||(this.component=new CalcComponent(this)),this.component},e.generateCells=function(){var o=[];n.table.columnManager.columnsByIndex.forEach(function(i){n.genColumn.setField(i.getField()),n.genColumn.hozAlign=i.hozAlign,i.definition[t+"CalcFormatter"]&&n.table.modExists("format")?n.genColumn.modules.format={formatter:n.table.modules.format.getFormatter(i.definition[t+"CalcFormatter"]),params:i.definition[t+"CalcFormatterParams"]||{}}:n.genColumn.modules.format={formatter:n.table.modules.format.getFormatter("plaintext"),params:{}},n.genColumn.definition.cssClass=i.definition.cssClass;var l=new Cell(n.genColumn,e);l.getElement(),l.column=i,l.setWidth(),i.cells.push(l),o.push(l),i.visible||l.hide()}),this.cells=o},e},ColumnCalcs.prototype.generateRowData=function(t,o){var e,n,i={},l="top"==t?this.topCalcs:this.botCalcs,a="top"==t?"topCalc":"botCalc";return l.forEach(function(t){var l=[];t.modules.columnCalcs&&t.modules.columnCalcs[a]&&(o.forEach(function(o){l.push(t.getFieldValue(o))}),n=a+"Params",e="function"==typeof t.modules.columnCalcs[n]?t.modules.columnCalcs[n](l,o):t.modules.columnCalcs[n],t.setFieldValue(i,t.modules.columnCalcs[a](l,o,e)))}),i},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var t,o=this,e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(function(t){e[t.getKey()]=o.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e},ColumnCalcs.prototype.getGroupResults=function(t){var o=this,e=t._getSelf(),n=t.getSubGroups(),i={};return n.forEach(function(t){i[t.getKey()]=o.getGroupResults(t)}),{top:e.calcs.top?e.calcs.top.getData():{},bottom:e.calcs.bottom?e.calcs.bottom.getData():{},groups:i}},ColumnCalcs.prototype.calculations={avg:function(t,o,e){var n=0,i=void 0!==e.precision?e.precision:2;return t.length&&(n=t.reduce(function(t,o){return Number(t)+Number(o)}),n/=t.length,n=!1!==i?n.toFixed(i):n),parseFloat(n).toString()},max:function(t,o,e){var n=null,i=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))>n||null===n)&&(n=t)}),null!==n?!1!==i?n.toFixed(i):n:""},min:function(t,o,e){var n=null,i=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))<n||null===n)&&(n=t)}),null!==n?!1!==i?n.toFixed(i):n:""},sum:function(t,o,e){var n=0,i=void 0!==e.precision&&e.precision;return t.length&&t.forEach(function(t){t=Number(t),n+=isNaN(t)?0:Number(t)}),!1!==i?n.toFixed(i):n},concat:function(t,o,e){var n=0;return t.length&&(n=t.reduce(function(t,o){return String(t)+String(o)})),n},count:function(t,o,e){var n=0;return t.length&&t.forEach(function(t){t&&n++}),n}},Tabulator.prototype.registerModule("columnCalcs",ColumnCalcs);
\ No newline at end of file
index a4ab190..98f8c44 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Clipboard = function Clipboard(table) {
        this.table = table;
index 64474e3..c261f7f 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Clipboard=function(t){this.table=t,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};Clipboard.prototype.initialize=function(){var t=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",function(e){var a,o,i;if(!t.blocked){if(e.preventDefault(),t.customSelection)a=t.customSelection,t.table.options.clipboardCopyFormatter&&(a=t.table.options.clipboardCopyFormatter("plain",a));else{var i=t.table.modules.export.generateExportList(t.table.options.clipboardCopyConfig,t.table.options.clipboardCopyStyled,t.rowRange,"clipboard");o=t.table.modules.export.genereateHTMLTable(i),a=o?t.generatePlainContent(i):"",t.table.options.clipboardCopyFormatter&&(a=t.table.options.clipboardCopyFormatter("plain",a),o=t.table.options.clipboardCopyFormatter("html",o))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",a):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",a),o&&e.clipboardData.setData("text/html",o)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",a),o&&e.originalEvent.clipboardData.setData("text/html",o)),t.table.options.clipboardCopied.call(t.table,a,o),t.reset()}}),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",function(e){t.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},Clipboard.prototype.reset=function(){this.blocked=!0,this.customSelection=!1},Clipboard.prototype.generatePlainContent=function(t){var e=[];return t.forEach(function(t){var a=[];t.columns.forEach(function(e){var o="";if(e)if("group"===t.type&&(e.value=e.component.getKey()),null===e.value)o="";else switch(_typeof(e.value)){case"object":o=JSON.stringify(e.value);break;case"undefined":o="";break;default:o=e.value}a.push(o)}),e.push(a.join("\t"))}),e.join("\n")},Clipboard.prototype.copy=function(t,e){var t,a,o;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=t||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?(t=document.createRange(),t.selectNodeContents(this.table.element),a=window.getSelection(),a.toString()&&e&&(this.customSelection=a.toString()),a.removeAllRanges(),a.addRange(t)):void 0!==document.selection&&void 0!==document.body.createTextRange&&(o=document.body.createTextRange(),o.moveToElementText(this.table.element),o.select()),document.execCommand("copy"),a&&a.removeAllRanges())},Clipboard.prototype.setPasteAction=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteAction=this.pasteActions[t],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",t);break;case"function":this.pasteAction=t}},Clipboard.prototype.setPasteParser=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteParser=this.pasteParsers[t],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",t);break;case"function":this.pasteParser=t}},Clipboard.prototype.paste=function(t){var e,a,o;this.checkPaseOrigin(t)&&(e=this.getPasteData(t),a=this.pasteParser.call(this,e),a?(t.preventDefault(),this.table.modExists("mutator")&&(a=this.mutateData(a)),o=this.pasteAction.call(this,a),this.table.options.clipboardPasted.call(this.table,e,a,o)):this.table.options.clipboardPasteError.call(this.table,e))},Clipboard.prototype.mutateData=function(t){var e=this,a=[];return Array.isArray(t)?t.forEach(function(t){a.push(e.table.modules.mutator.transformRow(t,"clipboard"))}):a=t,a},Clipboard.prototype.checkPaseOrigin=function(t){var e=!0;return("DIV"!=t.target.tagName||this.table.modules.edit.currentCell)&&(e=!1),e},Clipboard.prototype.getPasteData=function(t){var e;return window.clipboardData&&window.clipboardData.getData?e=window.clipboardData.getData("Text"):t.clipboardData&&t.clipboardData.getData?e=t.clipboardData.getData("text/plain"):t.originalEvent&&t.originalEvent.clipboardData.getData&&(e=t.originalEvent.clipboardData.getData("text/plain")),e},Clipboard.prototype.pasteParsers={table:function(t){var e=[],a=!0,o=this.table.columnManager.columns,i=[],n=[];return t=t.split("\n"),t.forEach(function(t){e.push(t.split("\t"))}),!(!e.length||1===e.length&&e[0].length<2)&&(!0,e[0].forEach(function(t){var e=o.find(function(e){return t&&e.definition.title&&t.trim()&&e.definition.title.trim()===t.trim()});e?i.push(e):a=!1}),a||(a=!0,i=[],e[0].forEach(function(t){var e=o.find(function(e){return t&&e.field&&t.trim()&&e.field.trim()===t.trim()});e?i.push(e):a=!1}),a||(i=this.table.columnManager.columnsByIndex)),a&&e.shift(),e.forEach(function(t){var e={};t.forEach(function(t,a){i[a]&&(e[i[a].field]=t)}),n.push(e)}),n)}},Clipboard.prototype.pasteActions={replace:function(t){return this.table.setData(t)},update:function(t){return this.table.updateOrAddData(t)},insert:function(t){return this.table.addData(t)}},Tabulator.prototype.registerModule("clipboard",Clipboard);
\ No newline at end of file
index d7c2f95..084acef 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var DataTree = function DataTree(table) {
        this.table = table;
@@ -213,12 +213,15 @@ DataTree.prototype.getRows = function (rows) {
 
                if (row instanceof Row) {
 
+                       row.create();
+
                        config = row.modules.dataTree.children;
 
                        if (!config.index && config.children !== false) {
                                children = _this2.getChildren(row);
 
                                children.forEach(function (child) {
+                                       child.create();
                                        output.push(child);
                                });
                        }
@@ -228,14 +231,14 @@ DataTree.prototype.getRows = function (rows) {
        return output;
 };
 
-DataTree.prototype.getChildren = function (row) {
+DataTree.prototype.getChildren = function (row, allChildren) {
        var _this3 = this;
 
        var config = row.modules.dataTree,
            children = [],
            output = [];
 
-       if (config.children !== false && config.open) {
+       if (config.children !== false && (config.open || allChildren)) {
                if (!Array.isArray(config.children)) {
                        config.children = this.generateChildren(row);
                }
@@ -277,8 +280,12 @@ DataTree.prototype.generateChildren = function (row) {
 
        childArray.forEach(function (childData) {
                var childRow = new Row(childData || {}, _this4.table.rowManager);
+
+               childRow.create();
+
                childRow.modules.dataTree.index = row.modules.dataTree.index + 1;
                childRow.modules.dataTree.parent = row;
+
                if (childRow.modules.dataTree.children) {
                        childRow.modules.dataTree.open = _this4.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);
                }
index 526e2e5..50edd98 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},DataTree=function(e){this.table=e,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};DataTree.prototype.initialize=function(){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),a=this.table.options;switch(this.field=a.dataTreeChildField,this.indent=a.dataTreeChildIndent,this.elementField=a.dataTreeElementColumn||!!t&&t.field,a.dataTreeBranchElement&&(!0===a.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof a.dataTreeBranchElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=a.dataTreeBranchElement),a.dataTreeCollapseElement?"string"==typeof a.dataTreeCollapseElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=a.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),a.dataTreeExpandElement?"string"==typeof a.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=a.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(a.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return a.dataTreeStartExpanded};break;case"function":this.startOpen=a.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return a.dataTreeStartExpanded[t]}}},DataTree.prototype.initializeRow=function(e){var t=e.getData()[this.field],a=Array.isArray(t),n=a||!a&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!n&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!n&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!n&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:n}},DataTree.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],a=t.getElement(),n=e.modules.dataTree;n.branchEl&&(n.branchEl.parentNode&&n.branchEl.parentNode.removeChild(n.branchEl),n.branchEl=!1),n.controlEl&&(n.controlEl.parentNode&&n.controlEl.parentNode.removeChild(n.controlEl),n.controlEl=!1),this.generateControlElement(e,a),e.getElement().classList.add("tabulator-tree-level-"+n.index),n.index&&(this.branchEl?(n.branchEl=this.branchEl.cloneNode(!0),a.insertBefore(n.branchEl,a.firstChild),this.table.rtl?n.branchEl.style.marginRight=(n.branchEl.offsetWidth+n.branchEl.style.marginLeft)*(n.index-1)+n.index*this.indent+"px":n.branchEl.style.marginLeft=(n.branchEl.offsetWidth+n.branchEl.style.marginRight)*(n.index-1)+n.index*this.indent+"px"):this.table.rtl?a.style.paddingRight=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-right"))+n.index*this.indent+"px":a.style.paddingLeft=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-left"))+n.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(e,t){var a=this,n=e.modules.dataTree,t=t||e.getCells()[0].getElement(),r=n.controlEl;!1!==n.children&&(n.open?(n.controlEl=this.collapseEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.collapseRow(e)})):(n.controlEl=this.expandEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.expandRow(e)})),n.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),r&&r.parentNode===t?r.parentNode.replaceChild(n.controlEl,r):t.insertBefore(n.controlEl,t.firstChild))},DataTree.prototype.setDisplayIndex=function(e){this.displayIndex=e},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(e){var t=this,a=[];return e.forEach(function(e,n){var r,l;a.push(e),e instanceof Row&&(r=e.modules.dataTree.children,r.index||!1===r.children||(l=t.getChildren(e),l.forEach(function(e){a.push(e)})))}),a},DataTree.prototype.getChildren=function(e){var t=this,a=e.modules.dataTree,n=[],r=[];return!1!==a.children&&a.open&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),n=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(a.children):a.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n),n.forEach(function(e){r.push(e),t.getChildren(e).forEach(function(e){r.push(e)})})),r},DataTree.prototype.generateChildren=function(e){var t=this,a=[],n=e.getData()[this.field];return Array.isArray(n)||(n=[n]),n.forEach(function(n){var r=new Row(n||{},t.table.rowManager);r.modules.dataTree.index=e.modules.dataTree.index+1,r.modules.dataTree.parent=e,r.modules.dataTree.children&&(r.modules.dataTree.open=t.startOpen(r.getComponent(),r.modules.dataTree.index)),a.push(r)}),a},DataTree.prototype.expandRow=function(e,t){var a=e.modules.dataTree;!1!==a.children&&(a.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},DataTree.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(e){var t,a=e.modules.dataTree,n=[];return a.children&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),t=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(a.children):a.children,t.forEach(function(e){e instanceof Row&&n.push(e)})),n},DataTree.prototype.rowDelete=function(e){var t,a=e.modules.dataTree.parent;a&&(t=this.findChildIndex(e,a),!1!==t&&a.data[this.field].splice(t,1),a.data[this.field].length||delete a.data[this.field],this.initializeRow(a),this.layoutRow(a)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(e,t,a,n){var r=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==n&&!1!==(r=this.findChildIndex(n,e))&&e.data[this.field].splice(a?r:r+1,0,t),!1===r&&(a?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(e,t){var a=this,n=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof Row?n=e.data:e instanceof RowComponent?n=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(n=t.modules.dataTree.children.find(function(t){return t instanceof Row&&t.element===e}))&&(n=n.data):n=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[a.table.options.index]==e}),n&&(Array.isArray(t.data[this.field])&&(n=t.data[this.field].indexOf(n)),-1==n&&(n=!1)),n},DataTree.prototype.getTreeChildren=function(e,t,a){var n=this,r=e.modules.dataTree,l=[];return r.children&&(Array.isArray(r.children)||(r.children=this.generateChildren(e)),r.children.forEach(function(e){e instanceof Row&&(l.push(t?e.getComponent():e),a&&(l=l.concat(n.getTreeChildren(e,t,a))))})),l},DataTree.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},DataTree=function(e){this.table=e,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};DataTree.prototype.initialize=function(){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),a=this.table.options;switch(this.field=a.dataTreeChildField,this.indent=a.dataTreeChildIndent,this.elementField=a.dataTreeElementColumn||!!t&&t.field,a.dataTreeBranchElement&&(!0===a.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof a.dataTreeBranchElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=a.dataTreeBranchElement),a.dataTreeCollapseElement?"string"==typeof a.dataTreeCollapseElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=a.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),a.dataTreeExpandElement?"string"==typeof a.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=a.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=a.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(a.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return a.dataTreeStartExpanded};break;case"function":this.startOpen=a.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return a.dataTreeStartExpanded[t]}}},DataTree.prototype.initializeRow=function(e){var t=e.getData()[this.field],a=Array.isArray(t),n=a||!a&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!n&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!n&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!n&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!n)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:n}},DataTree.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],a=t.getElement(),n=e.modules.dataTree;n.branchEl&&(n.branchEl.parentNode&&n.branchEl.parentNode.removeChild(n.branchEl),n.branchEl=!1),n.controlEl&&(n.controlEl.parentNode&&n.controlEl.parentNode.removeChild(n.controlEl),n.controlEl=!1),this.generateControlElement(e,a),e.getElement().classList.add("tabulator-tree-level-"+n.index),n.index&&(this.branchEl?(n.branchEl=this.branchEl.cloneNode(!0),a.insertBefore(n.branchEl,a.firstChild),this.table.rtl?n.branchEl.style.marginRight=(n.branchEl.offsetWidth+n.branchEl.style.marginLeft)*(n.index-1)+n.index*this.indent+"px":n.branchEl.style.marginLeft=(n.branchEl.offsetWidth+n.branchEl.style.marginRight)*(n.index-1)+n.index*this.indent+"px"):this.table.rtl?a.style.paddingRight=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-right"))+n.index*this.indent+"px":a.style.paddingLeft=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-left"))+n.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(e,t){var a=this,n=e.modules.dataTree,t=t||e.getCells()[0].getElement(),r=n.controlEl;!1!==n.children&&(n.open?(n.controlEl=this.collapseEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.collapseRow(e)})):(n.controlEl=this.expandEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.expandRow(e)})),n.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),r&&r.parentNode===t?r.parentNode.replaceChild(n.controlEl,r):t.insertBefore(n.controlEl,t.firstChild))},DataTree.prototype.setDisplayIndex=function(e){this.displayIndex=e},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(e){var t=this,a=[];return e.forEach(function(e,n){var r,l;a.push(e),e instanceof Row&&(e.create(),r=e.modules.dataTree.children,r.index||!1===r.children||(l=t.getChildren(e),l.forEach(function(e){e.create(),a.push(e)})))}),a},DataTree.prototype.getChildren=function(e,t){var a=this,n=e.modules.dataTree,r=[],l=[];return!1!==n.children&&(n.open||t)&&(Array.isArray(n.children)||(n.children=this.generateChildren(e)),r=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(n.children):n.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(r),r.forEach(function(e){l.push(e),a.getChildren(e).forEach(function(e){l.push(e)})})),l},DataTree.prototype.generateChildren=function(e){var t=this,a=[],n=e.getData()[this.field];return Array.isArray(n)||(n=[n]),n.forEach(function(n){var r=new Row(n||{},t.table.rowManager);r.create(),r.modules.dataTree.index=e.modules.dataTree.index+1,r.modules.dataTree.parent=e,r.modules.dataTree.children&&(r.modules.dataTree.open=t.startOpen(r.getComponent(),r.modules.dataTree.index)),a.push(r)}),a},DataTree.prototype.expandRow=function(e,t){var a=e.modules.dataTree;!1!==a.children&&(a.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},DataTree.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(e){var t,a=e.modules.dataTree,n=[];return a.children&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),t=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(a.children):a.children,t.forEach(function(e){e instanceof Row&&n.push(e)})),n},DataTree.prototype.rowDelete=function(e){var t,a=e.modules.dataTree.parent;a&&(t=this.findChildIndex(e,a),!1!==t&&a.data[this.field].splice(t,1),a.data[this.field].length||delete a.data[this.field],this.initializeRow(a),this.layoutRow(a)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(e,t,a,n){var r=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==n&&!1!==(r=this.findChildIndex(n,e))&&e.data[this.field].splice(a?r:r+1,0,t),!1===r&&(a?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(e,t){var a=this,n=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof Row?n=e.data:e instanceof RowComponent?n=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(n=t.modules.dataTree.children.find(function(t){return t instanceof Row&&t.element===e}))&&(n=n.data):n=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[a.table.options.index]==e}),n&&(Array.isArray(t.data[this.field])&&(n=t.data[this.field].indexOf(n)),-1==n&&(n=!1)),n},DataTree.prototype.getTreeChildren=function(e,t,a){var n=this,r=e.modules.dataTree,l=[];return r.children&&(Array.isArray(r.children)||(r.children=this.generateChildren(e)),r.children.forEach(function(e){e instanceof Row&&(l.push(t?e.getComponent():e),a&&(l=l.concat(n.getTreeChildren(e,t,a))))})),l},DataTree.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);
\ No newline at end of file
index 2fed7fe..382a996 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Download = function Download(table) {
        this.table = table; //hold Tabulator object
index f3420d2..17797a3 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Download=function(e){this.table=e};Download.prototype.download=function(e,o,t,n,a){function r(t,n){a?!0===a?i.triggerDownload(t,n,e,o,!0):a(t):i.triggerDownload(t,n,e,o)}var i=this,l=!1;if("function"==typeof e?l=e:i.downloaders[e]?l=i.downloaders[e]:console.warn("Download Error - No such download type found: ",e),l){var s=this.generateExportList(n);l.call(this.table,s,t||{},r)}},Download.prototype.generateExportList=function(e){var o=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),t=this.table.options.groupHeaderDownload;return t&&!Array.isArray(t)&&(t=[t]),o.forEach(function(e){var o;"group"===e.type&&(o=e.columns[0],t&&t[e.indent]&&(o.value=t[e.indent](o.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),o},Download.prototype.triggerDownload=function(e,o,t,n,a){var r=document.createElement("a"),i=new Blob([e],{type:o}),n=n||"Tabulator."+("function"==typeof t?"txt":t);(i=this.table.options.downloadReady.call(this.table,e,i))&&(a?window.open(window.URL.createObjectURL(i)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(i,n):(r.setAttribute("href",window.URL.createObjectURL(i)),r.setAttribute("download",n),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(e,o,t){switch(o){case"intercept":this.download(t.type,"",t.options,t.active,t.intercept)}},Download.prototype.downloaders={csv:function(e,o,t){var n=o&&o.delimiter?o.delimiter:",",a=[],r=[];e.forEach(function(e){var o=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,o){e&&1===e.depth&&(r[o]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}o.push('"'+String(e.value).split('"').join('""')+'"')}}),a.push(o.join(n))}}),r.length&&a.unshift(r.join(n)),a=a.join("\n"),o.bom&&(a="\ufeff"+a),t(a,"text/csv")},json:function(e,o,t){var n=[];e.forEach(function(e){var o={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(o[e.component.getField()]=e.value)}),n.push(o)}}),n=JSON.stringify(n,null,"\t"),t(n,"application/json")},pdf:function(e,o,t){function n(e,o){var t=[];return e.columns.forEach(function(e){var n;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}n={content:e.value,colSpan:e.width,rowSpan:e.height},o&&(n.styles=o),t.push(n)}else t.push("")}),t}var a=[],r=[],i={},l=o.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},s=o.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=o.jsPDF||{},u=o&&o.title?o.title:"";c.orientation||(c.orientation=o.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":a.push(n(e));break;case"group":r.push(n(e,l));break;case"calc":r.push(n(e,s));break;case"row":r.push(n(e))}});var d=new jsPDF(c);o&&o.autoTable&&(i="function"==typeof o.autoTable?o.autoTable(d)||{}:o.autoTable),u&&(i.addPageContent=function(e){d.text(u,40,30)}),i.head=a,i.body=r,d.autoTable(i),o&&o.documentProcessing&&o.documentProcessing(d),t(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,o,t){function n(){var o=[],t=[],n={},a={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,o){return e+(o&&o.width?o.width:1)},0):0,r:e.length}};return e.forEach(function(e,n){var a=[];e.columns.forEach(function(e,o){e?(a.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&t.push({s:{r:n,c:o},e:{r:n+e.height-1,c:o+e.width-1}})):a.push("")}),o.push(a)}),XLSX.utils.sheet_add_aoa(n,o),n["!ref"]=XLSX.utils.encode_range(a),t.length&&(n["!merges"]=t),n}var a,r=this,i=o.sheetName||"Sheet1",l=XLSX.utils.book_new();if(l.SheetNames=[],l.Sheets={},o.sheetOnly)return void t(n());if(o.sheets)for(var s in o.sheets)!0===o.sheets[s]?(l.SheetNames.push(s),l.Sheets[s]=n()):(l.SheetNames.push(s),this.modules.comms.send(o.sheets[s],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:r.active,intercept:function(e){l.Sheets[s]=e}}));else l.SheetNames.push(i),l.Sheets[i]=n();o.documentProcessing&&(l=o.documentProcessing(l)),a=XLSX.write(l,{bookType:"xlsx",bookSST:!0,type:"binary"}),t(function(e){for(var o=new ArrayBuffer(e.length),t=new Uint8Array(o),n=0;n!=e.length;++n)t[n]=255&e.charCodeAt(n);return o}(a),"application/octet-stream")},html:function(e,o,t){this.modExists("export",!0)&&t(this.modules.export.genereateHTMLTable(e),"text/html")}},Tabulator.prototype.registerModule("download",Download);
\ No newline at end of file
index 6682f77..3a4cfa9 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Edit = function Edit(table) {
        this.table = table; //hold Tabulator object
@@ -122,7 +122,7 @@ Edit.prototype.cancelEdit = function () {
 //return a formatted value for a cell
 Edit.prototype.bindEditor = function (cell) {
        var self = this,
-           element = cell.getElement();
+           element = cell.getElement(true);
 
        element.setAttribute("tabindex", 0);
 
@@ -185,7 +185,13 @@ Edit.prototype.focusScrollAdjust = function (cell) {
                        rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);
                }
 
+               if (this.table.options.virtualDomHoz) {
+                       leftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);
+                       rightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);
+               }
+
                if (cellEl.offsetLeft < leftEdge) {
+
                        this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;
                } else {
                        if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {
@@ -864,7 +870,9 @@ Edit.prototype.editors = {
                    displayItems = [],
                    currentItems = [],
                    blurable = true,
-                   blockListShow = false;
+                   blockListShow = false,
+                   searchWord = "",
+                   searchWordTimeout = null;
 
                if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === "undefined" ? "undefined" : _typeof(editorParams)) === "object" && !editorParams.values) {
                        console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object");
@@ -890,21 +898,11 @@ Edit.prototype.editors = {
                                                output[val] = true;
                                        }
                                });
-
-                               if (editorParams.sortValuesList) {
-                                       if (editorParams.sortValuesList == "asc") {
-                                               output = Object.keys(output).sort();
-                                       } else {
-                                               output = Object.keys(output).sort().reverse();
-                                       }
-                               } else {
-                                       output = Object.keys(output);
-                               }
                        } else {
                                console.warn("unable to find matching column to create select lookup list:", field);
                        }
 
-                       return output;
+                       return Object.keys(output);
                }
 
                function parseItems(inputValues, curentValues) {
@@ -1002,6 +1000,21 @@ Edit.prototype.editors = {
                                }
                        }
 
+                       if (editorParams.sortValuesList) {
+                               dataList.sort(function (a, b) {
+                                       return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
+                               });
+
+                               displayList.sort(function (a, b) {
+                                       return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
+                               });
+
+                               if (editorParams.sortValuesList !== "asc") {
+                                       dataList.reverse();
+                                       displayList.reverse();
+                               }
+                       }
+
                        dataItems = dataList;
                        displayItems = displayList;
 
@@ -1167,7 +1180,7 @@ Edit.prototype.editors = {
                                success(item.value);
                        }
 
-                       initialDisplayValue = input.value;
+                       initialDisplayValue = [item.value];
                }
 
                function chooseItems(silent) {
@@ -1181,7 +1194,7 @@ Edit.prototype.editors = {
                                output.push(item.value);
                        });
 
-                       initialDisplayValue = input.value;
+                       initialDisplayValue = output;
 
                        success(output);
                }
@@ -1257,6 +1270,26 @@ Edit.prototype.editors = {
                        self.table.rowManager.element.removeEventListener("scroll", cancelItem);
                }
 
+               function scrollTovalue(char) {
+
+                       clearTimeout(searchWordTimeout);
+
+                       var character = String.fromCharCode(event.keyCode).toLowerCase();
+                       searchWord += character.toLowerCase();
+
+                       var match = dataItems.find(function (item) {
+                               return typeof item.label !== "undefined" && item.label.toLowerCase().startsWith(searchWord);
+                       });
+
+                       if (match) {
+                               setCurrentItem(match, !multiselect);
+                       }
+
+                       searchWordTimeout = setTimeout(function () {
+                               searchWord = "";
+                       }, 800);
+               }
+
                //style input
                input.setAttribute("type", "text");
 
@@ -1366,6 +1399,10 @@ Edit.prototype.editors = {
                                        if (self.currentCell === false) {
                                                e.preventDefault();
                                        }
+
+                                       if (e.keyCode >= 38 && e.keyCode <= 90) {
+                                               scrollTovalue(e.keyCode);
+                                       }
                        }
                });
 
@@ -1687,6 +1724,8 @@ Edit.prototype.editors = {
 
                function showList() {
                        if (!listEl.parentNode) {
+
+                               console.log("show", initialDisplayValue);
                                while (listEl.firstChild) {
                                        listEl.removeChild(listEl.firstChild);
                                }var offset = Tabulator.prototype.helpers.elOffset(cellEl);
@@ -2020,7 +2059,9 @@ Edit.prototype.editors = {
 
                //set new value
                function updateValue() {
-                       var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min;
+                       var style = window.getComputedStyle(element, null);
+
+                       var calcVal = percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue("padding-left")) - parseInt(style.getPropertyValue("padding-right"))) / 100)) + min;
                        success(calcVal);
                        element.setAttribute("aria-valuenow", calcVal);
                        element.setAttribute("aria-label", value);
index 3e88e5b..40f9456 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Edit=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(e){var t=this,i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?i.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?i.editor=t.editors[e.definition.formatter]:i.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}i.editor&&(e.modules.edit=i)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},Edit.prototype.bindEditor=function(e){var t=this,i=e.getElement();i.setAttribute("tabindex",0),i.addEventListener("click",function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})}),i.addEventListener("mousedown",function(e){2===e.button?e.preventDefault():t.mouseClick=!0}),i.addEventListener("focus",function(i){t.recursionBlock||t.edit(e,i,!1)})},Edit.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},Edit.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,n=e.row.getElement();n.offsetTop;n.offsetTop<t?this.table.rowManager.element.scrollTop-=t-n.offsetTop:n.offsetTop+n.offsetHeight>i&&(this.table.rowManager.element.scrollTop+=n.offsetTop+n.offsetHeight-i);var o=this.table.rowManager.element.scrollLeft,a=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,r=e.getElement();r.offsetLeft;this.table.modExists("frozenColumns")&&(o+=parseInt(this.table.modules.frozenColumns.leftMargin),a-=parseInt(this.table.modules.frozenColumns.rightMargin)),r.offsetLeft<o?this.table.rowManager.element.scrollLeft-=o-r.offsetLeft:r.offsetLeft+r.offsetWidth>a&&(this.table.rowManager.element.scrollLeft+=r.offsetLeft+r.offsetWidth-a)}},Edit.prototype.edit=function(e,t,i){function n(t){if(u.currentCell===e){var i=!0;return e.column.modules.validate&&u.table.modExists("validate")&&"manual"!=u.table.options.validationMode&&(i=u.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===u.table.options.validationMode?(u.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==u.editedCells.indexOf(e)&&u.editedCells.push(e),e.setValue(t,!0),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e),!0===i||(m.classList.add("tabulator-validation-fail"),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)):(u.invalidEdit=!0,m.classList.add("tabulator-validation-fail"),u.focusCellNoEvent(e,!0),c(),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)}}function o(){u.currentCell===e&&(u.cancelEdit(),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e))}function a(e){c=e}var r,l,s,u=this,d=!0,c=function(){},m=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,m.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":d=e.column.modules.edit.check(e.getComponent());break;case"boolean":d=e.column.modules.edit.check}if(d||i){if(u.cancelEdit(),u.currentCell=e,this.focusScrollAdjust(e),l=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,l)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,l),u.table.options.cellEditing.call(this.table,l),s="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(l):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(u,l,a,n,o,s)))return m.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),m.blur(),!1;for(m.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");m.firstChild;)m.removeChild(m.firstChild);m.appendChild(r),c();for(var f=m.children,p=0;p<f.length;p++)f[p].addEventListener("click",function(e){e.stopPropagation()});return!0}return this.mouseClick=!1,m.blur(),!1},Edit.prototype.maskInput=function(e,t){function i(t){var l=n[t];void 0!==l&&l!==r&&l!==o&&l!==a&&(e.value=e.value+""+l,i(t+1))}var n=t.mask,o=void 0!==t.maskLetterChar?t.maskLetterChar:"A",a=void 0!==t.maskNumberChar?t.maskNumberChar:"9",r=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*",l=!1;e.addEventListener("keydown",function(t){var i=e.value.length,s=t.key;if(t.keyCode>46){if(i>=n.length)return t.preventDefault(),t.stopPropagation(),l=!1,!1;switch(n[i]){case o:if(s.toUpperCase()==s.toLowerCase())return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case a:if(isNaN(s))return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case r:break;default:if(s!==n[i])return t.preventDefault(),t.stopPropagation(),l=!1,!1}l=!0}}),e.addEventListener("keyup",function(n){n.keyCode>46&&t.maskAutoFill&&i(e.value.length)}),e.placeholder||(e.placeholder=n),t.maskAutoFill&&i(e.value.length)},Edit.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},Edit.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,e.modules.validate&&(e.modules.validate.invalid=!1)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)},Edit.prototype.editors={input:function(e,t,i,n,o){function a(e){(null===r||void 0===r)&&""!==l.value||l.value!==r?i(l.value)&&(r=l.value):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type",o.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=void 0!==r?r:"",t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("change",a),l.addEventListener("blur",a),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a(e);break;case 27:n();break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(l,o),l},textarea:function(e,t,i,n,o){function a(t){(null===r||void 0===r)&&""!==u.value||u.value!==r?(i(u.value)&&(r=u.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):n()}var r=e.getValue(),l=o.verticalNavigation||"hybrid",s=String(null!==r&&void 0!==r?r:""),u=(s.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),d=0;if(u.style.display="block",u.style.padding="2px",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.whiteSpace="pre-wrap",u.style.resize="none",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),u.setAttribute(c,u.getAttribute(c)+o.elementAttributes["+"+c])):u.setAttribute(c,o.elementAttributes[c]);return u.value=s,t(function(){u.focus({preventScroll:!0}),u.style.height="100%",u.scrollHeight,u.style.height=u.scrollHeight+"px",e.getRow().normalizeHeight()}),u.addEventListener("change",a),u.addEventListener("blur",a),u.addEventListener("keyup",function(){u.style.height="";var t=u.scrollHeight;u.style.height=t+"px",t!=d&&(d=t,e.getRow().normalizeHeight())}),u.addEventListener("keydown",function(e){switch(e.keyCode){case 27:n();break;case 38:("editor"==l||"hybrid"==l&&u.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==l||"hybrid"==l&&u.selectionStart!==u.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(u,o),u},number:function(e,t,i,n,o){function a(){var e=s.value;isNaN(e)||""===e||(e=Number(e)),e!==r?i(e)&&(r=e):n()}var r=e.getValue(),l=o.verticalNavigation||"editor",s=document.createElement("input");if(s.setAttribute("type","number"),void 0!==o.max&&s.setAttribute("max",o.max),void 0!==o.min&&s.setAttribute("min",o.min),void 0!==o.step&&s.setAttribute("step",o.step),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var u in o.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),s.setAttribute(u,s.getAttribute(u)+o.elementAttributes["+"+u])):s.setAttribute(u,o.elementAttributes[u]);s.value=r;var d=function(e){a()};return t(function(){s.removeEventListener("blur",d),s.focus({preventScroll:!0}),s.style.height="100%",s.addEventListener("blur",d)}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(s,o),s},range:function(e,t,i,n,o){function a(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!=r?i(e)&&(r=e):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type","range"),void 0!==o.max&&l.setAttribute("max",o.max),void 0!==o.min&&l.setAttribute("min",o.min),void 0!==o.step&&l.setAttribute("step",o.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=r,t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("blur",function(e){a()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n()}}),l},select:function(e,t,i,n,o){function a(t){var i,n={},a=k.table.getData();return i=t?k.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create select lookup list:",t),n}function r(t,i){function n(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return i.indexOf(e.value)>-1&&u(e),o.push(e),a.push(e),e}var o=[],a=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},a.push(t),e.options.forEach(function(e){n(e)})):n(e):(t={label:e,value:e,element:!1},i.indexOf(t.value)>-1&&u(t),o.push(t),a.push(t))});else for(var r in t){var s={label:t[r],value:r,element:!1};i.indexOf(s.value)>-1&&u(s),o.push(s),a.push(s)}N=o,S=a,l()}function l(){for(;P.firstChild;)P.removeChild(P.firstChild);S.forEach(function(t){var i=t.element;if(!i){if(i=document.createElement("div"),t.label=o.listItemFormatter?o.listItemFormatter(t.value,t.label,e,i,t.itemParams):t.label,t.group?(i.classList.add("tabulator-edit-select-list-group"),i.tabIndex=0,i.innerHTML=""===t.label?"&nbsp;":t.label):(i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=""===t.label?"&nbsp;":t.label,i.addEventListener("click",function(){V=!0,setTimeout(function(){V=!1},10),I?(c(t),x.focus()):m(t)}),M.indexOf(t)>-1&&i.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var n in t.elementAttributes)"+"==n.charAt(0)?(n=n.slice(1),i.setAttribute(n,x.getAttribute(n)+t.elementAttributes["+"+n])):i.setAttribute(n,t.elementAttributes[n]);i.addEventListener("mousedown",function(){O=!1,setTimeout(function(){O=!0},10)}),t.element=i}P.appendChild(i)})}function s(e,t){!I&&T&&T.element&&T.element.classList.remove("active"),T&&T.element&&T.element.classList.remove("focused"),T=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function u(e){-1==M.indexOf(e)&&(M.push(e),s(e,!0)),p()}function d(e){var t=M[e];e>-1&&(M.splice(e,1),t.element&&t.element.classList.remove("active"))}function c(e){e||(e=T);var t=M.indexOf(e);t>-1?d(t):(!0!==I&&M.length>=I&&d(0),u(e)),p()}function m(e){g(),e||(e=T),e&&(x.value=e.label,i(e.value)),w=x.value}function f(e){e||g();var t=[];M.forEach(function(e){t.push(e.value)}),w=x.value,i(t)}function p(){var e=[];M.forEach(function(t){e.push(t.label)}),x.value=e.join(", "),!1===k.currentCell&&f(!0)}function b(){for(var e=M.length,t=0;t<e;t++)d(0)}function v(){g(),n()}function h(){if(M=[],!P.parentNode){!0===o.values?r(a(),w):"string"==typeof o.values?r(a(o.values),w):r(o.values||[],w);var e=Tabulator.prototype.helpers.elOffset(A);P.style.minWidth=A.offsetWidth+"px",P.style.top=e.top+A.offsetHeight+"px",P.style.left=e.left+"px",P.addEventListener("mousedown",function(e){O=!1,setTimeout(function(){O=!0},10)}),document.body.appendChild(P)}}function g(){P.parentNode&&P.parentNode.removeChild(P),y()}function y(){k.table.rowManager.element.removeEventListener("scroll",v)}var E=this,k=this,A=e.getElement(),C=e.getValue(),L=o.verticalNavigation||"editor",w=void 0!==C||null===C?Array.isArray(C)?C:[C]:void 0!==o.defaultValue?o.defaultValue:[],x=document.createElement("input"),P=document.createElement("div"),I=o.multiselect,N=[],T={},S=[],M=[],O=!0,V=!1;if((Array.isArray(o)||!Array.isArray(o)&&"object"===(void 0===o?"undefined":_typeof(o))&&!o.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),o={values:o}),x.setAttribute("type","text"),x.style.padding="4px",x.style.width="100%",x.style.boxSizing="border-box",x.style.cursor="default",x.readOnly=0!=this.currentCell,o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var j in o.elementAttributes)"+"==j.charAt(0)?(j=j.slice(1),x.setAttribute(j,x.getAttribute(j)+o.elementAttributes["+"+j])):x.setAttribute(j,o.elementAttributes[j]);return x.value=void 0!==C||null===C?C:"",x.addEventListener("search",function(e){x.value||(b(),f())}),x.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=N.indexOf(T),("editor"==L||"hybrid"==L&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&s(N[t-1],!I));break;case 40:t=N.indexOf(T),("editor"==L||"hybrid"==L&&t<N.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<N.length-1&&(-1==t?s(N[0],!I):s(N[t+1],!I)));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();break;case 13:I?c():m();break;case 27:v();break;case 9:break;default:!1===k.currentCell&&e.preventDefault()}}),x.addEventListener("blur",function(e){O&&(I?f():v())}),x.addEventListener("focus",function(e){V||h()}),P=document.createElement("div"),P.classList.add("tabulator-edit-select-list"),t(function(){x.style.height="100%",x.focus({preventScroll:!0})}),setTimeout(function(){E.table.rowManager.element.addEventListener("scroll",v)},10),x},autocomplete:function(e,t,i,n,o){function a(){!0===o.values?T=r():"string"==typeof o.values&&(T=r(o.values))}function r(t){var i,n={},a=E.table.getData();return i=t?E.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create autocomplete lookup list:",t),n}function l(e,t){var i,n,a=[];i=T||(o.values||[]),o.searchFunc?(a=o.searchFunc(e,i),a instanceof Promise?(s(void 0!==o.searchingPlaceholder?o.searchingPlaceholder:"Searching..."),a.then(function(e){c(u(e),t)}).catch(function(e){console.err("error in autocomplete search promise:",e)})):c(u(a),t)):(n=u(i),""===e?o.showListOnEmpty&&(a=n):n.forEach(function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&a.push(t)}),c(a,t))}function s(e){var t=document.createElement("div");d(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,x.appendChild(t))}function u(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var i={};"object"===(void 0===e?"undefined":_typeof(e))?(i.title=o.listItemFormatter?o.listItemFormatter(e.value,e.label):e.label,i.value=e.value):(i.title=o.listItemFormatter?o.listItemFormatter(e,e):e,i.value=e),t.push(i)});else for(var i in e){var n={title:o.listItemFormatter?o.listItemFormatter(i,e[i]):e[i],value:i};t.push(n)}return t}function d(){for(;x.firstChild;)x.removeChild(x.firstChild)}function c(e,t){e.length?m(e,t):o.emptyPlaceholder&&s(o.emptyPlaceholder)}function m(e,t){var i=!1;d(),P=e,P.forEach(function(e){var n=e.element;n||(n=document.createElement("div"),n.classList.add("tabulator-edit-select-list-item"),n.tabIndex=0,n.innerHTML=e.title,n.addEventListener("click",function(t){b(e),f()}),n.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),e.element=n,t&&e.value==A&&(w.value=e.title,e.element.classList.add("active"),i=!0),e===I&&(e.element.classList.add("active"),i=!0)),x.appendChild(n)}),i||b(!1)}function f(){v(),I?A!==I.value?(A=I.value,w.value=I.title,i(I.value)):n():o.freetext?(A=w.value,i(w.value)):o.allowEmpty&&""===w.value?(A=w.value,i(w.value)):n()}function p(){if(!x.parentNode){for(;x.firstChild;)x.removeChild(x.firstChild);var e=Tabulator.prototype.helpers.elOffset(k);x.style.minWidth=k.offsetWidth+"px",x.style.top=e.top+k.offsetHeight+"px",x.style.left=e.left+"px",document.body.appendChild(x)}}function b(e,t){I&&I.element&&I.element.classList.remove("active"),I=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function v(){x.parentNode&&x.parentNode.removeChild(x),g()}function h(){v(),n()}function g(){E.table.rowManager.element.removeEventListener("scroll",h)}var y=this,E=this,k=e.getElement(),A=e.getValue(),C=o.verticalNavigation||"editor",L=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:"",w=document.createElement("input"),x=document.createElement("div"),P=[],I=!1,N=!0,T=!1;if(w.setAttribute("type","search"),w.style.padding="4px",w.style.width="100%",w.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var S in o.elementAttributes)"+"==S.charAt(0)?(S=S.slice(1),w.setAttribute(S,w.getAttribute(S)+o.elementAttributes["+"+S])):w.setAttribute(S,o.elementAttributes[S]);return x.classList.add("tabulator-edit-select-list"),x.addEventListener("mousedown",function(e){N=!1,setTimeout(function(){N=!0},10)}),w.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=P.indexOf(I),("editor"==C||"hybrid"==C&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),b(t>0?P[t-1]:!1));break;case 40:t=P.indexOf(I),("editor"==C||"hybrid"==C&&t<P.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<P.length-1&&b(-1==t?P[0]:P[t+1]));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation();break;case 13:f();break;case 27:h();break;case 36:case 35:e.stopImmediatePropagation()}}),w.addEventListener("keyup",function(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:l(w.value)}}),w.addEventListener("search",function(e){l(w.value)}),w.addEventListener("blur",function(e){N&&f()}),w.addEventListener("focus",function(e){var t=L;a(),p(),w.value=t,l(t,!0)}),t(function(){w.style.height="100%",w.focus({preventScroll:!0})}),o.mask&&this.table.modules.edit.maskInput(w,o),setTimeout(function(){y.table.rowManager.element.addEventListener("scroll",h)},10),a(),w.value=L,l(L,!0),w},star:function(e,t,i,n,o){function a(e){m.forEach(function(t,i){i<e?("ie"==l.table.browser?t.setAttribute("class","tabulator-star-active"):t.classList.replace("tabulator-star-inactive","tabulator-star-active"),t.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==l.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')})}function r(e){u=e,a(e)}var l=this,s=e.getElement(),u=e.getValue(),d=s.getElementsByTagName("svg").length||5,c=s.getElementsByTagName("svg")[0]?s.getElementsByTagName("svg")[0].getAttribute("width"):14,m=[],f=document.createElement("div"),p=document.createElementNS("http://www.w3.org/2000/svg","svg");if(s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",f.style.verticalAlign="middle",f.style.display="inline-block",f.style.padding="4px",p.setAttribute("width",c),p.setAttribute("height",c),p.setAttribute("viewBox","0 0 512 512"),p.setAttribute("xml:space","preserve"),p.style.padding="0 1px",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var b in o.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),f.setAttribute(b,f.getAttribute(b)+o.elementAttributes["+"+b])):f.setAttribute(b,o.elementAttributes[b]);for(var v=1;v<=d;v++)!function(e){var t=document.createElement("span"),n=p.cloneNode(!0);m.push(n),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),a(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),s.blur()}),t.appendChild(n),f.appendChild(t)}(v);return u=Math.min(parseInt(u),d),a(u),f.addEventListener("mousemove",function(e){a(0)}),f.addEventListener("click",function(e){i(0)}),s.addEventListener("blur",function(e){n()}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(u+1);break;case 37:r(u-1);break;case 13:i(u);break;case 27:n()}}),f},progress:function(e,t,i,n,o){function a(){var e=c*Math.round(p.offsetWidth/(s.clientWidth/100))+d;i(e),s.setAttribute("aria-valuenow",e),s.setAttribute("aria-label",m)}var r,l,s=e.getElement(),u=void 0===o.max?s.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,d=void 0===o.min?s.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,c=(u-d)/100,m=e.getValue()||0,f=document.createElement("div"),p=document.createElement("div");if(f.style.position="absolute",f.style.right="0",f.style.top="0",f.style.bottom="0",f.style.width="5px",f.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var b in o.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),p.setAttribute(b,p.getAttribute(b)+o.elementAttributes["+"+b])):p.setAttribute(b,o.elementAttributes[b]);return s.style.padding="4px 4px",m=Math.min(parseFloat(m),u),m=Math.max(parseFloat(m),d),m=Math.round((m-d)/c),p.style.width=m+"%",s.setAttribute("aria-valuemin",d),s.setAttribute("aria-valuemax",u),p.appendChild(f),f.addEventListener("mousedown",function(e){r=e.screenX,l=p.offsetWidth}),f.addEventListener("mouseover",function(){f.style.cursor="ew-resize"}),s.addEventListener("mousemove",function(e){r&&(p.style.width=l+e.screenX-r+"px")}),s.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,l=!1,a())}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),p.style.width=p.clientWidth+s.clientWidth/100+"px";break;case 37:e.preventDefault(),p.style.width=p.clientWidth-s.clientWidth/100+"px";break;case 9:case 13:a();break;case 27:n()}}),s.addEventListener("blur",function(){n()}),p},tickCross:function(e,t,i,n,o){function a(e){return s?e?d?u:l.checked:l.checked&&!d?(l.checked=!1,l.indeterminate=!0,d=!0,u):(d=!1,l.checked):l.checked}var r=e.getValue(),l=document.createElement("input"),s=o.tristate,u=void 0===o.indeterminateValue?null:o.indeterminateValue,d=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+o.elementAttributes["+"+c])):l.setAttribute(c,o.elementAttributes[c]);return l.value=r,!s||void 0!==r&&r!==u&&""!==r||(d=!0,l.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){l.focus({preventScroll:!0})}),l.checked=!0===r||"true"===r||"True"===r||1===r,t(function(){l.focus()}),l.addEventListener("change",function(e){i(a())}),l.addEventListener("blur",function(e){i(a(!0))}),l.addEventListener("keydown",function(e){13==e.keyCode&&i(a()),27==e.keyCode&&n()}),l}},Tabulator.prototype.registerModule("edit",Edit);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Edit=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(e){var t=this,i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?i.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?i.editor=t.editors[e.definition.formatter]:i.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}i.editor&&(e.modules.edit=i)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(e){var t,i=this.currentCell;if(this.invalidEdit=!1,i){for(this.currentCell=!1,t=i.getElement(),e?i.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);i.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},Edit.prototype.bindEditor=function(e){var t=this,i=e.getElement(!0);i.setAttribute("tabindex",0),i.addEventListener("click",function(e){i.classList.contains("tabulator-editing")||i.focus({preventScroll:!0})}),i.addEventListener("mousedown",function(e){2===e.button?e.preventDefault():t.mouseClick=!0}),i.addEventListener("focus",function(i){t.recursionBlock||t.edit(e,i,!1)})},Edit.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},Edit.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,i=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,n=e.row.getElement();n.offsetTop;n.offsetTop<t?this.table.rowManager.element.scrollTop-=t-n.offsetTop:n.offsetTop+n.offsetHeight>i&&(this.table.rowManager.element.scrollTop+=n.offsetTop+n.offsetHeight-i);var o=this.table.rowManager.element.scrollLeft,a=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,r=e.getElement();r.offsetLeft;this.table.modExists("frozenColumns")&&(o+=parseInt(this.table.modules.frozenColumns.leftMargin),a-=parseInt(this.table.modules.frozenColumns.rightMargin)),this.table.options.virtualDomHoz&&(o-=parseInt(this.table.vdomHoz.vDomPadLeft),a-=parseInt(this.table.vdomHoz.vDomPadLeft)),r.offsetLeft<o?this.table.rowManager.element.scrollLeft-=o-r.offsetLeft:r.offsetLeft+r.offsetWidth>a&&(this.table.rowManager.element.scrollLeft+=r.offsetLeft+r.offsetWidth-a)}},Edit.prototype.edit=function(e,t,i){function n(t){if(u.currentCell===e){var i=!0;return e.column.modules.validate&&u.table.modExists("validate")&&"manual"!=u.table.options.validationMode&&(i=u.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===i||"highlight"===u.table.options.validationMode?(u.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==u.editedCells.indexOf(e)&&u.editedCells.push(e),e.setValue(t,!0),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e),!0===i||(m.classList.add("tabulator-validation-fail"),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)):(u.invalidEdit=!0,m.classList.add("tabulator-validation-fail"),u.focusCellNoEvent(e,!0),c(),u.table.options.validationFailed.call(u.table,e.getComponent(),t,i),!1)}}function o(){u.currentCell===e&&(u.cancelEdit(),u.table.options.dataTree&&u.table.modExists("dataTree")&&u.table.modules.dataTree.checkForRestyle(e))}function a(e){c=e}var r,l,s,u=this,d=!0,c=function(){},m=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,m.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":d=e.column.modules.edit.check(e.getComponent());break;case"boolean":d=e.column.modules.edit.check}if(d||i){if(u.cancelEdit(),u.currentCell=e,this.focusScrollAdjust(e),l=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,l)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,l),u.table.options.cellEditing.call(this.table,l),s="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(l):e.column.modules.edit.params,!1===(r=e.column.modules.edit.editor.call(u,l,a,n,o,s)))return m.blur(),!1;if(!(r instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",r),m.blur(),!1;for(m.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");m.firstChild;)m.removeChild(m.firstChild);m.appendChild(r),c();for(var f=m.children,p=0;p<f.length;p++)f[p].addEventListener("click",function(e){e.stopPropagation()});return!0}return this.mouseClick=!1,m.blur(),!1},Edit.prototype.maskInput=function(e,t){function i(t){var l=n[t];void 0!==l&&l!==r&&l!==o&&l!==a&&(e.value=e.value+""+l,i(t+1))}var n=t.mask,o=void 0!==t.maskLetterChar?t.maskLetterChar:"A",a=void 0!==t.maskNumberChar?t.maskNumberChar:"9",r=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*",l=!1;e.addEventListener("keydown",function(t){var i=e.value.length,s=t.key;if(t.keyCode>46){if(i>=n.length)return t.preventDefault(),t.stopPropagation(),l=!1,!1;switch(n[i]){case o:if(s.toUpperCase()==s.toLowerCase())return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case a:if(isNaN(s))return t.preventDefault(),t.stopPropagation(),l=!1,!1;break;case r:break;default:if(s!==n[i])return t.preventDefault(),t.stopPropagation(),l=!1,!1}l=!0}}),e.addEventListener("keyup",function(n){n.keyCode>46&&t.maskAutoFill&&i(e.value.length)}),e.placeholder||(e.placeholder=n),t.maskAutoFill&&i(e.value.length)},Edit.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},Edit.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,e.modules.validate&&(e.modules.validate.invalid=!1)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)},Edit.prototype.editors={input:function(e,t,i,n,o){function a(e){(null===r||void 0===r)&&""!==l.value||l.value!==r?i(l.value)&&(r=l.value):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type",o.search?"search":"text"),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=void 0!==r?r:"",t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("change",a),l.addEventListener("blur",a),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a(e);break;case 27:n();break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(l,o),l},textarea:function(e,t,i,n,o){function a(t){(null===r||void 0===r)&&""!==u.value||u.value!==r?(i(u.value)&&(r=u.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):n()}var r=e.getValue(),l=o.verticalNavigation||"hybrid",s=String(null!==r&&void 0!==r?r:""),u=(s.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),d=0;if(u.style.display="block",u.style.padding="2px",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.whiteSpace="pre-wrap",u.style.resize="none",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),u.setAttribute(c,u.getAttribute(c)+o.elementAttributes["+"+c])):u.setAttribute(c,o.elementAttributes[c]);return u.value=s,t(function(){u.focus({preventScroll:!0}),u.style.height="100%",u.scrollHeight,u.style.height=u.scrollHeight+"px",e.getRow().normalizeHeight()}),u.addEventListener("change",a),u.addEventListener("blur",a),u.addEventListener("keyup",function(){u.style.height="";var t=u.scrollHeight;u.style.height=t+"px",t!=d&&(d=t,e.getRow().normalizeHeight())}),u.addEventListener("keydown",function(e){switch(e.keyCode){case 27:n();break;case 38:("editor"==l||"hybrid"==l&&u.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==l||"hybrid"==l&&u.selectionStart!==u.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(u,o),u},number:function(e,t,i,n,o){function a(){var e=s.value;isNaN(e)||""===e||(e=Number(e)),e!==r?i(e)&&(r=e):n()}var r=e.getValue(),l=o.verticalNavigation||"editor",s=document.createElement("input");if(s.setAttribute("type","number"),void 0!==o.max&&s.setAttribute("max",o.max),void 0!==o.min&&s.setAttribute("min",o.min),void 0!==o.step&&s.setAttribute("step",o.step),s.style.padding="4px",s.style.width="100%",s.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var u in o.elementAttributes)"+"==u.charAt(0)?(u=u.slice(1),s.setAttribute(u,s.getAttribute(u)+o.elementAttributes["+"+u])):s.setAttribute(u,o.elementAttributes[u]);s.value=r;var d=function(e){a()};return t(function(){s.removeEventListener("blur",d),s.focus({preventScroll:!0}),s.style.height="100%",s.addEventListener("blur",d)}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n();break;case 38:case 40:"editor"==l&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),o.mask&&this.table.modules.edit.maskInput(s,o),s},range:function(e,t,i,n,o){function a(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!=r?i(e)&&(r=e):n()}var r=e.getValue(),l=document.createElement("input");if(l.setAttribute("type","range"),void 0!==o.max&&l.setAttribute("max",o.max),void 0!==o.min&&l.setAttribute("min",o.min),void 0!==o.step&&l.setAttribute("step",o.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var s in o.elementAttributes)"+"==s.charAt(0)?(s=s.slice(1),l.setAttribute(s,l.getAttribute(s)+o.elementAttributes["+"+s])):l.setAttribute(s,o.elementAttributes[s]);return l.value=r,t(function(){l.focus({preventScroll:!0}),l.style.height="100%"}),l.addEventListener("blur",function(e){a()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:a();break;case 27:n()}}),l},select:function(e,t,i,n,o){function a(t){var i,n={},o=A.table.getData();return i=t?A.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?o.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}):console.warn("unable to find matching column to create select lookup list:",t),Object.keys(n)}function r(t,i){function n(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return i.indexOf(e.value)>-1&&u(e),a.push(e),r.push(e),e}var a=[],r=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},r.push(t),e.options.forEach(function(e){n(e)})):n(e):(t={label:e,value:e,element:!1},i.indexOf(t.value)>-1&&u(t),a.push(t),r.push(t))});else for(var s in t){var d={label:t[s],value:s,element:!1};i.indexOf(d.value)>-1&&u(d),a.push(d),r.push(d)}o.sortValuesList&&(a.sort(function(e,t){return e.label<t.label?-1:e.label>t.label?1:0}),r.sort(function(e,t){return e.label<t.label?-1:e.label>t.label?1:0}),"asc"!==o.sortValuesList&&(a.reverse(),r.reverse())),N=a,M=r,l()}function l(){for(;I.firstChild;)I.removeChild(I.firstChild);M.forEach(function(t){var i=t.element;if(!i){if(i=document.createElement("div"),t.label=o.listItemFormatter?o.listItemFormatter(t.value,t.label,e,i,t.itemParams):t.label,t.group?(i.classList.add("tabulator-edit-select-list-group"),i.tabIndex=0,i.innerHTML=""===t.label?"&nbsp;":t.label):(i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=""===t.label?"&nbsp;":t.label,i.addEventListener("click",function(){j=!0,setTimeout(function(){j=!1},10),T?(c(t),P.focus()):m(t)}),V.indexOf(t)>-1&&i.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var n in t.elementAttributes)"+"==n.charAt(0)?(n=n.slice(1),i.setAttribute(n,P.getAttribute(n)+t.elementAttributes["+"+n])):i.setAttribute(n,t.elementAttributes[n]);i.addEventListener("mousedown",function(){O=!1,setTimeout(function(){O=!0},10)}),t.element=i}I.appendChild(i)})}function s(e,t){!T&&S&&S.element&&S.element.classList.remove("active"),S&&S.element&&S.element.classList.remove("focused"),S=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function u(e){-1==V.indexOf(e)&&(V.push(e),s(e,!0)),p()}function d(e){var t=V[e];e>-1&&(V.splice(e,1),t.element&&t.element.classList.remove("active"))}function c(e){e||(e=S);var t=V.indexOf(e);t>-1?d(t):(!0!==T&&V.length>=T&&d(0),u(e)),p()}function m(e){g(),e||(e=S),e&&(P.value=e.label,i(e.value)),x=[e.value]}function f(e){e||g();var t=[];V.forEach(function(e){t.push(e.value)}),x=t,i(t)}function p(){var e=[];V.forEach(function(t){e.push(t.label)}),P.value=e.join(", "),!1===A.currentCell&&f(!0)}function b(){for(var e=V.length,t=0;t<e;t++)d(0)}function v(){g(),n()}function h(){if(V=[],!I.parentNode){!0===o.values?r(a(),x):"string"==typeof o.values?r(a(o.values),x):r(o.values||[],x);var e=Tabulator.prototype.helpers.elOffset(C);I.style.minWidth=C.offsetWidth+"px",I.style.top=e.top+C.offsetHeight+"px",I.style.left=e.left+"px",I.addEventListener("mousedown",function(e){O=!1,setTimeout(function(){O=!0},10)}),document.body.appendChild(I)}}function g(){I.parentNode&&I.parentNode.removeChild(I),y()}function y(){A.table.rowManager.element.removeEventListener("scroll",v)}function E(e){clearTimeout(H);var t=String.fromCharCode(event.keyCode).toLowerCase();F+=t.toLowerCase();var i=N.find(function(e){return void 0!==e.label&&e.label.toLowerCase().startsWith(F)});i&&s(i,!T),H=setTimeout(function(){F=""},800)}var k=this,A=this,C=e.getElement(),L=e.getValue(),w=o.verticalNavigation||"editor",x=void 0!==L||null===L?Array.isArray(L)?L:[L]:void 0!==o.defaultValue?o.defaultValue:[],P=document.createElement("input"),I=document.createElement("div"),T=o.multiselect,N=[],S={},M=[],V=[],O=!0,j=!1,F="",H=null;if((Array.isArray(o)||!Array.isArray(o)&&"object"===(void 0===o?"undefined":_typeof(o))&&!o.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),o={values:o}),P.setAttribute("type","text"),P.style.padding="4px",P.style.width="100%",P.style.boxSizing="border-box",P.style.cursor="default",P.readOnly=0!=this.currentCell,o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var W in o.elementAttributes)"+"==W.charAt(0)?(W=W.slice(1),P.setAttribute(W,P.getAttribute(W)+o.elementAttributes["+"+W])):P.setAttribute(W,o.elementAttributes[W]);return P.value=void 0!==L||null===L?L:"",P.addEventListener("search",function(e){P.value||(b(),f())}),P.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=N.indexOf(S),("editor"==w||"hybrid"==w&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&s(N[t-1],!T));break;case 40:t=N.indexOf(S),("editor"==w||"hybrid"==w&&t<N.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<N.length-1&&(-1==t?s(N[0],!T):s(N[t+1],!T)));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();break;case 13:T?c():m();break;case 27:v();break;case 9:break;default:!1===A.currentCell&&e.preventDefault(),e.keyCode>=38&&e.keyCode<=90&&E(e.keyCode)}}),P.addEventListener("blur",function(e){O&&(T?f():v())}),P.addEventListener("focus",function(e){j||h()}),I=document.createElement("div"),I.classList.add("tabulator-edit-select-list"),t(function(){P.style.height="100%",P.focus({preventScroll:!0})}),setTimeout(function(){k.table.rowManager.element.addEventListener("scroll",v)},10),P},autocomplete:function(e,t,i,n,o){function a(){!0===o.values?N=r():"string"==typeof o.values&&(N=r(o.values))}function r(t){var i,n={},a=E.table.getData();return i=t?E.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),i?(a.forEach(function(e){var t=i.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(n[t]=!0)}),n=o.sortValuesList?"asc"==o.sortValuesList?Object.keys(n).sort():Object.keys(n).sort().reverse():Object.keys(n)):console.warn("unable to find matching column to create autocomplete lookup list:",t),n}function l(e,t){var i,n,a=[];i=N||(o.values||[]),o.searchFunc?(a=o.searchFunc(e,i),a instanceof Promise?(s(void 0!==o.searchingPlaceholder?o.searchingPlaceholder:"Searching..."),a.then(function(e){c(u(e),t)}).catch(function(e){console.err("error in autocomplete search promise:",e)})):c(u(a),t)):(n=u(i),""===e?o.showListOnEmpty&&(a=n):n.forEach(function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&a.push(t)}),c(a,t))}function s(e){var t=document.createElement("div");d(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,x.appendChild(t))}function u(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var i={};"object"===(void 0===e?"undefined":_typeof(e))?(i.title=o.listItemFormatter?o.listItemFormatter(e.value,e.label):e.label,i.value=e.value):(i.title=o.listItemFormatter?o.listItemFormatter(e,e):e,i.value=e),t.push(i)});else for(var i in e){var n={title:o.listItemFormatter?o.listItemFormatter(i,e[i]):e[i],value:i};t.push(n)}return t}function d(){for(;x.firstChild;)x.removeChild(x.firstChild)}function c(e,t){e.length?m(e,t):o.emptyPlaceholder&&s(o.emptyPlaceholder)}function m(e,t){var i=!1;d(),P=e,P.forEach(function(e){var n=e.element;n||(n=document.createElement("div"),n.classList.add("tabulator-edit-select-list-item"),n.tabIndex=0,n.innerHTML=e.title,n.addEventListener("click",function(t){b(e),f()}),n.addEventListener("mousedown",function(e){T=!1,setTimeout(function(){T=!0},10)}),e.element=n,t&&e.value==A&&(w.value=e.title,e.element.classList.add("active"),i=!0),e===I&&(e.element.classList.add("active"),i=!0)),x.appendChild(n)}),i||b(!1)}function f(){v(),I?A!==I.value?(A=I.value,w.value=I.title,i(I.value)):n():o.freetext?(A=w.value,i(w.value)):o.allowEmpty&&""===w.value?(A=w.value,i(w.value)):n()}function p(){if(!x.parentNode){for(console.log("show",L);x.firstChild;)x.removeChild(x.firstChild);var e=Tabulator.prototype.helpers.elOffset(k);x.style.minWidth=k.offsetWidth+"px",x.style.top=e.top+k.offsetHeight+"px",x.style.left=e.left+"px",document.body.appendChild(x)}}function b(e,t){I&&I.element&&I.element.classList.remove("active"),I=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function v(){x.parentNode&&x.parentNode.removeChild(x),g()}function h(){v(),n()}function g(){E.table.rowManager.element.removeEventListener("scroll",h)}var y=this,E=this,k=e.getElement(),A=e.getValue(),C=o.verticalNavigation||"editor",L=void 0!==A||null===A?A:void 0!==o.defaultValue?o.defaultValue:"",w=document.createElement("input"),x=document.createElement("div"),P=[],I=!1,T=!0,N=!1;if(w.setAttribute("type","search"),w.style.padding="4px",w.style.width="100%",w.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var S in o.elementAttributes)"+"==S.charAt(0)?(S=S.slice(1),w.setAttribute(S,w.getAttribute(S)+o.elementAttributes["+"+S])):w.setAttribute(S,o.elementAttributes[S]);return x.classList.add("tabulator-edit-select-list"),x.addEventListener("mousedown",function(e){T=!1,setTimeout(function(){T=!0},10)}),w.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=P.indexOf(I),("editor"==C||"hybrid"==C&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),b(t>0?P[t-1]:!1));break;case 40:t=P.indexOf(I),("editor"==C||"hybrid"==C&&t<P.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<P.length-1&&b(-1==t?P[0]:P[t+1]));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation();break;case 13:f();break;case 27:h();break;case 36:case 35:e.stopImmediatePropagation()}}),w.addEventListener("keyup",function(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:l(w.value)}}),w.addEventListener("search",function(e){l(w.value)}),w.addEventListener("blur",function(e){T&&f()}),w.addEventListener("focus",function(e){var t=L;a(),p(),w.value=t,l(t,!0)}),t(function(){w.style.height="100%",w.focus({preventScroll:!0})}),o.mask&&this.table.modules.edit.maskInput(w,o),setTimeout(function(){y.table.rowManager.element.addEventListener("scroll",h)},10),a(),w.value=L,l(L,!0),w},star:function(e,t,i,n,o){function a(e){m.forEach(function(t,i){i<e?("ie"==l.table.browser?t.setAttribute("class","tabulator-star-active"):t.classList.replace("tabulator-star-inactive","tabulator-star-active"),t.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==l.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')})}function r(e){u=e,a(e)}var l=this,s=e.getElement(),u=e.getValue(),d=s.getElementsByTagName("svg").length||5,c=s.getElementsByTagName("svg")[0]?s.getElementsByTagName("svg")[0].getAttribute("width"):14,m=[],f=document.createElement("div"),p=document.createElementNS("http://www.w3.org/2000/svg","svg");if(s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",f.style.verticalAlign="middle",f.style.display="inline-block",f.style.padding="4px",p.setAttribute("width",c),p.setAttribute("height",c),p.setAttribute("viewBox","0 0 512 512"),p.setAttribute("xml:space","preserve"),p.style.padding="0 1px",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var b in o.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),f.setAttribute(b,f.getAttribute(b)+o.elementAttributes["+"+b])):f.setAttribute(b,o.elementAttributes[b]);for(var v=1;v<=d;v++)!function(e){var t=document.createElement("span"),n=p.cloneNode(!0);m.push(n),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),a(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i(e),s.blur()}),t.appendChild(n),f.appendChild(t)}(v);return u=Math.min(parseInt(u),d),a(u),f.addEventListener("mousemove",function(e){a(0)}),f.addEventListener("click",function(e){i(0)}),s.addEventListener("blur",function(e){n()}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:r(u+1);break;case 37:r(u-1);break;case 13:i(u);break;case 27:n()}}),f},progress:function(e,t,i,n,o){function a(){var e=window.getComputedStyle(s,null),t=c*Math.round(p.offsetWidth/((s.clientWidth-parseInt(e.getPropertyValue("padding-left"))-parseInt(e.getPropertyValue("padding-right")))/100))+d;i(t),s.setAttribute("aria-valuenow",t),s.setAttribute("aria-label",m)}var r,l,s=e.getElement(),u=void 0===o.max?s.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,d=void 0===o.min?s.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,c=(u-d)/100,m=e.getValue()||0,f=document.createElement("div"),p=document.createElement("div");if(f.style.position="absolute",f.style.right="0",f.style.top="0",f.style.bottom="0",f.style.width="5px",f.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var b in o.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),p.setAttribute(b,p.getAttribute(b)+o.elementAttributes["+"+b])):p.setAttribute(b,o.elementAttributes[b]);return s.style.padding="4px 4px",m=Math.min(parseFloat(m),u),m=Math.max(parseFloat(m),d),m=Math.round((m-d)/c),p.style.width=m+"%",s.setAttribute("aria-valuemin",d),s.setAttribute("aria-valuemax",u),p.appendChild(f),f.addEventListener("mousedown",function(e){r=e.screenX,l=p.offsetWidth}),f.addEventListener("mouseover",function(){f.style.cursor="ew-resize"}),s.addEventListener("mousemove",function(e){r&&(p.style.width=l+e.screenX-r+"px")}),s.addEventListener("mouseup",function(e){r&&(e.stopPropagation(),e.stopImmediatePropagation(),r=!1,l=!1,a())}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),p.style.width=p.clientWidth+s.clientWidth/100+"px";break;case 37:e.preventDefault(),p.style.width=p.clientWidth-s.clientWidth/100+"px";break;case 9:case 13:a();break;case 27:n()}}),s.addEventListener("blur",function(){n()}),p},tickCross:function(e,t,i,n,o){function a(e){return s?e?d?u:l.checked:l.checked&&!d?(l.checked=!1,l.indeterminate=!0,d=!0,u):(d=!1,l.checked):l.checked}var r=e.getValue(),l=document.createElement("input"),s=o.tristate,u=void 0===o.indeterminateValue?null:o.indeterminateValue,d=!1;if(l.setAttribute("type","checkbox"),l.style.marginTop="5px",l.style.boxSizing="border-box",o.elementAttributes&&"object"==_typeof(o.elementAttributes))for(var c in o.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+o.elementAttributes["+"+c])):l.setAttribute(c,o.elementAttributes[c]);return l.value=r,!s||void 0!==r&&r!==u&&""!==r||(d=!0,l.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){l.focus({preventScroll:!0})}),l.checked=!0===r||"true"===r||"True"===r||1===r,t(function(){l.focus()}),l.addEventListener("change",function(e){i(a())}),l.addEventListener("blur",function(e){i(a(!0))}),l.addEventListener("keydown",function(e){13==e.keyCode&&i(a()),27==e.keyCode&&n()}),l}},Tabulator.prototype.registerModule("edit",Edit);
\ No newline at end of file
index b3ab7de..7f59cbd 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var ExportRow = function ExportRow(type, columns, component, indent) {
        this.type = type;
index c3b6553..a99f916 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ExportRow=function(t,e,o,n){this.type=t,this.columns=e,this.component=o||!1,this.indent=n||0},ExportColumn=function(t,e,o,n,r){this.value=t,this.component=e||!1,this.width=o,this.height=n,this.depth=r},Export=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(t,e,o,n){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=n;var r=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],a=this.bodyToExportRows(this.rowLookup(o));return r.concat(a)},Export.prototype.genereateTable=function(t,e,o,n){var r=this.generateExportList(t,e,o,n);return this.genereateTableElement(r)},Export.prototype.rowLookup=function(t){var e=this,o=[];if("function"==typeof t)t.call(this.table).forEach(function(t){(t=e.table.rowManager.findRow(t))&&o.push(t)});else switch(t){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],o)},Export.prototype.generateColumnGroupHeaders=function(){var t=this,e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var n=t.processColumnGroup(o);n&&e.push(n)}),e},Export.prototype.processColumnGroup=function(t){var e=this,o=t.columns,n=0,r=t.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||t.definition.title,a={title:r,column:t,depth:1};if(o.length){if(a.subGroups=[],a.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(a.width+=o.width,a.subGroups.push(o),o.depth>n&&(n=o.depth))}),a.depth+=n,!a.width)return!1}else{if(!this.columnVisCheck(t))return!1;a.width=1}return a},Export.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(t){function e(t,r){var a=n-r;if(void 0===o[r]&&(o[r]=[]),t.height=t.subGroups?1:a-t.depth+1,o[r].push(t),t.height>1)for(var l=1;l<t.height;l++)void 0===o[r+l]&&(o[r+l]=[]),o[r+l].push(!1);if(t.width>1)for(var i=1;i<t.width;i++)o[r].push(!1);t.subGroups&&t.subGroups.forEach(function(t){e(t,r+1)})}var o=[],n=0,r=[];return t.forEach(function(t){t.depth>n&&(n=t.depth)}),t.forEach(function(t){e(t,0)}),o.forEach(function(t){var e=[];t.forEach(function(t){t?e.push(new ExportColumn(t.title,t.column.getComponent(),t.width,t.height,t.depth)):e.push(null)}),r.push(new ExportRow("header",e))}),r},Export.prototype.bodyToExportRows=function(t){var e=this,o=[],n=[];return this.table.columnManager.columnsByIndex.forEach(function(t){e.columnVisCheck(t)&&o.push(t.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&t.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&t.push(this.table.modules.columnCalcs.botRow)),t=t.filter(function(t){switch(t.type){case"group":return!1!==e.config.rowGroups;case"calc":return!1!==e.config.columnCalcs;case"row":return!(e.table.options.dataTree&&!1===e.config.dataTree&&t.modules.dataTree.parent)}return!0}),t.forEach(function(t,r){var a=t.getData(e.colVisProp),l=[],i=0;switch(t.type){case"group":i=t.level,l.push(new ExportColumn(t.key,t.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(t){l.push(new ExportColumn(t._column.getFieldValue(a),t,1,1))}),e.table.options.dataTree&&!1!==e.config.dataTree&&(i=t.modules.dataTree.index)}n.push(new ExportRow(t.type,l,t.getComponent(),i))}),n},Export.prototype.genereateTableElement=function(t){var e=this,o=document.createElement("table"),n=document.createElement("thead"),r=document.createElement("tbody"),a=this.lookupTableStyles(),l=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i={};return i.rowFormatter=null!==l?l:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(i.treeElementField=this.table.modules.dataTree.elementField),i.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],i.groupHeader&&!Array.isArray(i.groupHeader)&&(i.groupHeader=[i.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),n,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),t.forEach(function(t,o){switch(t.type){case"header":n.appendChild(e.genereateHeaderElement(t,i,a));break;case"group":r.appendChild(e.genereateGroupElement(t,i,a));break;case"calc":r.appendChild(e.genereateCalcElement(t,i,a));break;case"row":var l=e.genereateRowElement(t,i,a);e.mapElementStyles(o%2&&a.evenRow?a.evenRow:a.oddRow,l,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),r.appendChild(l)}}),n.innerHTML&&o.appendChild(n),o.appendChild(r),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},Export.prototype.lookupTableStyles=function(){var t={};return this.cloneTableStyle&&window.getComputedStyle&&(t.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),t.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),t.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),t.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),t.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],t.firstRow&&(t.styleCells=t.firstRow.getElementsByClassName("tabulator-cell"),t.firstCell=t.styleCells[0],t.lastCell=t.styleCells[t.styleCells.length-1])),t},Export.prototype.genereateHeaderElement=function(t,e,o){var n=this,r=document.createElement("tr");return t.columns.forEach(function(t){if(t){var e=document.createElement("th"),o=t.component._column.definition.cssClass?t.component._column.definition.cssClass.split(" "):[];e.colSpan=t.width,e.rowSpan=t.height,e.innerHTML=t.value,n.cloneTableStyle&&(e.style.boxSizing="border-box"),o.forEach(function(t){e.classList.add(t)}),n.mapElementStyles(t.component.getElement(),e,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),n.mapElementStyles(t.component._column.contentElement,e,["padding-top","padding-left","padding-right","padding-bottom"]),t.component._column.visible?n.mapElementStyles(t.component.getElement(),e,["width"]):t.component._column.definition.width&&(e.style.width=t.component._column.definition.width+"px"),t.component._column.parent&&n.mapElementStyles(t.component._column.parent.groupElement,e,["border-top"]),r.appendChild(e)}}),r},Export.prototype.genereateGroupElement=function(t,e,o){var n=document.createElement("tr"),r=document.createElement("td"),a=t.columns[0];return n.classList.add("tabulator-print-table-row"),e.groupHeader&&e.groupHeader[t.indent]?a.value=e.groupHeader[t.indent](a.value,t.component._group.getRowCount(),t.component._group.getData(),t.component):!1===e.groupHeader?a.value=a.value:a.value=t.component._group.generator(a.value,t.component._group.getRowCount(),t.component._group.getData(),t.component),r.colSpan=a.width,r.innerHTML=a.value,n.classList.add("tabulator-print-table-group"),n.classList.add("tabulator-group-level-"+t.indent),a.component.isVisible()&&n.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,r,["padding-top","padding-left","padding-right","padding-bottom"]),n.appendChild(r),n},Export.prototype.genereateCalcElement=function(t,e,o){var n=this.genereateRowElement(t,e,o);return n.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,n,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n},Export.prototype.genereateRowElement=function(t,e,o){var n=this,r=document.createElement("tr");return r.classList.add("tabulator-print-table-row"),t.columns.forEach(function(a){if(a){var l=document.createElement("td"),s=a.component._column,p=a.value,c={modules:{},getValue:function(){return p},getField:function(){return s.definition.field},getElement:function(){return l},getColumn:function(){return s.getComponent()},getData:function(){return t.component.getData()},getRow:function(){return t.component},getComponent:function(){return c},column:s};if((s.definition.cssClass?s.definition.cssClass.split(" "):[]).forEach(function(t){l.classList.add(t)}),n.table.modExists("format")&&!1!==n.config.formatCells)p=n.table.modules.format.formatExportValue(c,n.colVisProp);else switch(void 0===p?"undefined":_typeof(p)){case"object":p=JSON.stringify(p);break;case"undefined":case"null":p="";break;default:p=p}p instanceof Node?l.appendChild(p):l.innerHTML=p,o.firstCell&&(n.mapElementStyles(o.firstCell,l,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),s.definition.align&&(l.style.textAlign=s.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(e.treeElementField&&e.treeElementField==s.field||!e.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&l.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),l.firstChild),t.component._row.modules.dataTree.branchEl&&l.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),l.firstChild)),r.appendChild(l),c.modules.format&&c.modules.format.renderedCallback&&c.modules.format.renderedCallback(),e.rowFormatter&&!1!==n.config.formatCells&&e.rowFormatter(t.component)}}),r},Export.prototype.genereateHTMLTable=function(t){var e=document.createElement("div");return e.appendChild(this.genereateTableElement(t)),e.innerHTML},Export.prototype.getHtml=function(t,e,o,n){var r=this.generateExportList(o||this.table.options.htmlOutputConfig,e,t,n||"htmlOutput");return this.genereateHTMLTable(r)},Export.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var n={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var r=window.getComputedStyle(t);o.forEach(function(t){e.style[n[t]]=r.getPropertyValue(t)})}}},Tabulator.prototype.registerModule("export",Export);
\ No newline at end of file
index 1805bbc..5e6c1aa 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Filter = function Filter(table) {
 
@@ -143,7 +143,7 @@ Filter.prototype.generateHeaderFilterElement = function (column, initialValue, r
 
                //set empty value function
                column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {
-                       return !value && value !== "0";
+                       return !value && value !== "0" && value !== 0;
                };
 
                filterElement = document.createElement("div");
@@ -583,7 +583,9 @@ Filter.prototype.clearHeaderFilter = function () {
        self.prevHeaderFilterChangeCheck = "{}";
 
        this.headerFilterColumns.forEach(function (column) {
-               column.modules.filter.value = null;
+               if (typeof column.modules.filter.value !== "undefined") {
+                       delete column.modules.filter.value;
+               }
                column.modules.filter.prevSuccess = undefined;
                self.reloadHeaderFilter(column);
        });
index a77b187..0d941f6 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Filter=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(e,t){function r(t){var r,o="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",s="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[l];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,r=function(r){var i=e.definition.headerFilterFuncParams||{},l=e.getFieldValue(r);return i="function"==typeof i?i(t,l,r):i,n.filters[e.definition.headerFilterFunc](t,l,r,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=function(r){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(r);return i="function"==typeof i?i(t,n,r):i,e.definition.headerFilterFunc(t,n,r,i)},a=r}if(!r)switch(o){case"partial":r=function(r){var i=e.getFieldValue(r);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:r=function(r){return e.getFieldValue(r)==t},a="="}n.headerFilters[l]={value:t,func:r,type:a,params:i||{}}}s=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==s&&(n.prevHeaderFilterChangeCheck=s,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,l=e.getField();e.modules.filter={success:r,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},Filter.prototype.generateHeaderFilterElement=function(e,t,r){function i(){}var n,l,o,a,s,d,u,f=this,c=this,h=e.modules.filter.success,p=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),p){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":c.table.modules.edit.editors[e.definition.headerFilter]?(l=c.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":l=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?l=e.modules.edit.editor:e.definition.formatter&&c.table.modules.edit.editors[e.definition.formatter]?(l=c.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):l=c.table.modules.edit.editors.input}if(l){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(c.table):u,!(o=l.call(this.table.modules.edit,a,function(){},h,i,u)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(o instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",o);p?c.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){o.setAttribute("placeholder",void 0!==e&&e?e:c.table.modules.localize.getText("headerFilters|default"))}):c.table.modules.localize.bind("headerFilters|default",function(e){o.setAttribute("placeholder",void 0!==c.column.definition.headerFilterPlaceholder&&c.column.definition.headerFilterPlaceholder?c.column.definition.headerFilterPlaceholder:e)}),o.addEventListener("click",function(e){e.stopPropagation(),o.focus()}),o.addEventListener("focus",function(e){var t=f.table.columnManager.element.scrollLeft;t!==f.table.rowManager.element.scrollLeft&&(f.table.rowManager.scrollHorizontal(t),f.table.columnManager.scrollHorizontal(t))}),s=!1,d=function(e){s&&clearTimeout(s),s=setTimeout(function(){h(o.value)},c.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=o,e.modules.filter.attrType=o.hasAttribute("type")?o.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=o.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(o.addEventListener("keyup",d),o.addEventListener("search",d),"number"==e.modules.filter.attrType&&o.addEventListener("change",function(e){h(o.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&o.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||o.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(o),e.contentElement.appendChild(n),r||c.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},Filter.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},Filter.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},Filter.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},Filter.prototype.setFilter=function(e,t,r,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),n.addFilter(e)},Filter.prototype.addFilter=function(e,t,r,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(e){var t,r=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:r.filters[e.type]?(t=r.table.columnManager.getColumnByField(e.field),i=t?function(i){return r.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return r.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},Filter.prototype.findSubFilters=function(e){var t=this,r=[];return e.forEach(function(e){(e=t.findFilter(e))&&r.push(e)}),!!r.length&&r},Filter.prototype.getFilters=function(e,t){var r=[];return e&&(r=this.getHeaderFilters()),t&&r.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),r=r.concat(this.filtersToArray(this.filterList,t))},Filter.prototype.filtersToArray=function(e,t){var r=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(r.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},Filter.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},Filter.prototype.removeFilter=function(e,t,r){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:r}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},Filter.prototype.search=function(e,t,r,i){var n=this,l=[],o=[];return Array.isArray(t)||(t=[{field:t,type:r,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&o.push(e)}),this.table.rowManager.rows.forEach(function(t){var r=!0;o.forEach(function(e){n.filterRecurse(e,t.getData())||(r=!1)}),r&&l.push("data"===e?t.getData("data"):t.getComponent())}),l},Filter.prototype.filter=function(e,t){var r=this,i=[],n=[];return r.table.options.dataFiltering&&r.table.options.dataFiltering.call(r.table,r.getFilters()),r.table.options.ajaxFiltering||!r.filterList.length&&!Object.keys(r.headerFilters).length?i=e.slice(0):e.forEach(function(e){r.filterRow(e)&&i.push(e)}),r.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),r.table.options.dataFiltered.call(r.table,r.getFilters(),n)),i},Filter.prototype.filterRow=function(e,t){var r=this,i=!0,n=e.getData();r.filterList.forEach(function(e){r.filterRecurse(e,n)||(i=!1)});for(var l in r.headerFilters)r.headerFilters[l].func(n)||(i=!1);return i},Filter.prototype.filterRecurse=function(e,t){var r=this,i=!1;return Array.isArray(e)?e.forEach(function(e){r.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},Filter.prototype.filters={"=":function(e,t,r,i){return t==e},"<":function(e,t,r,i){return t<e},"<=":function(e,t,r,i){return t<=e},">":function(e,t,r,i){return t>e},">=":function(e,t,r,i){return t>=e},"!=":function(e,t,r,i){return t!=e},regex:function(e,t,r,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,r,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),l=String(null===t||void 0===t?"":t).toLowerCase(),o=[];return n.forEach(function(e){l.includes(e)&&o.push(!0)}),i.matchAll?o.length===n.length:!!o.length},starts:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,r,i){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},Tabulator.prototype.registerModule("filter",Filter);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Filter=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(e,t){function r(t){var r,o="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="",s="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[l];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,r=function(r){var i=e.definition.headerFilterFuncParams||{},l=e.getFieldValue(r);return i="function"==typeof i?i(t,l,r):i,n.filters[e.definition.headerFilterFunc](t,l,r,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":r=function(r){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(r);return i="function"==typeof i?i(t,n,r):i,e.definition.headerFilterFunc(t,n,r,i)},a=r}if(!r)switch(o){case"partial":r=function(r){var i=e.getFieldValue(r);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:r=function(r){return e.getFieldValue(r)==t},a="="}n.headerFilters[l]={value:t,func:r,type:a,params:i||{}}}s=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==s&&(n.prevHeaderFilterChangeCheck=s,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,l=e.getField();e.modules.filter={success:r,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},Filter.prototype.generateHeaderFilterElement=function(e,t,r){function i(){}var n,l,o,a,s,d,u,f=this,c=this,h=e.modules.filter.success,p=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),p){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e&&0!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":c.table.modules.edit.editors[e.definition.headerFilter]?(l=c.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":l=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?l=e.modules.edit.editor:e.definition.formatter&&c.table.modules.edit.editors[e.definition.formatter]?(l=c.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):l=c.table.modules.edit.editors.input}if(l){if(a={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(c.table):u,!(o=l.call(this.table.modules.edit,a,function(){},h,i,u)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(o instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",o);p?c.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){o.setAttribute("placeholder",void 0!==e&&e?e:c.table.modules.localize.getText("headerFilters|default"))}):c.table.modules.localize.bind("headerFilters|default",function(e){o.setAttribute("placeholder",void 0!==c.column.definition.headerFilterPlaceholder&&c.column.definition.headerFilterPlaceholder?c.column.definition.headerFilterPlaceholder:e)}),o.addEventListener("click",function(e){e.stopPropagation(),o.focus()}),o.addEventListener("focus",function(e){var t=f.table.columnManager.element.scrollLeft;t!==f.table.rowManager.element.scrollLeft&&(f.table.rowManager.scrollHorizontal(t),f.table.columnManager.scrollHorizontal(t))}),s=!1,d=function(e){s&&clearTimeout(s),s=setTimeout(function(){h(o.value)},c.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=o,e.modules.filter.attrType=o.hasAttribute("type")?o.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=o.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(o.addEventListener("keyup",d),o.addEventListener("search",d),"number"==e.modules.filter.attrType&&o.addEventListener("change",function(e){h(o.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&o.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||o.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(o),e.contentElement.appendChild(n),r||c.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},Filter.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},Filter.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},Filter.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},Filter.prototype.setFilter=function(e,t,r,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),n.addFilter(e)},Filter.prototype.addFilter=function(e,t,r,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:r,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(e){var t,r=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:r.filters[e.type]?(t=r.table.columnManager.getColumnByField(e.field),i=t?function(i){return r.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return r.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},Filter.prototype.findSubFilters=function(e){var t=this,r=[];return e.forEach(function(e){(e=t.findFilter(e))&&r.push(e)}),!!r.length&&r},Filter.prototype.getFilters=function(e,t){var r=[];return e&&(r=this.getHeaderFilters()),t&&r.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),r=r.concat(this.filtersToArray(this.filterList,t))},Filter.prototype.filtersToArray=function(e,t){var r=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(r.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},Filter.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},Filter.prototype.removeFilter=function(e,t,r){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:r}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){void 0!==t.modules.filter.value&&delete t.modules.filter.value,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},Filter.prototype.search=function(e,t,r,i){var n=this,l=[],o=[];return Array.isArray(t)||(t=[{field:t,type:r,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&o.push(e)}),this.table.rowManager.rows.forEach(function(t){var r=!0;o.forEach(function(e){n.filterRecurse(e,t.getData())||(r=!1)}),r&&l.push("data"===e?t.getData("data"):t.getComponent())}),l},Filter.prototype.filter=function(e,t){var r=this,i=[],n=[];return r.table.options.dataFiltering&&r.table.options.dataFiltering.call(r.table,r.getFilters()),r.table.options.ajaxFiltering||!r.filterList.length&&!Object.keys(r.headerFilters).length?i=e.slice(0):e.forEach(function(e){r.filterRow(e)&&i.push(e)}),r.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),r.table.options.dataFiltered.call(r.table,r.getFilters(),n)),i},Filter.prototype.filterRow=function(e,t){var r=this,i=!0,n=e.getData();r.filterList.forEach(function(e){r.filterRecurse(e,n)||(i=!1)});for(var l in r.headerFilters)r.headerFilters[l].func(n)||(i=!1);return i},Filter.prototype.filterRecurse=function(e,t){var r=this,i=!1;return Array.isArray(e)?e.forEach(function(e){r.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},Filter.prototype.filters={"=":function(e,t,r,i){return t==e},"<":function(e,t,r,i){return t<e},"<=":function(e,t,r,i){return t<=e},">":function(e,t,r,i){return t>e},">=":function(e,t,r,i){return t>=e},"!=":function(e,t,r,i){return t!=e},regex:function(e,t,r,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,r,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),l=String(null===t||void 0===t?"":t).toLowerCase(),o=[];return n.forEach(function(e){l.includes(e)&&o.push(!0)}),i.matchAll?o.length===n.length:!!o.length},starts:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,r,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,r,i){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},Tabulator.prototype.registerModule("filter",Filter);
\ No newline at end of file
index 0de274d..37e05f6 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Format = function Format(table) {
        this.table = table; //hold Tabulator object
@@ -280,8 +280,18 @@ Format.prototype.formatters = {
 
        //image element
        image: function image(cell, formatterParams, onRendered) {
-               var el = document.createElement("img");
-               el.setAttribute("src", cell.getValue());
+               var el = document.createElement("img"),
+                   src = cell.getValue();
+
+               if (formatterParams.urlPrefix) {
+                       src = formatterParams.urlPrefix + cell.getValue();
+               }
+
+               if (formatterParams.urlSuffix) {
+                       src = src + formatterParams.urlSuffix;
+               }
+
+               el.setAttribute("src", src);
 
                switch (_typeof(formatterParams.height)) {
                        case "number":
index bfa24bd..212dab8 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Format=function(e){this.table=e};Format.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},Format.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},r=e.definition["formatter"+t];switch(void 0===r?"undefined":_typeof(r)){case"string":"tick"===r&&(r="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[r]?o.formatter=this.formatters[r]:(console.warn("Formatter Error - No such formatter found: ",r),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=r;break;default:o.formatter=this.formatters.plaintext}return o},Format.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)},Format.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}var o=e.getComponent(),r="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,r,t)},Format.prototype.formatExportValue=function(e,t){var o,r=e.column.modules.format[t];if(r){var a=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1};return o="function"==typeof r.params?r.params(component):r.params,r.formatter.call(this,e.getComponent(),o,a)}return this.formatValue(e)},Format.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},Format.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?"&nbsp;":e},Format.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},Format.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var r,a,n,l,i=parseFloat(e.getValue()),s=t.decimal||".",c=t.thousand||",",d=t.symbol||"",u=!!t.symbolAfter,m=void 0!==t.precision?t.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(r=!1!==m?i.toFixed(m):i,r=String(r).split("."),a=r[0],n=r.length>1?s+r[1]:"",l=/(\d+)(\d{3})/;l.test(a);)a=a.replace(l,"$1"+c+"$2");return u?a+n+d:d+a+n},link:function(e,t,o){var r,a=e.getValue(),n=t.urlPrefix||"",l=t.download,i=a,s=document.createElement("a");if(t.labelField&&(r=e.getData(),i=r[t.labelField]),t.label)switch(_typeof(t.label)){case"string":i=t.label;break;case"function":i=t.label(e)}if(i){if(t.urlField&&(r=e.getData(),a=r[t.urlField]),t.url)switch(_typeof(t.url)){case"string":a=t.url;break;case"function":a=t.url(e)}return s.setAttribute("href",n+a),t.target&&s.setAttribute("target",t.target),t.download&&(l="function"==typeof l?l(e):!0===l?"":l,s.setAttribute("download",l)),s.innerHTML=this.emptyToSpace(this.sanitizeHTML(i)),s}return"&nbsp;"},image:function(e,t,o){var r=document.createElement("img");switch(r.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":r.style.height=t.height+"px";break;case"string":r.style.height=t.height}switch(_typeof(t.width)){case"number":r.style.width=t.width+"px";break;case"string":r.style.width=t.width}return r.addEventListener("load",function(){e.getRow().normalizeHeight()}),r},tickCross:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t.allowEmpty,l=t.allowTruthy,i=void 0!==t.tickElement?t.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',s=void 0!==t.crossElement?t.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return l&&r||!0===r||"true"===r||"True"===r||1===r||"1"===r?(a.setAttribute("aria-checked",!0),i||""):!n||"null"!==r&&""!==r&&null!==r&&void 0!==r?(a.setAttribute("aria-checked",!1),s||""):(a.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=t.outputFormat||"DD/MM/YYYY hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue(),i=moment(l,r);return i.isValid()?t.timezone?i.tz(t.timezone).format(a):i.format(a):!0===n?l:"function"==typeof n?n(l):n},datetimediff:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",n=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:void 0,i=void 0!==t.humanize&&t.humanize,s=void 0!==t.date?t.date:moment(),c=e.getValue(),d=moment(c,r);return d.isValid()?i?moment.duration(d.diff(s)).humanize(n):d.diff(s,l)+(n?" "+n:""):!0===a?c:"function"==typeof a?a(c):a},lookup:function(e,t,o){var r=e.getValue();return void 0===t[r]?(console.warn("Missing display value for "+r),r):t[r]},star:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t&&t.stars?t.stars:5,l=document.createElement("span"),i=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.verticalAlign="middle",i.setAttribute("width","14"),i.setAttribute("height","14"),i.setAttribute("viewBox","0 0 512 512"),i.setAttribute("xml:space","preserve"),i.style.padding="0 1px",r=r&&!isNaN(r)?parseInt(r):0,r=Math.max(0,Math.min(r,n));for(var s=1;s<=n;s++){var c=i.cloneNode(!0);c.innerHTML=s<=r?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',l.appendChild(c)}return a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.setAttribute("aria-label",r),l},traffic:function(e,t,o){var r,a,n=this.sanitizeHTML(e.getValue())||0,l=document.createElement("span"),i=t&&t.max?t.max:100,s=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],d="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(l.classList.add("tabulator-traffic-light"),a=parseFloat(n)<=i?parseFloat(n):i,a=parseFloat(a)>=s?parseFloat(a):s,r=(i-s)/100,a=Math.round((a-s)/r),void 0===c?"undefined":_typeof(c)){case"string":d=c;break;case"function":d=c(n);break;case"object":if(Array.isArray(c)){var u=100/c.length,m=Math.floor(a/u);m=Math.min(m,c.length-1),m=Math.max(m,0),d=c[m];break}}return l.style.backgroundColor=d,l}},progress:function(e,t,o){var r,a,n,l,i,s=this.sanitizeHTML(e.getValue())||0,c=e.getElement(),d=t&&t.max?t.max:100,u=t&&t.min?t.min:0,m=t&&t.legendAlign?t.legendAlign:"center";switch(a=parseFloat(s)<=d?parseFloat(s):d,a=parseFloat(a)>=u?parseFloat(a):u,r=(d-u)/100,a=Math.round((a-u)/r),_typeof(t.color)){case"string":n=t.color;break;case"function":n=t.color(s);break;case"object":if(Array.isArray(t.color)){var f=100/t.color.length,p=Math.floor(a/f);p=Math.min(p,t.color.length-1),p=Math.max(p,0),n=t.color[p];break}default:n="#2DC214"}switch(_typeof(t.legend)){case"string":l=t.legend;break;case"function":l=t.legend(s);break;case"boolean":l=s;break;default:l=!1}switch(_typeof(t.legendColor)){case"string":i=t.legendColor;break;case"function":i=t.legendColor(s);break;case"object":if(Array.isArray(t.legendColor)){var f=100/t.legendColor.length,p=Math.floor(a/f);p=Math.min(p,t.legendColor.length-1),p=Math.max(p,0),i=t.legendColor[p]}break;default:i="#000"}c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a);var h=document.createElement("div");if(h.style.display="inline-block",h.style.position="relative",h.style.width=a+"%",h.style.backgroundColor=n,h.style.height="100%",h.setAttribute("data-max",d),h.setAttribute("data-min",u),l){var g=document.createElement("div");g.style.position="absolute",g.style.top="4px",g.style.left=0,g.style.textAlign=m,g.style.width="100%",g.style.color=i,g.innerHTML=l}return o(function(){if(!(e instanceof CellComponent)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",c.appendChild(t),c=t}c.appendChild(h),l&&c.appendChild(g)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(e,t,o){function r(e){var t=n.element;n.open=e,t&&(n.open?(a.classList.add("open"),t.style.display=""):(a.classList.remove("open"),t.style.display="none"))}var a=document.createElement("div"),n=e.getRow()._row.modules.responsiveLayout;return a.classList.add("tabulator-responsive-collapse-toggle"),a.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",e.getElement().classList.add("tabulator-row-handle"),a.addEventListener("click",function(e){e.stopImmediatePropagation(),r(!n.open)}),r(n.open),a},rowSelection:function(e,t,o){var r=this,a=document.createElement("input");if(a.type="checkbox",this.table.modExists("selectRow",!0))if(a.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var n=e.getRow();n instanceof RowComponent?(a.addEventListener("change",function(e){n.toggleSelect()}),a.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,a)):a=""}else a.addEventListener("change",function(e){r.table.modules.selectRow.selectedRows.length?r.table.deselectRow():r.table.selectRow(t.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(a);return a}},Tabulator.prototype.registerModule("format",Format);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Format=function(e){this.table=e};Format.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},Format.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},r=e.definition["formatter"+t];switch(void 0===r?"undefined":_typeof(r)){case"string":"tick"===r&&(r="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[r]?o.formatter=this.formatters[r]:(console.warn("Formatter Error - No such formatter found: ",r),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=r;break;default:o.formatter=this.formatters.plaintext}return o},Format.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)},Format.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}var o=e.getComponent(),r="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,r,t)},Format.prototype.formatExportValue=function(e,t){var o,r=e.column.modules.format[t];if(r){var a=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1};return o="function"==typeof r.params?r.params(component):r.params,r.formatter.call(this,e.getComponent(),o,a)}return this.formatValue(e)},Format.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},Format.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?"&nbsp;":e},Format.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},Format.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var r,a,n,l,i=parseFloat(e.getValue()),s=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,m=void 0!==t.precision?t.precision:2;if(isNaN(i))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(r=!1!==m?i.toFixed(m):i,r=String(r).split("."),a=r[0],n=r.length>1?s+r[1]:"",l=/(\d+)(\d{3})/;l.test(a);)a=a.replace(l,"$1"+c+"$2");return d?a+n+u:u+a+n},link:function(e,t,o){var r,a=e.getValue(),n=t.urlPrefix||"",l=t.download,i=a,s=document.createElement("a");if(t.labelField&&(r=e.getData(),i=r[t.labelField]),t.label)switch(_typeof(t.label)){case"string":i=t.label;break;case"function":i=t.label(e)}if(i){if(t.urlField&&(r=e.getData(),a=r[t.urlField]),t.url)switch(_typeof(t.url)){case"string":a=t.url;break;case"function":a=t.url(e)}return s.setAttribute("href",n+a),t.target&&s.setAttribute("target",t.target),t.download&&(l="function"==typeof l?l(e):!0===l?"":l,s.setAttribute("download",l)),s.innerHTML=this.emptyToSpace(this.sanitizeHTML(i)),s}return"&nbsp;"},image:function(e,t,o){var r=document.createElement("img"),a=e.getValue();switch(t.urlPrefix&&(a=t.urlPrefix+e.getValue()),t.urlSuffix&&(a+=t.urlSuffix),r.setAttribute("src",a),_typeof(t.height)){case"number":r.style.height=t.height+"px";break;case"string":r.style.height=t.height}switch(_typeof(t.width)){case"number":r.style.width=t.width+"px";break;case"string":r.style.width=t.width}return r.addEventListener("load",function(){e.getRow().normalizeHeight()}),r},tickCross:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t.allowEmpty,l=t.allowTruthy,i=void 0!==t.tickElement?t.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',s=void 0!==t.crossElement?t.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return l&&r||!0===r||"true"===r||"True"===r||1===r||"1"===r?(a.setAttribute("aria-checked",!0),i||""):!n||"null"!==r&&""!==r&&null!==r&&void 0!==r?(a.setAttribute("aria-checked",!1),s||""):(a.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=t.outputFormat||"DD/MM/YYYY hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue(),i=moment(l,r);return i.isValid()?t.timezone?i.tz(t.timezone).format(a):i.format(a):!0===n?l:"function"==typeof n?n(l):n},datetimediff:function(e,t,o){var r=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",n=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:void 0,i=void 0!==t.humanize&&t.humanize,s=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,r);return u.isValid()?i?moment.duration(u.diff(s)).humanize(n):u.diff(s,l)+(n?" "+n:""):!0===a?c:"function"==typeof a?a(c):a},lookup:function(e,t,o){var r=e.getValue();return void 0===t[r]?(console.warn("Missing display value for "+r),r):t[r]},star:function(e,t,o){var r=e.getValue(),a=e.getElement(),n=t&&t.stars?t.stars:5,l=document.createElement("span"),i=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.verticalAlign="middle",i.setAttribute("width","14"),i.setAttribute("height","14"),i.setAttribute("viewBox","0 0 512 512"),i.setAttribute("xml:space","preserve"),i.style.padding="0 1px",r=r&&!isNaN(r)?parseInt(r):0,r=Math.max(0,Math.min(r,n));for(var s=1;s<=n;s++){var c=i.cloneNode(!0);c.innerHTML=s<=r?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',l.appendChild(c)}return a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.setAttribute("aria-label",r),l},traffic:function(e,t,o){var r,a,n=this.sanitizeHTML(e.getValue())||0,l=document.createElement("span"),i=t&&t.max?t.max:100,s=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(n)&&void 0!==e.getValue()){switch(l.classList.add("tabulator-traffic-light"),a=parseFloat(n)<=i?parseFloat(n):i,a=parseFloat(a)>=s?parseFloat(a):s,r=(i-s)/100,a=Math.round((a-s)/r),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(n);break;case"object":if(Array.isArray(c)){var d=100/c.length,m=Math.floor(a/d);m=Math.min(m,c.length-1),m=Math.max(m,0),u=c[m];break}}return l.style.backgroundColor=u,l}},progress:function(e,t,o){var r,a,n,l,i,s=this.sanitizeHTML(e.getValue())||0,c=e.getElement(),u=t&&t.max?t.max:100,d=t&&t.min?t.min:0,m=t&&t.legendAlign?t.legendAlign:"center";switch(a=parseFloat(s)<=u?parseFloat(s):u,a=parseFloat(a)>=d?parseFloat(a):d,r=(u-d)/100,a=Math.round((a-d)/r),_typeof(t.color)){case"string":n=t.color;break;case"function":n=t.color(s);break;case"object":if(Array.isArray(t.color)){var f=100/t.color.length,p=Math.floor(a/f);p=Math.min(p,t.color.length-1),p=Math.max(p,0),n=t.color[p];break}default:n="#2DC214"}switch(_typeof(t.legend)){case"string":l=t.legend;break;case"function":l=t.legend(s);break;case"boolean":l=s;break;default:l=!1}switch(_typeof(t.legendColor)){case"string":i=t.legendColor;break;case"function":i=t.legendColor(s);break;case"object":if(Array.isArray(t.legendColor)){var f=100/t.legendColor.length,p=Math.floor(a/f);p=Math.min(p,t.legendColor.length-1),p=Math.max(p,0),i=t.legendColor[p]}break;default:i="#000"}c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a);var h=document.createElement("div");if(h.style.display="inline-block",h.style.position="relative",h.style.width=a+"%",h.style.backgroundColor=n,h.style.height="100%",h.setAttribute("data-max",u),h.setAttribute("data-min",d),l){var g=document.createElement("div");g.style.position="absolute",g.style.top="4px",g.style.left=0,g.style.textAlign=m,g.style.width="100%",g.style.color=i,g.innerHTML=l}return o(function(){if(!(e instanceof CellComponent)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",c.appendChild(t),c=t}c.appendChild(h),l&&c.appendChild(g)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(e,t,o){function r(e){var t=n.element;n.open=e,t&&(n.open?(a.classList.add("open"),t.style.display=""):(a.classList.remove("open"),t.style.display="none"))}var a=document.createElement("div"),n=e.getRow()._row.modules.responsiveLayout;return a.classList.add("tabulator-responsive-collapse-toggle"),a.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",e.getElement().classList.add("tabulator-row-handle"),a.addEventListener("click",function(e){e.stopImmediatePropagation(),r(!n.open)}),r(n.open),a},rowSelection:function(e,t,o){var r=this,a=document.createElement("input");if(a.type="checkbox",this.table.modExists("selectRow",!0))if(a.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var n=e.getRow();n instanceof RowComponent?(a.addEventListener("change",function(e){n.toggleSelect()}),a.checked=n.isSelected&&n.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(n,a)):a=""}else a.addEventListener("change",function(e){r.table.modules.selectRow.selectedRows.length?r.table.deselectRow():r.table.selectRow(t.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(a);return a}},Tabulator.prototype.registerModule("format",Format);
\ No newline at end of file
index fdf3e14..a0ca3b6 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var FrozenColumns = function FrozenColumns(table) {
        this.table = table; //hold Tabulator object
@@ -154,7 +154,7 @@ FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
 
                if (allCells) {
                        column.cells.forEach(function (cell) {
-                               _this2.layoutElement(cell.getElement(), column);
+                               _this2.layoutElement(cell.getElement(true), column);
                        });
                }
        });
@@ -176,7 +176,7 @@ FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
 
                if (allCells) {
                        column.cells.forEach(function (cell) {
-                               _this2.layoutElement(cell.getElement(), column);
+                               _this2.layoutElement(cell.getElement(true), column);
                        });
                }
        });
@@ -233,7 +233,7 @@ FrozenColumns.prototype.layoutRow = function (row) {
                var cell = row.getCell(column);
 
                if (cell) {
-                       _this3.layoutElement(cell.getElement(), column);
+                       _this3.layoutElement(cell.getElement(true), column);
                }
        });
 
@@ -241,7 +241,7 @@ FrozenColumns.prototype.layoutRow = function (row) {
                var cell = row.getCell(column);
 
                if (cell) {
-                       _this3.layoutElement(cell.getElement(), column);
+                       _this3.layoutElement(cell.getElement(true), column);
                }
        });
 };
index 5342076..106d72d 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var FrozenColumns=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.isGroup||(this.frozenCheck(t)?(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(t){return t.parent.isGroup&&t.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),t.parent.isGroup?this.frozenCheck(t.parent):t.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var t,e=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){e.layout()},100),t=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),t.forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(t){var e=this,o=[];this.leftColumns.forEach(function(n,l){if(n.modules.frozen.margin=e._calcSpace(e.leftColumns,l)+e.table.columnManager.scrollLeft+"px",l==e.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var i=e.getColGroupParentElement(n);o.includes(i)||(e.layoutElement(i,n),o.push(i)),n.modules.frozen.edge&&i.classList.add("tabulator-frozen-"+n.modules.frozen.position)}else e.layoutElement(n.getElement(),n);t&&n.cells.forEach(function(t){e.layoutElement(t.getElement(),n)})}),this.rightColumns.forEach(function(o,n){o.modules.frozen.margin=e.rightPadding-e._calcSpace(e.rightColumns,n+1)+"px",n==e.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?e.layoutElement(e.getColGroupParentElement(o),o):e.layoutElement(o.getElement(),o),t&&o.cells.forEach(function(t){e.layoutElement(t.getElement(),o)})})},FrozenColumns.prototype.getColGroupParentElement=function(t){return t.parent.isGroup?this.getColGroupParentElement(t.parent):t.getElement()},FrozenColumns.prototype.layout=function(){var t=this;t.active&&(this.calcMargins(),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(t){var e=this;t.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(),o)}),this.rightColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(),o)})},FrozenColumns.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin,t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(t,e){for(var o=0,n=0;n<e;n++)t[n].visible&&(o+=t[n].getWidth());return o},Tabulator.prototype.registerModule("frozenColumns",FrozenColumns);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var FrozenColumns=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.isGroup||(this.frozenCheck(t)?(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(t){return t.parent.isGroup&&t.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),t.parent.isGroup?this.frozenCheck(t.parent):t.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var t,e=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){e.layout()},100),t=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),t.forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(t){var e=this,o=[];this.leftColumns.forEach(function(n,l){if(n.modules.frozen.margin=e._calcSpace(e.leftColumns,l)+e.table.columnManager.scrollLeft+"px",l==e.leftColumns.length-1?n.modules.frozen.edge=!0:n.modules.frozen.edge=!1,n.parent.isGroup){var i=e.getColGroupParentElement(n);o.includes(i)||(e.layoutElement(i,n),o.push(i)),n.modules.frozen.edge&&i.classList.add("tabulator-frozen-"+n.modules.frozen.position)}else e.layoutElement(n.getElement(),n);t&&n.cells.forEach(function(t){e.layoutElement(t.getElement(!0),n)})}),this.rightColumns.forEach(function(o,n){o.modules.frozen.margin=e.rightPadding-e._calcSpace(e.rightColumns,n+1)+"px",n==e.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?e.layoutElement(e.getColGroupParentElement(o),o):e.layoutElement(o.getElement(),o),t&&o.cells.forEach(function(t){e.layoutElement(t.getElement(!0),o)})})},FrozenColumns.prototype.getColGroupParentElement=function(t){return t.parent.isGroup?this.getColGroupParentElement(t.parent):t.getElement()},FrozenColumns.prototype.layout=function(){var t=this;t.active&&(this.calcMargins(),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(t){var e=this;t.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(!0),o)}),this.rightColumns.forEach(function(o){var n=t.getCell(o);n&&e.layoutElement(n.getElement(!0),o)})},FrozenColumns.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin,t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(t,e){for(var o=0,n=0;n<e;n++)t[n].visible&&(o+=t[n].getWidth());return o},Tabulator.prototype.registerModule("frozenColumns",FrozenColumns);
\ No newline at end of file
index 7fd14f0..83f887d 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var FrozenRows = function FrozenRows(table) {
        this.table = table; //hold Tabulator object
index 739be2b..af1295b 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var FrozenRows=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(e){this.displayIndex=e},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(e){var o=e.slice(0);return this.rows.forEach(function(e){var t=o.indexOf(e);t>-1&&o.splice(t,1)}),o},FrozenRows.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.detachRow=function(e){var o=this.rows.indexOf(e);if(o>-1){var t=e.getElement();t.parentNode.removeChild(t),this.rows.splice(o,1)}},FrozenRows.prototype.styleRows=function(e){var o=this;this.rows.forEach(function(e,t){o.table.rowManager.styleRow(e,t)})},Tabulator.prototype.registerModule("frozenRows",FrozenRows);
\ No newline at end of file
index cf26a55..abb8ad1 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 //public group object
 var GroupComponent = function GroupComponent(group) {
index f29db95..156c4b9 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var GroupComponent=function(t){this._group=t,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function(t,o,e,r,i,s,n){this.groupManager=t,this.parent=o,this.key=r,this.level=e,this.field=i,this.hasSubGroups=e<t.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=n,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=n?n.visible:void 0!==t.startOpen[e]?t.startOpen[e]:t.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};Group.prototype.wipe=function(){this.groupList.length?this.groupList.forEach(function(t){t.wipe()}):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},Group.prototype.createElements=function(){var t=document.createElement("div");t.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(t),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},Group.prototype.createValueGroups=function(){var t=this,o=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[o]&&this.groupManager.allowedValues[o].forEach(function(e){t._createGroup(e,o)})},Group.prototype.addBindings=function(){var t,o,e,r,i=this;i.groupManager.table.options.groupClick&&i.element.addEventListener("click",function(t){i.groupManager.table.options.groupClick.call(i.groupManager.table,t,i.getComponent())}),i.groupManager.table.options.groupDblClick&&i.element.addEventListener("dblclick",function(t){i.groupManager.table.options.groupDblClick.call(i.groupManager.table,t,i.getComponent())}),i.groupManager.table.options.groupContext&&i.element.addEventListener("contextmenu",function(t){i.groupManager.table.options.groupContext.call(i.groupManager.table,t,i.getComponent())}),(i.groupManager.table.options.groupContextMenu||i.groupManager.table.options.groupClickMenu)&&i.groupManager.table.modExists("menu")&&i.groupManager.table.modules.menu.initializeGroup.call(i.groupManager.table.modules.menu,i),i.groupManager.table.options.groupTap&&(e=!1,i.element.addEventListener("touchstart",function(t){e=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){e&&i.groupManager.table.options.groupTap(t,i.getComponent()),e=!1})),i.groupManager.table.options.groupDblTap&&(t=null,i.element.addEventListener("touchend",function(o){t?(clearTimeout(t),t=null,i.groupManager.table.options.groupDblTap(o,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.groupManager.table.options.groupTapHold&&(o=null,i.element.addEventListener("touchstart",function(t){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,e=!1,i.groupManager.table.options.groupTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(o),o=null})),i.groupManager.table.options.groupToggleElement&&(r="arrow"==i.groupManager.table.options.groupToggleElement?i.arrowElement:i.element,r.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),i.toggleVisibility()}))},Group.prototype._createGroup=function(t,o){var e=o+"_"+t,r=new Group(this.groupManager,this,o,t,this.groupManager.groupIDLookups[o].field,this.groupManager.headerGenerator[o]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[e]);this.groups[e]=r,this.groupList.push(r)},Group.prototype._addRowToGroup=function(t){var o=this.level+1;if(this.hasSubGroups){var e=this.groupManager.groupIDLookups[o].func(t.getData()),r=o+"_"+e;this.groupManager.allowedValues&&this.groupManager.allowedValues[o]?this.groups[r]&&this.groups[r].addRow(t):(this.groups[r]||this._createGroup(e,o),this.groups[r].addRow(t))}},Group.prototype._addRow=function(t){this.rows.push(t),t.modules.group=this},Group.prototype.insertRow=function(t,o,e){var r=this.conformRowData({});t.updateData(r);var i=this.rows.indexOf(o);i>-1?e?this.rows.splice(i+1,0,t):this.rows.splice(i,0,t):e?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(t){this.arrowElement.style.marginLeft=t,this.groupList.forEach(function(o){o.scrollHeader(t)})},Group.prototype.getRowIndex=function(t){},Group.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},Group.prototype.removeRow=function(t){var o=this.rows.indexOf(t),e=t.getElement();o>-1&&this.rows.splice(o,1),this.groupManager.table.options.groupValues||this.rows.length?(e.parentNode&&e.parentNode.removeChild(e),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],o=this.groupList.indexOf(t),o>-1&&this.groupList.splice(o,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(t){var o=[];return o.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows(t))}):(!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top)),o=o.concat(this.rows),!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!t&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),o.push(this.calcs.top))),!t&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),o.push(this.calcs.bottom)))),o},Group.prototype.getData=function(t,o){var e=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach(function(t){e.push(t.getData(o||"data"))}),e},Group.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach(function(o){t+=o.getRowCount()}):t=this.rows.length,t},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){t.detachElement()})}):this.rows.forEach(function(t){var o=t.getElement();o.parentNode.removeChild(o)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var t=this;if(t.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var o=t.getElement();this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e})}):t.rows.forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach(function(o){t.push(o.getData())}),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},Group.prototype.getRowGroup=function(t){var o=!1;return this.groupList.length?this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}):this.rows.find(function(o){return o===t})&&(o=this),o},Group.prototype.getSubGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.getRows=function(t){var o=[];return this.rows.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach(function(o){t.push(o.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getPath=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return t.unshift(this.key),this.parent&&this.parent.getPath(t),t},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var t=0;t<this.element.childNodes.length;++t)this.element.childNodes[t].parentNode.removeChild(this.element.childNodes[t]);return this.generateGroupHeaderContents(),this.element},Group.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Group.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},Group.prototype.initialize=function(t){this.initialized&&!t||(this.normalizeHeight(),this.initialized=!0)},Group.prototype.reinitialize=function(){this.initialized=!1,this.height=0,Tabulator.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},Group.prototype.setHeight=function(t){this.height!=t&&(this.height=t,this.outerHeight=this.element.offsetHeight)},Group.prototype.getHeight=function(){return this.outerHeight},Group.prototype.getGroup=function(){return this},Group.prototype.reinitializeHeight=function(){},Group.prototype.calcHeight=function(){},Group.prototype.setCellHeight=function(){},Group.prototype.clearCellHeight=function(){},Group.prototype.getComponent=function(){return this.component||(this.component=new GroupComponent(this)),this.component};var GroupRows=function(t){this.table=t,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};GroupRows.prototype.initialize=function(){var t=this,o=t.table.options.groupBy,e=t.table.options.groupStartOpen,r=t.table.options.groupHeader;if(this.allowedValues=t.table.options.groupValues,Array.isArray(o)&&Array.isArray(r)&&o.length>r.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",function(o,e){t.headerGenerator[0]=function(t,r,i){return(void 0===t?"":t)+"<span>("+r+" "+(1===r?o:e.groups.items)+")</span>"}}),this.groupIDLookups=[],Array.isArray(o)||o)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var i=this.table.columnManager.getRealColumns();i.forEach(function(o){o.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),o.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(o)||(o=[o]),o.forEach(function(o,e){var r,i;"function"==typeof o?r=o:(i=t.table.columnManager.getColumnByField(o),r=i?function(t){return i.getFieldValue(t)}:function(t){return t[o]}),t.groupIDLookups.push({field:"function"!=typeof o&&o,func:r,values:!!t.allowedValues&&t.allowedValues[e]})}),e&&(Array.isArray(e)||(e=[e]),e.forEach(function(t){t="function"==typeof t?t:function(){return!0}}),t.startOpen=e),r&&(t.headerGenerator=Array.isArray(r)?r:[r]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},GroupRows.prototype.getGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},GroupRows.prototype.getChildGroups=function(t){var o=this,e=[];return t||(t=this),t.groupList.forEach(function(t){t.groupList.length?e=e.concat(o.getChildGroups(t)):e.push(t)}),e},GroupRows.prototype.wipe=function(){this.groupList.forEach(function(t){t.wipe()})},GroupRows.prototype.pullGroupListData=function(t){var o=this,e=[];return t.forEach(function(t){var r={};r.level=0,r.rowCount=0,r.headerContent="";var i=[];t.hasSubGroups?(i=o.pullGroupListData(t.groupList),r.level=t.level,r.rowCount=i.length-t.groupList.length,r.headerContent=t.generator(t.key,r.rowCount,t.rows,t),e.push(r),e=e.concat(i)):(r.level=t.level,r.headerContent=t.generator(t.key,t.rows.length,t.rows,t),r.rowCount=t.getRows().length,e.push(r),t.getRows().forEach(function(t){e.push(t.getData("data"))}))}),e},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(t){var o=!1;return this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}),o},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(t){var o=this,e=o.groups;o.groups={},o.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(t){o.createGroup(t,0,e)}),t.forEach(function(t){o.assignRowToExistingGroup(t,e)})):t.forEach(function(t){o.assignRowToGroup(t,e)})},GroupRows.prototype.createGroup=function(t,o,e){var r,i=o+"_"+t;e=e||[],r=new Group(this,!1,o,t,this.groupIDLookups[0].field,this.headerGenerator[0],e[i]),this.groups[i]=r,this.groupList.push(r)},GroupRows.prototype.assignRowToExistingGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r="0_"+e;this.groups[r]&&this.groups[r].addRow(t)},GroupRows.prototype.assignRowToGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r=!this.groups["0_"+e];return r&&this.createGroup(e,0,o),this.groups["0_"+e].addRow(t),!r},GroupRows.prototype.reassignRowToGroup=function(t){var o=t.getGroup(),e=o.getPath(),r=this.getExpectedPath(t);e.length==r.length&&e.every(function(t,o){return t===r[o]})||(o.removeRow(t),this.assignRowToGroup(t,self.groups),this.table.rowManager.refreshActiveData("group",!1,!0))},GroupRows.prototype.getExpectedPath=function(t){var o=[],e=t.getData();return this.groupIDLookups.forEach(function(t){o.push(t.func(e))}),o},GroupRows.prototype.updateGroupRows=function(t){var o=this,e=[];if(o.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}),t){var r=o.table.rowManager.setDisplayRows(e,this.getDisplayIndex());!0!==r&&this.setDisplayIndex(r),o.table.rowManager.refreshActiveData("group",!0,!0)}return e},GroupRows.prototype.scrollHeaders=function(t){this.table.options.virtualDomHoz&&(t-=this.table.vdomHoz.vDomPadLeft),t+="px",this.groupList.forEach(function(o){o.scrollHeader(t)})},GroupRows.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],(o=this.groupList.indexOf(t))>-1&&this.groupList.splice(o,1))},Tabulator.prototype.registerModule("groupRows",GroupRows);
\ No newline at end of file
index 4e9608f..237f4fa 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var History = function History(table) {
        this.table = table; //hold Tabulator object
index 81e7d54..edf0e8c 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var History=function(t){this.table=t,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(t,o,e){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:o,data:e}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.clearComponentHistory=function(t){var o=this.history.findIndex(function(o){return o.component===t});o>-1&&(this.history.splice(o,1),o<=this.index&&this.index--,this.clearComponentHistory(t))},History.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posFrom],!t.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,o)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posTo],t.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(t,o){this.history.forEach(function(e){if(e.component instanceof Row)e.component===t&&(e.component=o);else if(e.component instanceof Cell&&e.component.row===t){var i=e.component.column.getField();i&&(e.component=o.getCell(i))}})},Tabulator.prototype.registerModule("history",History);
\ No newline at end of file
index fd66a1c..b8c4f00 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var HtmlTableImport = function HtmlTableImport(table) {
        this.table = table; //hold Tabulator object
index f684e3a..3855942 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},HtmlTableImport=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var t=this,e=t.table.element,o=t.table.options,a=(o.columns,e.getElementsByTagName("th")),n=e.getElementsByTagName("tbody")[0],l=[];t.hasIndex=!1,t.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],t._extractOptions(e,o),a.length?t._extractHeaders(a,n):t._generateBlankHeaders(a,n);for(var r=0;r<n.length;r++){var i=n[r],s=i.getElementsByTagName("td"),p={};t.hasIndex||(p[o.index]=r);for(var m=0;m<s.length;m++){var d=s[m];void 0!==this.fieldIndex[m]&&(p[this.fieldIndex[m]]=d.innerHTML)}l.push(p)}var f=document.createElement("div"),b=e.attributes;for(var m in b)"object"==_typeof(b[m])&&f.setAttribute(b[m].name,b[m].value);e.parentNode.replaceChild(f,e),o.data=l,t.table.options.htmlImported.call(this.table),this.table.element=f},HtmlTableImport.prototype._extractOptions=function(t,e,o){var a=t.attributes,n=o?Object.assign([],o):Object.keys(e),l={};n.forEach(function(t){l[t.toLowerCase()]=t});for(var r in a){var i,s=a[r];s&&"object"==(void 0===s?"undefined":_typeof(s))&&s.name&&0===s.name.indexOf("tabulator-")&&(i=s.name.replace("tabulator-",""),void 0!==l[i]&&(e[l[i]]=this._attribValue(s.value)))}},HtmlTableImport.prototype._attribValue=function(t){return"true"===t||"false"!==t&&t},HtmlTableImport.prototype._findCol=function(t){return this.table.options.columns.find(function(e){return e.title===t})||!1},HtmlTableImport.prototype._extractHeaders=function(t,e){for(var o=0;o<t.length;o++){var a,n=t[o],l=!1,r=this._findCol(n.textContent);r?l=!0:r={title:n.textContent.trim()},r.field||(r.field=n.textContent.trim().toLowerCase().replace(" ","_")),a=n.getAttribute("width"),a&&!r.width&&(r.width=a),n.attributes,this._extractOptions(n,r,Column.prototype.defaultOptionList),this.fieldIndex[o]=r.field,r.field==this.table.options.index&&(this.hasIndex=!0),l||this.table.options.columns.push(r)}},HtmlTableImport.prototype._generateBlankHeaders=function(t,e){for(var o=0;o<t.length;o++){var a=t[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var l=a.getAttribute("width");l&&(n.width=l),this.table.options.columns.push(n)}},Tabulator.prototype.registerModule("htmlTableImport",HtmlTableImport);
\ No newline at end of file
index e98a838..549a56b 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Keybindings = function Keybindings(table) {
        this.table = table; //hold Tabulator object
index c350f38..05897f9 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Keybindings=function(t){this.table=t,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};Keybindings.prototype.initialize=function(){var t=this.table.options.keybindings,e={};if(this.watchKeys={},this.pressedKeys=[],!1!==t){for(var i in this.bindings)e[i]=this.bindings[i];if(Object.keys(t).length)for(var n in t)e[n]=t[n];this.mapBindings(e),this.bindEvents()}},Keybindings.prototype.mapBindings=function(t){var e=this,i=this;for(var n in t)!function(n){e.actions[n]?t[n]&&("object"!==_typeof(t[n])&&(t[n]=[t[n]]),t[n].forEach(function(t){i.mapBinding(n,t)})):console.warn("Key Binding Error - no such action:",n)}(n)},Keybindings.prototype.mapBinding=function(t,e){var i=this,n={action:this.actions[t],keys:[],ctrl:!1,shift:!1,meta:!1};e.toString().toLowerCase().split(" ").join("").split("+").forEach(function(t){switch(t){case"ctrl":n.ctrl=!0;break;case"shift":n.shift=!0;break;case"meta":n.meta=!0;break;default:t=parseInt(t),n.keys.push(t),i.watchKeys[t]||(i.watchKeys[t]=[]),i.watchKeys[t].push(n)}})},Keybindings.prototype.bindEvents=function(){var t=this;this.keyupBinding=function(e){var i=e.keyCode,n=t.watchKeys[i];n&&(t.pressedKeys.push(i),n.forEach(function(i){t.checkBinding(e,i)}))},this.keydownBinding=function(e){var i=e.keyCode;if(t.watchKeys[i]){var n=t.pressedKeys.indexOf(i);n>-1&&t.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(t,e){var i=this,n=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&t.metaKey==e.meta&&(e.keys.forEach(function(t){-1==i.pressedKeys.indexOf(t)&&(n=!1)}),n&&e.action.call(i,t),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,i=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i>=0?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,i=e.scrollTop+e.height,n=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i<=n?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e,i=!1,n=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(i=this.table.modules.edit.currentCell)&&(t.preventDefault(),e=i.nav(),e.next()||n&&(i.getElement().firstChild.blur(),n=!0===n?this.table.addRow({}):"function"==typeof n?this.table.addRow(n(i.row.getComponent())):this.table.addRow(Object.assign({},n)),n.then(function(){setTimeout(function(){e.next()})})))},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings);
\ No newline at end of file
index 9aabeaa..859631e 100644 (file)
@@ -1,11 +1,12 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Menu = function Menu(table) {
        this.table = table; //hold Tabulator object
-       this.menuEl = false;
+       this.menuElements = [];
        this.blurEvent = this.hideMenu.bind(this);
        this.escEvent = this.escMenu.bind(this);
        this.nestedMenuBlock = false;
+       this.positionReversedX = false;
 };
 
 Menu.prototype.initializeColumnHeader = function (column) {
@@ -29,11 +30,10 @@ Menu.prototype.initializeColumnHeader = function (column) {
                headerMenuEl.innerHTML = "&vellip;";
 
                headerMenuEl.addEventListener("click", function (e) {
-                       var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent(), e) : column.definition.headerMenu;
                        e.stopPropagation();
                        e.preventDefault();
 
-                       _this.loadMenu(e, column, menu);
+                       _this.LoadMenuEvent(column, column.definition.headerMenu, e);
                });
 
                column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);
@@ -41,7 +41,7 @@ Menu.prototype.initializeColumnHeader = function (column) {
 };
 
 Menu.prototype.LoadMenuEvent = function (component, menu, e) {
-       menu = typeof menu == "function" ? menu(component.getComponent(), e) : menu;
+       menu = typeof menu == "function" ? menu.call(this.table, component.getComponent(), e) : menu;
 
        // if(component instanceof Cell){
        //      e.stopImmediatePropagation();
@@ -82,12 +82,12 @@ Menu.prototype.tapHold = function (component, menu) {
 
 Menu.prototype.initializeCell = function (cell) {
        if (cell.column.definition.contextMenu) {
-               cell.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));
+               cell.getElement(true).addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));
                this.tapHold(cell, cell.column.definition.contextMenu);
        }
 
        if (cell.column.definition.clickMenu) {
-               cell.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));
+               cell.getElement(true).addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));
        }
 };
 
@@ -113,11 +113,13 @@ Menu.prototype.initializeGroup = function (group) {
        }
 };
 
-Menu.prototype.loadMenu = function (e, component, menu) {
+Menu.prototype.loadMenu = function (e, component, menu, parentEl) {
        var _this3 = this;
 
-       var docHeight = Math.max(document.body.offsetHeight, window.innerHeight),
-           touch = !(e instanceof MouseEvent);
+       var touch = !(e instanceof MouseEvent);
+
+       var menuEl = document.createElement("div");
+       menuEl.classList.add("tabulator-menu");
 
        if (!touch) {
                e.preventDefault();
@@ -128,26 +130,26 @@ Menu.prototype.loadMenu = function (e, component, menu) {
                return;
        }
 
-       if (this.nestedMenuBlock) {
-               //abort if child menu already open
-               if (this.isOpen()) {
-                       return;
+       if (!parentEl) {
+               if (this.nestedMenuBlock) {
+                       //abort if child menu already open
+                       if (this.isOpen()) {
+                               return;
+                       }
+               } else {
+                       this.nestedMenuBlock = setTimeout(function () {
+                               _this3.nestedMenuBlock = false;
+                       }, 100);
                }
-       } else {
-               this.nestedMenuBlock = setTimeout(function () {
-                       _this3.nestedMenuBlock = false;
-               }, 100);
-       }
-
-       this.hideMenu();
 
-       this.menuEl = document.createElement("div");
-       this.menuEl.classList.add("tabulator-menu");
+               this.hideMenu();
+               this.menuElements = [];
+       }
 
        menu.forEach(function (item) {
-               var itemEl = document.createElement("div");
-               var label = item.label;
-               var disabled = item.disabled;
+               var itemEl = document.createElement("div"),
+                   label = item.label,
+                   disabled = item.disabled;
 
                if (item.separator) {
                        itemEl.classList.add("tabulator-menu-separator");
@@ -155,7 +157,7 @@ Menu.prototype.loadMenu = function (e, component, menu) {
                        itemEl.classList.add("tabulator-menu-item");
 
                        if (typeof label == "function") {
-                               label = label(component.getComponent());
+                               label = label.call(_this3.table, component.getComponent());
                        }
 
                        if (label instanceof Node) {
@@ -165,7 +167,7 @@ Menu.prototype.loadMenu = function (e, component, menu) {
                        }
 
                        if (typeof disabled == "function") {
-                               disabled = disabled(component.getComponent());
+                               disabled = disabled.call(_this3.table, component.getComponent());
                        }
 
                        if (disabled) {
@@ -174,43 +176,112 @@ Menu.prototype.loadMenu = function (e, component, menu) {
                                        e.stopPropagation();
                                });
                        } else {
-                               itemEl.addEventListener("click", function (e) {
-                                       _this3.hideMenu();
-                                       item.action(e, component.getComponent());
-                               });
+                               if (item.menu && item.menu.length) {
+                                       itemEl.addEventListener("click", function (e) {
+                                               e.stopPropagation();
+                                               _this3.hideOldSubMenus(menuEl);
+                                               _this3.loadMenu(e, component, item.menu, itemEl);
+                                       });
+                               } else {
+                                       if (item.action) {
+                                               itemEl.addEventListener("click", function (e) {
+                                                       item.action(e, component.getComponent());
+                                               });
+                                       }
+                               }
+                       }
+
+                       if (item.menu && item.menu.length) {
+                               itemEl.classList.add("tabulator-menu-item-submenu");
                        }
                }
 
-               _this3.menuEl.appendChild(itemEl);
+               menuEl.appendChild(itemEl);
        });
 
-       this.menuEl.style.top = (touch ? e.touches[0].pageY : e.pageY) + "px";
-       this.menuEl.style.left = (touch ? e.touches[0].pageX : e.pageX) + "px";
+       menuEl.addEventListener("click", function (e) {
+               _this3.hideMenu();
+       });
+
+       this.menuElements.push(menuEl);
+       this.positionMenu(menuEl, parentEl, touch, e);
+};
+
+Menu.prototype.hideOldSubMenus = function (menuEl) {
+       var index = this.menuElements.indexOf(menuEl);
+
+       if (index > -1) {
+               for (var i = this.menuElements.length - 1; i > index; i--) {
+                       var el = this.menuElements[i];
+
+                       if (el.parentNode) {
+                               el.parentNode.removeChild(el);
+                       }
+
+                       this.menuElements.pop();
+               }
+       }
+};
+
+Menu.prototype.positionMenu = function (element, parentEl, touch, e) {
+       var _this4 = this;
+
+       var docHeight = Math.max(document.body.offsetHeight, window.innerHeight),
+           x,
+           y,
+           parentOffset;
+
+       if (!parentEl) {
+               x = touch ? e.touches[0].pageX : e.pageX;
+               y = touch ? e.touches[0].pageY : e.pageY;
+
+               this.positionReversedX = false;
+       } else {
+               parentOffset = Tabulator.prototype.helpers.elOffset(parentEl);
+               x = parentOffset.left + parentEl.offsetWidth;
+               y = parentOffset.top - 1;
+       }
+
+       element.style.top = y + "px";
+       element.style.left = x + "px";
 
        setTimeout(function () {
-               _this3.table.rowManager.element.addEventListener("scroll", _this3.blurEvent);
-               document.body.addEventListener("click", _this3.blurEvent);
-               document.body.addEventListener("contextmenu", _this3.blurEvent);
-               document.body.addEventListener("keydown", _this3.escEvent);
+               _this4.table.rowManager.element.addEventListener("scroll", _this4.blurEvent);
+               document.body.addEventListener("click", _this4.blurEvent);
+               document.body.addEventListener("contextmenu", _this4.blurEvent);
+               window.addEventListener("resize", _this4.blurEvent);
+               document.body.addEventListener("keydown", _this4.escEvent);
        }, 100);
 
-       document.body.appendChild(this.menuEl);
+       document.body.appendChild(element);
 
-       //move menu to start on right edge if it is too close to the edge of the screen
-       if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) {
-               this.menuEl.style.left = "";
-               this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px";
+       //move menu to start on bottom edge if it is too close to the edge of the screen
+       if (y + element.offsetHeight >= docHeight) {
+               element.style.top = "";
+
+               if (parentEl) {
+                       element.style.bottom = docHeight - parentOffset.top - parentEl.offsetHeight - 1 + "px";
+               } else {
+                       element.style.bottom = docHeight - y + "px";
+               }
        }
 
-       //move menu to start on bottom edge if it is too close to the edge of the screen
-       if (e.pageY + this.menuEl.offsetHeight >= docHeight) {
-               this.menuEl.style.top = "";
-               this.menuEl.style.bottom = docHeight - e.pageY + "px";
+       //move menu to start on right edge if it is too close to the edge of the screen
+       if (x + element.offsetWidth >= document.body.offsetWidth || this.positionReversedX) {
+               element.style.left = "";
+
+               if (parentEl) {
+                       element.style.right = document.documentElement.offsetWidth - parentOffset.left + "px";
+               } else {
+                       element.style.right = document.documentElement.offsetWidth - x + "px";
+               }
+
+               this.positionReversedX = true;
        }
 };
 
 Menu.prototype.isOpen = function () {
-       return !!this.menuEl.parentNode;
+       return !!this.menuElements.length;
 };
 
 Menu.prototype.escMenu = function (e) {
@@ -220,19 +291,17 @@ Menu.prototype.escMenu = function (e) {
 };
 
 Menu.prototype.hideMenu = function () {
-       if (this.menuEl.parentNode) {
-               this.menuEl.parentNode.removeChild(this.menuEl);
-       }
-
-       if (this.escEvent) {
-               document.body.removeEventListener("keydown", this.escEvent);
-       }
+       this.menuElements.forEach(function (menuEl) {
+               if (menuEl.parentNode) {
+                       menuEl.parentNode.removeChild(menuEl);
+               }
+       });
 
-       if (this.blurEvent) {
-               document.body.removeEventListener("click", this.blurEvent);
-               document.body.removeEventListener("contextmenu", this.blurEvent);
-               this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
-       }
+       document.body.removeEventListener("keydown", this.escEvent);
+       document.body.removeEventListener("click", this.blurEvent);
+       document.body.removeEventListener("contextmenu", this.blurEvent);
+       window.removeEventListener("resize", this.blurEvent);
+       this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
 };
 
 //default accessors
index c84a4f7..28b3048 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var Menu=function(e){this.table=e,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(e){var t,n=this;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="&vellip;",t.addEventListener("click",function(t){var i="function"==typeof e.definition.headerMenu?e.definition.headerMenu(e.getComponent(),t):e.definition.headerMenu;t.stopPropagation(),t.preventDefault(),n.loadMenu(t,e,i)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},Menu.prototype.LoadMenuEvent=function(e,t,n){t="function"==typeof t?t(e.getComponent(),n):t,this.loadMenu(n,e,t)},Menu.prototype.tapHold=function(e,t){var n=this,i=e.getElement(),o=null,u=!1;i.addEventListener("touchstart",function(i){clearTimeout(o),u=!1,o=setTimeout(function(){clearTimeout(o),o=null,u=!0,n.LoadMenuEvent(e,t,i)},1e3)},{passive:!0}),i.addEventListener("touchend",function(e){clearTimeout(o),o=null,u&&e.preventDefault()})},Menu.prototype.initializeCell=function(e){e.column.definition.contextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))},Menu.prototype.initializeRow=function(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))},Menu.prototype.initializeGroup=function(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))},Menu.prototype.loadMenu=function(e,t,n){var i=this,o=Math.max(document.body.offsetHeight,window.innerHeight),u=!(e instanceof MouseEvent);if(u||e.preventDefault(),n&&n.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){i.nestedMenuBlock=!1},100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),n.forEach(function(e){var n=document.createElement("div"),o=e.label,u=e.disabled;e.separator?n.classList.add("tabulator-menu-separator"):(n.classList.add("tabulator-menu-item"),"function"==typeof o&&(o=o(t.getComponent())),o instanceof Node?n.appendChild(o):n.innerHTML=o,"function"==typeof u&&(u=u(t.getComponent())),u?(n.classList.add("tabulator-menu-item-disabled"),n.addEventListener("click",function(e){e.stopPropagation()})):n.addEventListener("click",function(n){i.hideMenu(),e.action(n,t.getComponent())})),i.menuEl.appendChild(n)}),this.menuEl.style.top=(u?e.touches[0].pageY:e.pageY)+"px",this.menuEl.style.left=(u?e.touches[0].pageX:e.pageX)+"px",setTimeout(function(){i.table.rowManager.element.addEventListener("scroll",i.blurEvent),document.body.addEventListener("click",i.blurEvent),document.body.addEventListener("contextmenu",i.blurEvent),document.body.addEventListener("keydown",i.escEvent)},100),document.body.appendChild(this.menuEl),e.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-e.pageX+"px"),e.pageY+this.menuEl.offsetHeight>=o&&(this.menuEl.style.top="",this.menuEl.style.bottom=o-e.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var Menu=function(e){this.table=e,this.menuElements=[],this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1,this.positionReversedX=!1};Menu.prototype.initializeColumnHeader=function(e){var t,n=this;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="&vellip;",t.addEventListener("click",function(t){t.stopPropagation(),t.preventDefault(),n.LoadMenuEvent(e,e.definition.headerMenu,t)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},Menu.prototype.LoadMenuEvent=function(e,t,n){t="function"==typeof t?t.call(this.table,e.getComponent(),n):t,this.loadMenu(n,e,t)},Menu.prototype.tapHold=function(e,t){var n=this,i=e.getElement(),o=null,s=!1;i.addEventListener("touchstart",function(i){clearTimeout(o),s=!1,o=setTimeout(function(){clearTimeout(o),o=null,s=!0,n.LoadMenuEvent(e,t,i)},1e3)},{passive:!0}),i.addEventListener("touchend",function(e){clearTimeout(o),o=null,s&&e.preventDefault()})},Menu.prototype.initializeCell=function(e){e.column.definition.contextMenu&&(e.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))},Menu.prototype.initializeRow=function(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))},Menu.prototype.initializeGroup=function(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))},Menu.prototype.loadMenu=function(e,t,n,i){var o=this,s=!(e instanceof MouseEvent),u=document.createElement("div");if(u.classList.add("tabulator-menu"),s||e.preventDefault(),n&&n.length){if(!i){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){o.nestedMenuBlock=!1},100);this.hideMenu(),this.menuElements=[]}n.forEach(function(e){var n=document.createElement("div"),i=e.label,s=e.disabled;e.separator?n.classList.add("tabulator-menu-separator"):(n.classList.add("tabulator-menu-item"),"function"==typeof i&&(i=i.call(o.table,t.getComponent())),i instanceof Node?n.appendChild(i):n.innerHTML=i,"function"==typeof s&&(s=s.call(o.table,t.getComponent())),s?(n.classList.add("tabulator-menu-item-disabled"),n.addEventListener("click",function(e){e.stopPropagation()})):e.menu&&e.menu.length?n.addEventListener("click",function(i){i.stopPropagation(),o.hideOldSubMenus(u),o.loadMenu(i,t,e.menu,n)}):e.action&&n.addEventListener("click",function(n){e.action(n,t.getComponent())}),e.menu&&e.menu.length&&n.classList.add("tabulator-menu-item-submenu")),u.appendChild(n)}),u.addEventListener("click",function(e){o.hideMenu()}),this.menuElements.push(u),this.positionMenu(u,i,s,e)}},Menu.prototype.hideOldSubMenus=function(e){var t=this.menuElements.indexOf(e);if(t>-1)for(var n=this.menuElements.length-1;n>t;n--){var i=this.menuElements[n];i.parentNode&&i.parentNode.removeChild(i),this.menuElements.pop()}},Menu.prototype.positionMenu=function(e,t,n,i){var o,s,u,d=this,l=Math.max(document.body.offsetHeight,window.innerHeight);t?(u=Tabulator.prototype.helpers.elOffset(t),o=u.left+t.offsetWidth,s=u.top-1):(o=n?i.touches[0].pageX:i.pageX,s=n?i.touches[0].pageY:i.pageY,this.positionReversedX=!1),e.style.top=s+"px",e.style.left=o+"px",setTimeout(function(){d.table.rowManager.element.addEventListener("scroll",d.blurEvent),document.body.addEventListener("click",d.blurEvent),document.body.addEventListener("contextmenu",d.blurEvent),window.addEventListener("resize",d.blurEvent),document.body.addEventListener("keydown",d.escEvent)},100),document.body.appendChild(e),s+e.offsetHeight>=l&&(e.style.top="",e.style.bottom=t?l-u.top-t.offsetHeight-1+"px":l-s+"px"),(o+e.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(e.style.left="",e.style.right=t?document.documentElement.offsetWidth-u.left+"px":document.documentElement.offsetWidth-o+"px",this.positionReversedX=!0)},Menu.prototype.isOpen=function(){return!!this.menuElements.length},Menu.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuElements.forEach(function(e){e.parentNode&&e.parentNode.removeChild(e)}),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);
\ No newline at end of file
index 067c2df..c49f9c1 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var MoveColumns = function MoveColumns(table) {
        this.table = table; //hold Tabulator object
@@ -220,12 +220,12 @@ MoveColumns.prototype.moveColumn = function (column, after) {
 
        if (after) {
                column.getCells().forEach(function (cell, i) {
-                       var cellEl = cell.getElement();
+                       var cellEl = cell.getElement(true);
                        cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
                });
        } else {
                column.getCells().forEach(function (cell, i) {
-                       var cellEl = cell.getElement();
+                       var cellEl = cell.getElement(true);
                        cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
                });
        }
index 94b301b..6c8fc94 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var MoveColumns=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},MoveColumns.prototype.initializeColumn=function(e){var t,o=this,n={};e.modules.frozen||(t=e.getElement(),n.mousemove=function(n){e.parent===o.moving.parent&&((o.touchMove?n.touches[0].pageX:n.pageX)-Tabulator.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=n},MoveColumns.prototype.bindTouchEvents=function(e){var t,o,n,l,i,s,m,r=this,u=e.getElement(),h=!1;u.addEventListener("touchstart",function(u){r.checkTimeout=setTimeout(function(){r.touchMove=!0,t=e,o=e.nextColumn(),l=o?o.getWidth()/2:0,n=e.prevColumn(),i=n?n.getWidth()/2:0,s=0,m=0,h=!1,r.startMove(u,e)},r.checkPeriod)},{passive:!0}),u.addEventListener("touchmove",function(u){var a,c;r.moving&&(r.moveHover(u),h||(h=u.touches[0].pageX),a=u.touches[0].pageX-h,a>0?o&&a-s>l&&(c=o)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement().nextSibling),r.moveColumn(c,!0)):n&&-a-m>i&&(c=n)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement()),r.moveColumn(c,!1)),c&&(t=c,o=c.nextColumn(),s=l,l=o?o.getWidth()/2:0,n=c.prevColumn(),m=i,i=n?n.getWidth()/2:0))},{passive:!0}),u.addEventListener("touchend",function(e){r.checkTimeout&&clearTimeout(r.checkTimeout),r.moving&&r.endMove(e)})},MoveColumns.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var n=e.getElement();n.parentNode.insertBefore(o[t].getElement(),n.nextSibling)}):e.getCells().forEach(function(e,t){var n=e.getElement();n.parentNode.insertBefore(o[t].getElement(),n)})},MoveColumns.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(e){var t,o=this,n=o.table.columnManager.getElement(),l=n.scrollLeft,i=(o.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(n).left+l;o.hoverElement.style.left=i-o.startX+"px",i-l<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.max(0,l-5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1))),l+n.clientWidth-i<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.min(n.clientWidth,l+5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1)))},Tabulator.prototype.registerModule("moveColumn",MoveColumns);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var MoveColumns=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},MoveColumns.prototype.initializeColumn=function(e){var t,o=this,n={};e.modules.frozen||(t=e.getElement(),n.mousemove=function(n){e.parent===o.moving.parent&&((o.touchMove?n.touches[0].pageX:n.pageX)-Tabulator.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=n},MoveColumns.prototype.bindTouchEvents=function(e){var t,o,n,l,i,s,m,r=this,u=e.getElement(),h=!1;u.addEventListener("touchstart",function(u){r.checkTimeout=setTimeout(function(){r.touchMove=!0,t=e,o=e.nextColumn(),l=o?o.getWidth()/2:0,n=e.prevColumn(),i=n?n.getWidth()/2:0,s=0,m=0,h=!1,r.startMove(u,e)},r.checkPeriod)},{passive:!0}),u.addEventListener("touchmove",function(u){var a,c;r.moving&&(r.moveHover(u),h||(h=u.touches[0].pageX),a=u.touches[0].pageX-h,a>0?o&&a-s>l&&(c=o)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement().nextSibling),r.moveColumn(c,!0)):n&&-a-m>i&&(c=n)!==e&&(h=u.touches[0].pageX,c.getElement().parentNode.insertBefore(r.placeholderElement,c.getElement()),r.moveColumn(c,!1)),c&&(t=c,o=c.nextColumn(),s=l,l=o?o.getWidth()/2:0,n=c.prevColumn(),m=i,i=n?n.getWidth()/2:0))},{passive:!0}),u.addEventListener("touchend",function(e){r.checkTimeout&&clearTimeout(r.checkTimeout),r.moving&&r.endMove(e)})},MoveColumns.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var n=e.getElement(!0);n.parentNode.insertBefore(o[t].getElement(),n.nextSibling)}):e.getCells().forEach(function(e,t){var n=e.getElement(!0);n.parentNode.insertBefore(o[t].getElement(),n)})},MoveColumns.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(e){var t,o=this,n=o.table.columnManager.getElement(),l=n.scrollLeft,i=(o.touchMove?e.touches[0].pageX:e.pageX)-Tabulator.prototype.helpers.elOffset(n).left+l;o.hoverElement.style.left=i-o.startX+"px",i-l<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.max(0,l-5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1))),l+n.clientWidth-i<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.min(n.clientWidth,l+5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1)))},Tabulator.prototype.registerModule("moveColumn",MoveColumns);
\ No newline at end of file
index 8b91dae..7258a04 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var MoveRows = function MoveRows(table) {
 
@@ -139,7 +139,7 @@ MoveRows.prototype.initializeRow = function (row) {
 
 MoveRows.prototype.initializeCell = function (cell) {
        var self = this,
-           cellEl = cell.getElement();
+           cellEl = cell.getElement(true);
 
        cellEl.addEventListener("mousedown", function (e) {
                if (e.which === 1) {
@@ -157,7 +157,7 @@ MoveRows.prototype.initializeCell = function (cell) {
                }
        });
 
-       this.bindTouchEvents(cell.row, cell.getElement());
+       this.bindTouchEvents(cell.row, cellEl);
 };
 
 MoveRows.prototype.bindTouchEvents = function (row, element) {
@@ -548,8 +548,6 @@ MoveRows.prototype.tableRowDrop = function (e, row) {
        var receiver = false,
            success = false;
 
-       console.trace("drop");
-
        e.stopImmediatePropagation();
 
        switch (_typeof(this.table.options.movableRowsReceiver)) {
index b0f3735..c3f7617 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},MoveRows=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},MoveRows.prototype.initialize=function(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},MoveRows.prototype.setHandle=function(e){this.hasHandle=e},MoveRows.prototype.initializeGroupHeader=function(e){var t=this,o={};o.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),o.mousemove=function(o){if(o.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var n=e.getElement();n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},MoveRows.prototype.initializeRow=function(e){var t,o=this,n={};n.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),n.mousemove=function(t){var n=e.getElement();t.pageY-Tabulator.prototype.helpers.elOffset(n).top+o.table.rowManager.element.scrollTop>e.getHeight()/2?o.toRow===e&&o.toRowAfter||(n.parentNode.insertBefore(o.placeholderElement,n.nextSibling),o.moveRow(e,!0)):(o.toRow!==e||o.toRowAfter)&&(n.parentNode.insertBefore(o.placeholderElement,n),o.moveRow(e,!1))}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=n},MoveRows.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,e.getElement())},MoveRows.prototype.bindTouchEvents=function(e,t){var o,n,s,i,l,c,r,a=this,h=!1;t.addEventListener("touchstart",function(t){a.checkTimeout=setTimeout(function(){a.touchMove=!0,o=e,n=e.nextRow(),i=n?n.getHeight()/2:0,s=e.prevRow(),l=s?s.getHeight()/2:0,c=0,r=0,h=!1,a.startMove(t,e)},a.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var m,v;a.moving&&(t.preventDefault(),a.moveHover(t),h||(h=t.touches[0].pageY),m=t.touches[0].pageY-h,m>0?n&&m-c>i&&(v=n)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement().nextSibling),a.moveRow(v,!0)):s&&-m-r>l&&(v=s)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement()),a.moveRow(v,!1)),v&&(o=v,n=v.nextRow(),c=i,i=n?n.getHeight()/2:0,s=v.prevRow(),r=l,l=s?s.getHeight()/2:0))}),t.addEventListener("touchend",function(e){a.checkTimeout&&clearTimeout(a.checkTimeout),a.moving&&(a.endMove(e),a.touchMove=!1)})},MoveRows.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,t){var o,n,s=this.touchMove?e.touches[0].pageX:e.pageX,i=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(n=o.getBoundingClientRect(),this.startX=n.left-s+window.pageXOffset,this.startY=n.top-i+window.pageYOffset):this.startY=i-o.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,n=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=n-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},MoveRows.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},MoveRows.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},MoveRows.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},MoveRows.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(e,t,o){var n=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":n=this.senders[this.table.options.movableRowsSender];break;case"function":n=this.table.options.movableRowsSender}n?n.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,t){var o=!1,n=!1;switch(console.trace("drop"),e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?n=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),n?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:n})},MoveRows.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},MoveRows.prototype.senders={delete:function(e,t,o){e.delete()}},MoveRows.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},MoveRows=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},MoveRows.prototype.initialize=function(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},MoveRows.prototype.setHandle=function(e){this.hasHandle=e},MoveRows.prototype.initializeGroupHeader=function(e){var t=this,o={};o.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),o.mousemove=function(o){if(o.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(t.placeholderElement,n.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var n=e.getElement();n.previousSibling&&(n.parentNode.insertBefore(t.placeholderElement,n),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},MoveRows.prototype.initializeRow=function(e){var t,o=this,n={};n.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),n.mousemove=function(t){var n=e.getElement();t.pageY-Tabulator.prototype.helpers.elOffset(n).top+o.table.rowManager.element.scrollTop>e.getHeight()/2?o.toRow===e&&o.toRowAfter||(n.parentNode.insertBefore(o.placeholderElement,n.nextSibling),o.moveRow(e,!0)):(o.toRow!==e||o.toRowAfter)&&(n.parentNode.insertBefore(o.placeholderElement,n),o.moveRow(e,!1))}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=n},MoveRows.prototype.initializeCell=function(e){var t=this,o=e.getElement(!0);o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,o)},MoveRows.prototype.bindTouchEvents=function(e,t){var o,n,s,i,l,c,r,a=this,h=!1;t.addEventListener("touchstart",function(t){a.checkTimeout=setTimeout(function(){a.touchMove=!0,o=e,n=e.nextRow(),i=n?n.getHeight()/2:0,s=e.prevRow(),l=s?s.getHeight()/2:0,c=0,r=0,h=!1,a.startMove(t,e)},a.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var m,v;a.moving&&(t.preventDefault(),a.moveHover(t),h||(h=t.touches[0].pageY),m=t.touches[0].pageY-h,m>0?n&&m-c>i&&(v=n)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement().nextSibling),a.moveRow(v,!0)):s&&-m-r>l&&(v=s)!==e&&(h=t.touches[0].pageY,v.getElement().parentNode.insertBefore(a.placeholderElement,v.getElement()),a.moveRow(v,!1)),v&&(o=v,n=v.nextRow(),c=i,i=n?n.getHeight()/2:0,s=v.prevRow(),r=l,l=s?s.getHeight()/2:0))}),t.addEventListener("touchend",function(e){a.checkTimeout&&clearTimeout(a.checkTimeout),a.moving&&(a.endMove(e),a.touchMove=!1)})},MoveRows.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,t){var o,n,s=this.touchMove?e.touches[0].pageX:e.pageX,i=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(n=o.getBoundingClientRect(),this.startX=n.left-s+window.pageXOffset,this.startY=n.top-i+window.pageYOffset):this.startY=i-o.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,n=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=n-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},MoveRows.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},MoveRows.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},MoveRows.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},MoveRows.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(e,t,o){var n=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":n=this.senders[this.table.options.movableRowsSender];break;case"function":n=this.table.options.movableRowsSender}n?n.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,t){var o=!1,n=!1;switch(e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?n=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),n?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:n})},MoveRows.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},MoveRows.prototype.senders={delete:function(e,t,o){e.delete()}},MoveRows.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);
\ No newline at end of file
index 7752d43..42527f6 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Mutator = function Mutator(table) {
        this.table = table; //hold Tabulator object
index dfad26b..82af98d 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mutator=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(t){var o=this,e=!1,a={};this.allowedTypes.forEach(function(r){var u,n="mutator"+(r.charAt(0).toUpperCase()+r.slice(1));t.definition[n]&&(u=o.lookupMutator(t.definition[n]))&&(e=!0,a[n]={mutator:u,params:t.definition[n+"Params"]||{}})}),e&&(t.modules.mutate=a)},Mutator.prototype.lookupMutator=function(t){var o=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?o=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":o=t}return o},Mutator.prototype.transformRow=function(t,o,e){var a,r=this,u="mutator"+(o.charAt(0).toUpperCase()+o.slice(1));return this.enabled&&r.table.columnManager.traverse(function(r){var n,i,s;r.modules.mutate&&(n=r.modules.mutate[u]||r.modules.mutate.mutator||!1)&&(a=r.getFieldValue(void 0!==e?e:t),"data"!=o&&void 0===a||(s=r.getComponent(),i="function"==typeof n.params?n.params(a,t,o,s):n.params,r.setFieldValue(t,n.mutator(a,t,o,i,s))))}),t},Mutator.prototype.transformCell=function(t,o){var e=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1,a={};return e?(a=Object.assign(a,t.row.getData()),t.column.setFieldValue(a,o),e.mutator(o,a,"edit",e.params,t.getComponent())):o},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator);
\ No newline at end of file
index 4b09459..26bfda5 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Page = function Page(table) {
 
@@ -322,7 +322,7 @@ Page.prototype.setPage = function (page) {
 
                page = parseInt(page);
 
-               if (page > 0 && page <= _this2.max) {
+               if (page > 0 && page <= _this2.max || _this2.mode !== "local") {
                        _this2.page = page;
                        _this2.trigger().then(function () {
                                resolve();
index 1954f85..289bddb 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var Page=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var a=1;a<5;a++)t.push(this.size*a);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var a=document.createElement("option");a.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){a.innerHTML=e}):a.innerHTML=t,e.pageSizeSelect.appendChild(a)}),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(e){var t,a,i,s=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),s.table.modules.localize.bind("pagination|first",function(e){s.firstBut.innerHTML=e}),s.table.modules.localize.bind("pagination|first_title",function(e){s.firstBut.setAttribute("aria-label",e),s.firstBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|prev",function(e){s.prevBut.innerHTML=e}),s.table.modules.localize.bind("pagination|prev_title",function(e){s.prevBut.setAttribute("aria-label",e),s.prevBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|next",function(e){s.nextBut.innerHTML=e}),s.table.modules.localize.bind("pagination|next_title",function(e){s.nextBut.setAttribute("aria-label",e),s.nextBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|last",function(e){s.lastBut.innerHTML=e}),s.table.modules.localize.bind("pagination|last_title",function(e){s.lastBut.setAttribute("aria-label",e),s.lastBut.setAttribute("title",e)}),s.firstBut.addEventListener("click",function(){s.setPage(1).then(function(){}).catch(function(){})}),s.prevBut.addEventListener("click",function(){s.previousPage().then(function(){}).catch(function(){})}),s.nextBut.addEventListener("click",function(){s.nextPage().then(function(){}).catch(function(){})}),s.lastBut.addEventListener("click",function(){s.setPage(s.max).then(function(){}).catch(function(){})}),s.table.options.paginationElement&&(s.element=s.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),s.table.modules.localize.bind("pagination|page_size",function(e){s.pageSizeSelect.setAttribute("aria-label",e),s.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),s.element.appendChild(t),s.element.appendChild(s.pageSizeSelect),s.pageSizeSelect.addEventListener("change",function(e){s.setPageSize("true"==s.pageSizeSelect.value||s.pageSizeSelect.value),s.setPage(1).then(function(){}).catch(function(){})})),s.element.appendChild(s.firstBut),s.element.appendChild(s.prevBut),s.element.appendChild(s.pagesElement),s.element.appendChild(s.nextBut),s.element.appendChild(s.lastBut),s.table.options.paginationElement||e||s.table.footerManager.append(s.element,s),s.mode=s.table.options.pagination,s.table.options.paginationSize?s.size=s.table.options.paginationSize:(a=document.createElement("div"),a.classList.add("tabulator-row"),a.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",a.appendChild(i),s.table.rowManager.getTableElement().appendChild(a),s.size=Math.floor(s.table.rowManager.getElement().clientHeight/a.offsetHeight),s.table.rowManager.getTableElement().removeChild(a)),s.count=s.table.options.paginationButtonCount,s.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(e){this.displayIndex=e},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(e){var t=this,a=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,s){e=parseInt(e),e>0&&e<=t.max?(t.page=e,t.trigger().then(function(){i()}).catch(function(){s()}),a.table.options.persistence&&a.table.modExists("persistence",!0)&&a.table.modules.persistence.config.page&&a.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),s())})},Page.prototype.setPageToRow=function(e){var t=this;return new Promise(function(a,i){var s=t.table.rowManager.getDisplayRows(t.displayIndex-1),n=s.indexOf(e);if(n>-1){var o=!0===t.size?1:Math.ceil((n+1)/t.size);t.setPage(o).then(function(){a()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},Page.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),a=Math.ceil((this.count-1)/2),i=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),s=this.page<=a?Math.min(this.count,this.max):Math.min(this.page+a,this.max);e.pagesElement.firstChild;)e.pagesElement.removeChild(e.pagesElement.firstChild);1==e.page?(e.firstBut.disabled=!0,e.prevBut.disabled=!0):(e.firstBut.disabled=!1,e.prevBut.disabled=!1),e.page==e.max?(e.lastBut.disabled=!0,e.nextBut.disabled=!0):(e.lastBut.disabled=!1,e.nextBut.disabled=!1);for(var n=i;n<=s;n++)n>0&&n<=e.max&&e.pagesElement.appendChild(e._generatePageButton(n));this.footerRedraw()},Page.prototype._generatePageButton=function(e){var t=this,a=document.createElement("button");return a.classList.add("tabulator-page"),e==t.page&&a.classList.add("active"),a.setAttribute("type","button"),a.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){a.setAttribute("aria-label",t+" "+e),a.setAttribute("title",t+" "+e)}),a.setAttribute("data-page",e),a.textContent=e,a.addEventListener("click",function(a){t.setPage(e).then(function(){}).catch(function(){})}),a},Page.prototype.previousPage=function(){var e=this;return new Promise(function(t,a){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),a())})},Page.prototype.nextPage=function(){var e=this;return new Promise(function(t,a){e.page<e.max?(e.page++,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(e.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+e.max+":",e.max+1),a())})},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(e){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(e){var t,a,i;if("local"==this.mode){t=[],!0===this.size?(a=0,i=e.length):(a=this.size*(this.page-1),i=a+parseInt(this.size)),this._setPageButtons();for(var s=a;s<i;s++)e[s]&&t.push(e[s]);return t}return this._setPageButtons(),e.slice(0)},Page.prototype.trigger=function(){var e,t=this;return new Promise(function(a,i){switch(t.mode){case"local":e=t.table.rowManager.scrollLeft,t.table.rowManager.refreshActiveData("page"),t.table.rowManager.scrollHorizontal(e),t.table.options.pageLoaded.call(t.table,t.getPage()),a();break;case"remote":case"progressive_load":case"progressive_scroll":t.table.modules.ajax.blockActiveRequest(),t._getRemotePage().then(function(){a()}).catch(function(){i()});break;default:console.warn("Pagination Error - no such pagination mode:",t.mode),i()}})},Page.prototype._getRemotePage=function(){var e,t,a=this,i=this;return new Promise(function(s,n){if(i.table.modExists("ajax",!0)||n(),e=Tabulator.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),t=i.table.modules.ajax.getParams(),t[a.dataSentNames.page]=i.page,a.size&&(t[a.dataSentNames.size]=a.size),a.table.options.ajaxSorting&&a.table.modExists("sort")){var o=i.table.modules.sort.getSort();o.forEach(function(e){delete e.column}),t[a.dataSentNames.sorters]=o}if(a.table.options.ajaxFiltering&&a.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);t[a.dataSentNames.filters]=r}i.table.modules.ajax.setParams(t),i.table.modules.ajax.sendRequest(a.progressiveLoad).then(function(e){i._parseRemoteData(e),s()}).catch(function(e){n()}),i.table.modules.ajax.setParams(e)})},Page.prototype._parseRemoteData=function(e){var t,e,a,i=this;if(void 0===e[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e[this.dataReceivedNames.data]){if(this.max=parseInt(e[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(e[this.dataReceivedNames.data]),this.page<this.max&&setTimeout(function(){i.nextPage().then(function(){}).catch(function(){})},i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e[this.dataReceivedNames.data]),this.table.rowManager.setData(e,!0,this.initialLoad&&1==this.page),a=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+a&&i.nextPage().then(function(){}).catch(function(){})}else t=this.table.rowManager.scrollLeft,this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},Page.prototype.footerRedraw=function(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))},Page.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},Page.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},Tabulator.prototype.registerModule("page",Page);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var Page=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var a=1;a<5;a++)t.push(this.size*a);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var a=document.createElement("option");a.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){a.innerHTML=e}):a.innerHTML=t,e.pageSizeSelect.appendChild(a)}),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(e){var t,a,i,s=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),s.table.modules.localize.bind("pagination|first",function(e){s.firstBut.innerHTML=e}),s.table.modules.localize.bind("pagination|first_title",function(e){s.firstBut.setAttribute("aria-label",e),s.firstBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|prev",function(e){s.prevBut.innerHTML=e}),s.table.modules.localize.bind("pagination|prev_title",function(e){s.prevBut.setAttribute("aria-label",e),s.prevBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|next",function(e){s.nextBut.innerHTML=e}),s.table.modules.localize.bind("pagination|next_title",function(e){s.nextBut.setAttribute("aria-label",e),s.nextBut.setAttribute("title",e)}),s.table.modules.localize.bind("pagination|last",function(e){s.lastBut.innerHTML=e}),s.table.modules.localize.bind("pagination|last_title",function(e){s.lastBut.setAttribute("aria-label",e),s.lastBut.setAttribute("title",e)}),s.firstBut.addEventListener("click",function(){s.setPage(1).then(function(){}).catch(function(){})}),s.prevBut.addEventListener("click",function(){s.previousPage().then(function(){}).catch(function(){})}),s.nextBut.addEventListener("click",function(){s.nextPage().then(function(){}).catch(function(){})}),s.lastBut.addEventListener("click",function(){s.setPage(s.max).then(function(){}).catch(function(){})}),s.table.options.paginationElement&&(s.element=s.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),s.table.modules.localize.bind("pagination|page_size",function(e){s.pageSizeSelect.setAttribute("aria-label",e),s.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),s.element.appendChild(t),s.element.appendChild(s.pageSizeSelect),s.pageSizeSelect.addEventListener("change",function(e){s.setPageSize("true"==s.pageSizeSelect.value||s.pageSizeSelect.value),s.setPage(1).then(function(){}).catch(function(){})})),s.element.appendChild(s.firstBut),s.element.appendChild(s.prevBut),s.element.appendChild(s.pagesElement),s.element.appendChild(s.nextBut),s.element.appendChild(s.lastBut),s.table.options.paginationElement||e||s.table.footerManager.append(s.element,s),s.mode=s.table.options.pagination,s.table.options.paginationSize?s.size=s.table.options.paginationSize:(a=document.createElement("div"),a.classList.add("tabulator-row"),a.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",a.appendChild(i),s.table.rowManager.getTableElement().appendChild(a),s.size=Math.floor(s.table.rowManager.getElement().clientHeight/a.offsetHeight),s.table.rowManager.getTableElement().removeChild(a)),s.count=s.table.options.paginationButtonCount,s.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(e){this.displayIndex=e},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(e){var t=this,a=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,s){e=parseInt(e),e>0&&e<=t.max||"local"!==t.mode?(t.page=e,t.trigger().then(function(){i()}).catch(function(){s()}),a.table.options.persistence&&a.table.modExists("persistence",!0)&&a.table.modules.persistence.config.page&&a.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),s())})},Page.prototype.setPageToRow=function(e){var t=this;return new Promise(function(a,i){var s=t.table.rowManager.getDisplayRows(t.displayIndex-1),n=s.indexOf(e);if(n>-1){var o=!0===t.size?1:Math.ceil((n+1)/t.size);t.setPage(o).then(function(){a()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},Page.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),a=Math.ceil((this.count-1)/2),i=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),s=this.page<=a?Math.min(this.count,this.max):Math.min(this.page+a,this.max);e.pagesElement.firstChild;)e.pagesElement.removeChild(e.pagesElement.firstChild);1==e.page?(e.firstBut.disabled=!0,e.prevBut.disabled=!0):(e.firstBut.disabled=!1,e.prevBut.disabled=!1),e.page==e.max?(e.lastBut.disabled=!0,e.nextBut.disabled=!0):(e.lastBut.disabled=!1,e.nextBut.disabled=!1);for(var n=i;n<=s;n++)n>0&&n<=e.max&&e.pagesElement.appendChild(e._generatePageButton(n));this.footerRedraw()},Page.prototype._generatePageButton=function(e){var t=this,a=document.createElement("button");return a.classList.add("tabulator-page"),e==t.page&&a.classList.add("active"),a.setAttribute("type","button"),a.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){a.setAttribute("aria-label",t+" "+e),a.setAttribute("title",t+" "+e)}),a.setAttribute("data-page",e),a.textContent=e,a.addEventListener("click",function(a){t.setPage(e).then(function(){}).catch(function(){})}),a},Page.prototype.previousPage=function(){var e=this;return new Promise(function(t,a){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),a())})},Page.prototype.nextPage=function(){var e=this;return new Promise(function(t,a){e.page<e.max?(e.page++,e.trigger().then(function(){t()}).catch(function(){a()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(e.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+e.max+":",e.max+1),a())})},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(e){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(e){var t,a,i;if("local"==this.mode){t=[],!0===this.size?(a=0,i=e.length):(a=this.size*(this.page-1),i=a+parseInt(this.size)),this._setPageButtons();for(var s=a;s<i;s++)e[s]&&t.push(e[s]);return t}return this._setPageButtons(),e.slice(0)},Page.prototype.trigger=function(){var e,t=this;return new Promise(function(a,i){switch(t.mode){case"local":e=t.table.rowManager.scrollLeft,t.table.rowManager.refreshActiveData("page"),t.table.rowManager.scrollHorizontal(e),t.table.options.pageLoaded.call(t.table,t.getPage()),a();break;case"remote":case"progressive_load":case"progressive_scroll":t.table.modules.ajax.blockActiveRequest(),t._getRemotePage().then(function(){a()}).catch(function(){i()});break;default:console.warn("Pagination Error - no such pagination mode:",t.mode),i()}})},Page.prototype._getRemotePage=function(){var e,t,a=this,i=this;return new Promise(function(s,n){if(i.table.modExists("ajax",!0)||n(),e=Tabulator.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),t=i.table.modules.ajax.getParams(),t[a.dataSentNames.page]=i.page,a.size&&(t[a.dataSentNames.size]=a.size),a.table.options.ajaxSorting&&a.table.modExists("sort")){var o=i.table.modules.sort.getSort();o.forEach(function(e){delete e.column}),t[a.dataSentNames.sorters]=o}if(a.table.options.ajaxFiltering&&a.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);t[a.dataSentNames.filters]=r}i.table.modules.ajax.setParams(t),i.table.modules.ajax.sendRequest(a.progressiveLoad).then(function(e){i._parseRemoteData(e),s()}).catch(function(e){n()}),i.table.modules.ajax.setParams(e)})},Page.prototype._parseRemoteData=function(e){var t,e,a,i=this;if(void 0===e[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e[this.dataReceivedNames.data]){if(this.max=parseInt(e[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(e[this.dataReceivedNames.data]),this.page<this.max&&setTimeout(function(){i.nextPage().then(function(){}).catch(function(){})},i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e[this.dataReceivedNames.data]),this.table.rowManager.setData(e,!0,this.initialLoad&&1==this.page),a=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+a&&i.nextPage().then(function(){}).catch(function(){})}else t=this.table.rowManager.scrollLeft,this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},Page.prototype.footerRedraw=function(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))},Page.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},Page.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},Tabulator.prototype.registerModule("page",Page);
\ No newline at end of file
index e127eec..a6d6a90 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Persistence = function Persistence(table) {
        this.table = table; //hold Tabulator object
@@ -112,6 +112,10 @@ Persistence.prototype.initialize = function () {
                        }
                }
        }
+
+       if (this.config.columns) {
+               this.table.options.columns = this.load("columns", this.table.options.columns);
+       }
 };
 
 Persistence.prototype.initializeColumn = function (column) {
@@ -195,7 +199,7 @@ Persistence.prototype.mergeDefinition = function (oldCols, newCols) {
                        }
 
                        keys.forEach(function (key) {
-                               if (typeof column[key] !== "undefined") {
+                               if (key !== "columns" && typeof column[key] !== "undefined") {
                                        from[key] = column[key];
                                }
                        });
index 48873fd..ecc6ecc 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var Persistence=function(e){this.table=e,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};Persistence.prototype.localStorageTest=function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}},Persistence.prototype.initialize=function(){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader))},Persistence.prototype.initializeColumn=function(e){var t,i,o=this;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=!0===this.config.columns?Object.keys(t):this.config.columns,i.forEach(function(e){var i=Object.getOwnPropertyDescriptor(t,e),s=t[e];i&&Object.defineProperty(t,e,{set:function(e){s=e,o.defWatcherBlock||o.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),s}})}),this.defWatcherBlock=!1)},Persistence.prototype.load=function(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i},Persistence.prototype.retreiveData=function(e){return!!this.readFunc&&this.readFunc(this.id,e)},Persistence.prototype.mergeDefinition=function(e,t){var i=this,o=[];return t=t||[],t.forEach(function(t,s){var n,r=i._findColumn(e,t);r&&(!0===i.config.columns||void 0==i.config.columns?(n=Object.keys(r),n.push("width")):n=i.config.columns,n.forEach(function(e){void 0!==t[e]&&(r[e]=t[e])}),r.columns&&(r.columns=i.mergeDefinition(r.columns,t.columns)),o.push(r))}),e.forEach(function(e,s){i._findColumn(t,e)||(o.length>s?o.splice(s,0,e):o.push(e))}),o},Persistence.prototype._findColumn=function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},Persistence.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},Persistence.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},Persistence.prototype.getGroupConfig=function(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e},Persistence.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},Persistence.prototype.parseColumns=function(e){var t=this,i=[],o=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(function(e){var s,n={},r=e.getDefinition();e.isGroup?(n.title=r.title,n.columns=t.parseColumns(e.getColumns())):(n.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(s=Object.keys(r),s.push("width")):s=t.config.columns,s.forEach(function(t){switch(t){case"width":n.width=e.getWidth();break;case"visible":n.visible=e.visible;break;default:"function"!=typeof r[t]&&-1===o.indexOf(t)&&(n[t]=r[t])}})),i.push(n)}),i},Persistence.prototype.readers={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,o,s=document.cookie,n=e+"-"+t,r=s.indexOf(n+"=");return r>-1&&(s=s.substr(r),i=s.indexOf(";"),i>-1&&(s=s.substr(0,i)),o=s.replace(n+"=","")),!!o&&JSON.parse(o)}},Persistence.prototype.writers={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var o=new Date;o.setDate(o.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+o.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var Persistence=function(e){this.table=e,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};Persistence.prototype.localStorageTest=function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}},Persistence.prototype.initialize=function(){var e,t=this.table.options.persistenceMode,i=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(i||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns))},Persistence.prototype.initializeColumn=function(e){var t,i,o=this;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),i=!0===this.config.columns?Object.keys(t):this.config.columns,i.forEach(function(e){var i=Object.getOwnPropertyDescriptor(t,e),s=t[e];i&&Object.defineProperty(t,e,{set:function(e){s=e,o.defWatcherBlock||o.save("columns"),i.set&&i.set(e)},get:function(){return i.get&&i.get(),s}})}),this.defWatcherBlock=!1)},Persistence.prototype.load=function(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i},Persistence.prototype.retreiveData=function(e){return!!this.readFunc&&this.readFunc(this.id,e)},Persistence.prototype.mergeDefinition=function(e,t){var i=this,o=[];return t=t||[],t.forEach(function(t,s){var n,r=i._findColumn(e,t);r&&(!0===i.config.columns||void 0==i.config.columns?(n=Object.keys(r),n.push("width")):n=i.config.columns,n.forEach(function(e){"columns"!==e&&void 0!==t[e]&&(r[e]=t[e])}),r.columns&&(r.columns=i.mergeDefinition(r.columns,t.columns)),o.push(r))}),e.forEach(function(e,s){i._findColumn(t,e)||(o.length>s?o.splice(s,0,e):o.push(e))}),o},Persistence.prototype._findColumn=function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},Persistence.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},Persistence.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},Persistence.prototype.getGroupConfig=function(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e},Persistence.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},Persistence.prototype.parseColumns=function(e){var t=this,i=[],o=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(function(e){var s,n={},r=e.getDefinition();e.isGroup?(n.title=r.title,n.columns=t.parseColumns(e.getColumns())):(n.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(s=Object.keys(r),s.push("width")):s=t.config.columns,s.forEach(function(t){switch(t){case"width":n.width=e.getWidth();break;case"visible":n.visible=e.visible;break;default:"function"!=typeof r[t]&&-1===o.indexOf(t)&&(n[t]=r[t])}})),i.push(n)}),i},Persistence.prototype.readers={local:function(e,t){var i=localStorage.getItem(e+"-"+t);return!!i&&JSON.parse(i)},cookie:function(e,t){var i,o,s=document.cookie,n=e+"-"+t,r=s.indexOf(n+"=");return r>-1&&(s=s.substr(r),i=s.indexOf(";"),i>-1&&(s=s.substr(0,i)),o=s.replace(n+"=","")),!!o&&JSON.parse(o)}},Persistence.prototype.writers={local:function(e,t,i){localStorage.setItem(e+"-"+t,JSON.stringify(i))},cookie:function(e,t,i){var o=new Date;o.setDate(o.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(i)+"; expires="+o.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);
\ No newline at end of file
index 2758933..48329d5 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Print = function Print(table) {
        this.table = table; //hold Tabulator object
index b9f7d8d..3de3df8 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var Print=function(t){this.table=t,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(t,e,i){var n,l,o=window.scrollX,a=window.scrollY,s=document.createElement("div"),r=document.createElement("div"),p=this.table.modules.export.genereateTable(void 0!==i?i:this.table.options.printConfig,void 0!==e?e:this.table.options.printStyled,t,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(s.classList.add("tabulator-print-header"),n="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof n?s.innerHTML=n:s.appendChild(n),this.element.appendChild(s)),this.element.appendChild(p),this.table.options.printFooter&&(r.classList.add("tabulator-print-footer"),l="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof l?r.innerHTML=l:r.appendChild(l),this.element.appendChild(r)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,p),window.print(),this.cleanup(),window.scrollTo(o,a),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print);
\ No newline at end of file
index f88a38e..9f5af8d 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var ReactiveData = function ReactiveData(table) {
        this.table = table; //hold Tabulator object
index 27ea95f..f2c1b24 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var ReactiveData=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(e){var t,a=this;this.currentVersion++,t=this.currentVersion,a.unwatchData(),a.data=e,a.origFuncs.push=e.push,Object.defineProperty(a.data,"push",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!1)}),a.origFuncs.push.apply(e,arguments)}}),a.origFuncs.unshift=e.unshift,Object.defineProperty(a.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var r=Array.from(arguments);return a.blocked||t!==a.currentVersion||r.forEach(function(e){a.table.rowManager.addRowActual(e,!0)}),a.origFuncs.unshift.apply(e,arguments)}}),a.origFuncs.shift=e.shift,Object.defineProperty(a.data,"shift",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[0]))&&r.deleteActual(),a.origFuncs.shift.call(e)}}),a.origFuncs.pop=e.pop,Object.defineProperty(a.data,"pop",{enumerable:!1,configurable:!0,value:function(){var r;return a.blocked||t!==a.currentVersion||a.data.length&&(r=a.table.rowManager.getRowFromDataObject(a.data[a.data.length-1]))&&r.deleteActual(),a.origFuncs.pop.call(e)}}),a.origFuncs.splice=e.splice,Object.defineProperty(a.data,"splice",{enumerable:!1,configurable:!0,value:function(){var r,n=Array.from(arguments),o=n[0]<0?e.length+n[0]:n[0],i=n[1],c=!!n[2]&&n.slice(2);if(!a.blocked&&t===a.currentVersion){if(c&&(r=!!e[o]&&a.table.rowManager.getRowFromDataObject(e[o]),r?c.forEach(function(e){a.table.rowManager.addRowActual(e,!0,r,!0)}):(c=c.slice().reverse(),c.forEach(function(e){a.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==i){var u=e.slice(o,void 0===n[1]?n[1]:o+i);u.forEach(function(e,t){var r=a.table.rowManager.getRowFromDataObject(e);r&&r.deleteActual(t!==u.length-1)})}(c||0!==i)&&a.table.rowManager.reRenderInPosition()}return a.origFuncs.splice.apply(e,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var a in t)this.watchKey(e,t,a);this.table.options.dataTree&&this.watchTreeChildren(e),this.blocked=!1},ReactiveData.prototype.watchTreeChildren=function(e){function t(){a.table.modules.dataTree.initializeRow(e),a.table.modules.dataTree.layoutRow(e),a.table.rowManager.refreshActiveData("tree",!1,!0)}var a=this,r=e.getData()[this.table.options.dataTreeChildField],n={};r&&(n.push=r.push,Object.defineProperty(r,"push",{enumerable:!1,configurable:!0,value:function(){var e=n.push.apply(r,arguments);return t(),e}}),n.unshift=r.unshift,Object.defineProperty(r,"unshift",{enumerable:!1,configurable:!0,value:function(){var e=n.unshift.apply(r,arguments);return t(),e}}),n.shift=r.shift,Object.defineProperty(r,"shift",{enumerable:!1,configurable:!0,value:function(){var e=n.shift.call(r);return t(),e}}),n.pop=r.pop,Object.defineProperty(r,"pop",{enumerable:!1,configurable:!0,value:function(){var e=n.pop.call(r);return t(),e}}),n.splice=r.splice,Object.defineProperty(r,"splice",{enumerable:!1,configurable:!0,value:function(){var e=n.splice.apply(r,arguments);return t(),e}}))},ReactiveData.prototype.watchKey=function(e,t,a){var r=this,n=Object.getOwnPropertyDescriptor(t,a),o=t[a],i=this.currentVersion;Object.defineProperty(t,a,{set:function(t){if(o=t,!r.blocked&&i===r.currentVersion){var c={};c[a]=t,e.updateData(c)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),o}})},ReactiveData.prototype.unwatchRow=function(e){var t=e.getData();for(var a in t)Object.defineProperty(t,a,{value:t[a]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData);
\ No newline at end of file
index 9c23bbf..b334956 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var ResizeColumns = function ResizeColumns(table) {
        this.table = table; //hold Tabulator object
index 1cf1d32..58ceb1f 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var ResizeColumns=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(e,t,i){var o=this,n=!1,s=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===s||s==e){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var l=document.createElement("div");l.className="tabulator-col-resize-handle prev",a.addEventListener("click",function(e){e.stopPropagation()});var r=function(e){var i=t.getLastColumn();i&&o._checkResizability(i)&&(o.startColumn=t,o._mouseDown(e,i,a))};a.addEventListener("mousedown",r),a.addEventListener("touchstart",r,{passive:!0}),a.addEventListener("dblclick",function(e){var i=t.getLastColumn();i&&o._checkResizability(i)&&(e.stopPropagation(),i.reinitializeWidth(!0))}),l.addEventListener("click",function(e){e.stopPropagation()});var d=function(e){var i,n,s;(i=t.getFirstColumn())&&(n=o.table.columnManager.findColumnIndex(i),(s=n>0&&o.table.columnManager.getColumnByIndex(n-1))&&o._checkResizability(s)&&(o.startColumn=t,o._mouseDown(e,s,l)))};l.addEventListener("mousedown",d),l.addEventListener("touchstart",d,{passive:!0}),l.addEventListener("dblclick",function(e){var i,n,s;(i=t.getFirstColumn())&&(n=o.table.columnManager.findColumnIndex(i),(s=n>0&&o.table.columnManager.getColumnByIndex(n-1))&&o._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),i.appendChild(a),i.appendChild(l)}},ResizeColumns.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,t,i){function o(e){s.table.rtl?t.setWidth(s.startWidth-((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)):t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),s.table.options.virtualDomHoz&&s.table.vdomHoz.reinitialize(!0),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",o),i.removeEventListener("touchmove",o),i.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n),i.addEventListener("touchmove",o,{passive:!0}),i.addEventListener("touchend",n)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns);
\ No newline at end of file
index 12fad9e..d586e0f 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var ResizeRows = function ResizeRows(table) {
        this.table = table; //hold Tabulator object
index a2a0671..295f9e0 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var ResizeRows=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(e){var t=this,o=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(e){e.stopPropagation()});var a=function(o){t.startRow=e,t._mouseDown(o,e,s)};s.addEventListener("mousedown",a),s.addEventListener("touchstart",a,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var s=t.table.rowManager.prevDisplayRow(e);s&&(t.startRow=s,t._mouseDown(o,s,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(s),o.appendChild(n)},ResizeRows.prototype._mouseDown=function(e,t,o){function s(e){t.setHeight(a.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-a.startY))}function n(e){document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mousemove",s),o.removeEventListener("touchmove",s),o.removeEventListener("touchend",n),a.table.element.classList.remove("tabulator-block-select"),a.table.options.rowResized.call(this.table,t.getComponent())}var a=this;a.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),a.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,a.startHeight=t.getHeight(),document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",s,{passive:!0}),o.addEventListener("touchend",n)},Tabulator.prototype.registerModule("resizeRows",ResizeRows);
\ No newline at end of file
index d29cacc..6d53367 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var ResizeTable = function ResizeTable(table) {
        this.table = table; //hold Tabulator object
index d7a7982..416dbc7 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var ResizeTable=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(e){var t,i=this,n=this.table;this.tableHeight=n.element.clientHeight,this.tableWidth=n.element.clientWidth,n.element.parentNode&&(this.containerHeight=n.element.parentNode.clientHeight,this.containerWidth=n.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===n.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.tableHeight==t&&i.tableWidth==r||(i.tableHeight=t,i.tableWidth=r,n.element.parentNode&&(i.containerHeight=n.element.parentNode.clientHeight,i.containerWidth=n.element.parentNode.clientWidth),n.options.virtualDomHoz&&n.vdomHoz.reinitialize(!0),n.redraw())}}),this.observer.observe(n.element),t=window.getComputedStyle(n.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),r=Math.floor(e[0].contentRect.width);i.containerHeight==t&&i.containerWidth==r||(i.containerHeight=t,i.containerWidth=r,i.tableHeight=n.element.clientHeight,i.tableWidth=n.element.clientWidth),n.options.virtualDomHoz&&n.vdomHoz.reinitialize(!0),n.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!n.browserMobile||n.browserMobile&&!n.modules.edit.currentCell)&&(n.options.virtualDomHoz&&n.vdomHoz.reinitialize(!0),n.redraw())},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable);
\ No newline at end of file
index 8f1fc6a..8db4daf 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var ResponsiveLayout = function ResponsiveLayout(table) {
        this.table = table; //hold Tabulator object
@@ -263,11 +263,13 @@ ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
                                };
 
                                output.push({
+                                       field: column.field,
                                        title: column.definition.title,
                                        value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
                                });
                        } else {
                                output.push({
+                                       field: column.field,
                                        title: column.definition.title,
                                        value: value
                                });
@@ -279,21 +281,32 @@ ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
 };
 
 ResponsiveLayout.prototype.formatCollapsedData = function (data) {
-       var list = document.createElement("table"),
-           listContents = "";
+       var list = document.createElement("table");
 
        data.forEach(function (item) {
-               var div = document.createElement("div");
+               var row = document.createElement("tr");
+               var titleData = document.createElement("td");
+               var valueData = document.createElement("td");
+               var node_content;
+
+               var titleHighlight = document.createElement("strong");
+               titleData.appendChild(titleHighlight);
+               this.table.modules.localize.bind("columns|" + item.field, function (text) {
+                       titleHighlight.innerText = text || item.title;
+               });
 
                if (item.value instanceof Node) {
-                       div.appendChild(item.value);
-                       item.value = div.innerHTML;
+                       node_content = document.createElement("div");
+                       node_content.appendChild(item.value);
+                       valueData.appendChild(node_content);
+               } else {
+                       valueData.innerHTML = item.value;
                }
 
-               listContents += "<tr><td><strong>" + item.title + "</strong></td><td>" + item.value + "</td></tr>";
-       });
-
-       list.innerHTML = listContents;
+               row.appendChild(titleData);
+               row.appendChild(valueData);
+               list.appendChild(row);
+       }, this);
 
        return Object.keys(data).length ? list : "";
 };
index b7ebb62..4582f9b 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var ResponsiveLayout=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,n){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=n,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,n=Array.isArray(o),s=0,o=n?o:o[Symbol.iterator]();;){var i;if(n){if(s>=o.length)break;i=o[s++]}else{if(s=o.next(),s.done)break;i=s.value}var l=i;if("responsiveCollapse"==l.definition.formatter){this.collapseHandleColumn=l;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},ResponsiveLayout.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},ResponsiveLayout.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),n=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(n<0){var s=e.columns[e.index];s?(e.hideColumn(s),e.index++):t=!1}else{var i=e.columns[e.index-1];i&&n>0&&n>=i.getWidth()?(e.showColumn(i),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},ResponsiveLayout.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(e){var t,o=this,n=e.getData(),s=[];return this.hiddenColumns.forEach(function(i){var l=i.getFieldValue(n);i.definition.title&&i.field&&(i.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return l},getData:function(){return n},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return i.getComponent()}},s.push({title:i.definition.title,value:i.modules.format.formatter.call(o.table.modules.format,t,i.modules.format.params)})):s.push({title:i.definition.title,value:l}))}),s},ResponsiveLayout.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";return e.forEach(function(e){var t=document.createElement("div");e.value instanceof Node&&(t.appendChild(e.value),e.value=t.innerHTML),o+="<tr><td><strong>"+e.title+"</strong></td><td>"+e.value+"</td></tr>"}),t.innerHTML=o,Object.keys(e).length?t:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var ResponsiveLayout=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,n){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=n,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,n=Array.isArray(o),s=0,o=n?o:o[Symbol.iterator]();;){var i;if(n){if(s>=o.length)break;i=o[s++]}else{if(s=o.next(),s.done)break;i=s.value}var l=i;if("responsiveCollapse"==l.definition.formatter){this.collapseHandleColumn=l;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},ResponsiveLayout.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},ResponsiveLayout.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),n=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(n<0){var s=e.columns[e.index];s?(e.hideColumn(s),e.index++):t=!1}else{var i=e.columns[e.index-1];i&&n>0&&n>=i.getWidth()?(e.showColumn(i),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},ResponsiveLayout.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(e){var t,o=this,n=e.getData(),s=[];return this.hiddenColumns.forEach(function(i){var l=i.getFieldValue(n);i.definition.title&&i.field&&(i.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return l},getData:function(){return n},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return i.getComponent()}},s.push({field:i.field,title:i.definition.title,value:i.modules.format.formatter.call(o.table.modules.format,t,i.modules.format.params)})):s.push({field:i.field,title:i.definition.title,value:l}))}),s},ResponsiveLayout.prototype.formatCollapsedData=function(e){var t=document.createElement("table");return e.forEach(function(e){var o,n=document.createElement("tr"),s=document.createElement("td"),i=document.createElement("td"),l=document.createElement("strong");s.appendChild(l),this.table.modules.localize.bind("columns|"+e.field,function(t){l.innerText=t||e.title}),e.value instanceof Node?(o=document.createElement("div"),o.appendChild(e.value),i.appendChild(o)):i.innerHTML=e.value,n.appendChild(s),n.appendChild(i),t.appendChild(n)},this),Object.keys(e).length?t:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);
\ No newline at end of file
index 0b26b22..363cc6e 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var SelectRow = function SelectRow(table) {
        this.table = table; //hold Tabulator object
@@ -221,6 +221,7 @@ SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
 
        if (row) {
                if (this.selectedRows.indexOf(row) == -1) {
+                       row.getElement().classList.add("tabulator-selected");
                        if (!row.modules.select) {
                                row.modules.select = {};
                        }
@@ -229,7 +230,6 @@ SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
                        if (row.modules.select.checkboxEl) {
                                row.modules.select.checkboxEl.checked = true;
                        }
-                       row.getElement().classList.add("tabulator-selected");
 
                        this.selectedRows.push(row);
 
@@ -294,6 +294,7 @@ SelectRow.prototype._deselectRow = function (rowInfo, silent) {
 
                if (index > -1) {
 
+                       row.getElement().classList.remove("tabulator-selected");
                        if (!row.modules.select) {
                                row.modules.select = {};
                        }
@@ -302,7 +303,6 @@ SelectRow.prototype._deselectRow = function (rowInfo, silent) {
                        if (row.modules.select.checkboxEl) {
                                row.modules.select.checkboxEl.checked = false;
                        }
-                       row.getElement().classList.remove("tabulator-selected");
                        self.selectedRows.splice(index, 1);
 
                        if (this.table.options.dataTreeSelectPropagate) {
@@ -375,7 +375,7 @@ SelectRow.prototype.registerHeaderSelectCheckbox = function (element) {
 };
 
 SelectRow.prototype.childRowSelection = function (row, select) {
-       var children = this.table.modules.dataTree.getChildren(row);
+       var children = this.table.modules.dataTree.getChildren(row, true);
 
        if (select) {
                for (var _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
index c6b52b6..3ee7b9f 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},SelectRow=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(e){var t=this,o=e.getElement(),l=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var l=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),s=t.table.rowManager.getDisplayRowIndex(e),c=l<=s?l:s,i=l>=s?l:s,n=t.table.rowManager.getDisplayRows().slice(0),a=n.splice(c,i-c+1);o.ctrlKey||o.metaKey?(a.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.length<t.table.options.selectable&&t.toggleRow(o))}),t.lastClickedRow=e):(t.deselectRows(void 0,!0),!0!==t.table.options.selectable&&a.length>t.table.options.selectable&&(a=a.slice(0,t.table.options.selectable)),t.selectRows(a)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",l),document.body.addEventListener("keyup",l),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},SelectRow.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},SelectRow.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var l=this.table.rowManager.findRow(e);l?-1==this.selectedRows.indexOf(l)&&(l.modules.select||(l.modules.select={}),l.modules.select.selected=!0,l.modules.select.checkboxEl&&(l.modules.select.checkboxEl.checked=!0),l.getElement().classList.add("tabulator-selected"),this.selectedRows.push(l),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(l,!0),t||this.table.options.rowSelected.call(this.table,l.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},SelectRow.prototype.deselectRows=function(e,t){var o,l=this;if(void 0===e){o=l.selectedRows.length;for(var s=0;s<o;s++)l._deselectRow(l.selectedRows[0],!0);l._rowSelectionChanged(t)}else Array.isArray(e)?(e.forEach(function(e){l._deselectRow(e,!0)}),l._rowSelectionChanged(t)):l._deselectRow(e,t)},SelectRow.prototype._deselectRow=function(e,t){var o,l=this,s=l.table.rowManager.findRow(e);s?(o=l.selectedRows.findIndex(function(e){return e==s}))>-1&&(s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),s.getElement().classList.remove("tabulator-selected"),l.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),t||l.table.options.rowDeselected.call(this.table,s.getComponent()),l._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},SelectRow.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},SelectRow.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},SelectRow.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},SelectRow.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e);if(t)for(var l=o,s=Array.isArray(l),c=0,l=s?l:l[Symbol.iterator]();;){var i;if(s){if(c>=l.length)break;i=l[c++]}else{if(c=l.next(),c.done)break;i=c.value}var n=i;this._selectRow(n,!0)}else for(var a=o,r=Array.isArray(a),d=0,a=r?a:a[Symbol.iterator]();;){var h;if(r){if(d>=a.length)break;h=a[d++]}else{if(d=a.next(),d.done)break;h=d.value}var w=h;this._deselectRow(w,!0)}},Tabulator.prototype.registerModule("selectRow",SelectRow);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},SelectRow=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(e){var t=this,o=e.getElement(),l=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var l=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),s=t.table.rowManager.getDisplayRowIndex(e),c=l<=s?l:s,i=l>=s?l:s,n=t.table.rowManager.getDisplayRows().slice(0),a=n.splice(c,i-c+1);o.ctrlKey||o.metaKey?(a.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.length<t.table.options.selectable&&t.toggleRow(o))}),t.lastClickedRow=e):(t.deselectRows(void 0,!0),!0!==t.table.options.selectable&&a.length>t.table.options.selectable&&(a=a.slice(0,t.table.options.selectable)),t.selectRows(a)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",l),document.body.addEventListener("keyup",l),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},SelectRow.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},SelectRow.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var l=this.table.rowManager.findRow(e);l?-1==this.selectedRows.indexOf(l)&&(l.getElement().classList.add("tabulator-selected"),l.modules.select||(l.modules.select={}),l.modules.select.selected=!0,l.modules.select.checkboxEl&&(l.modules.select.checkboxEl.checked=!0),this.selectedRows.push(l),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(l,!0),t||this.table.options.rowSelected.call(this.table,l.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},SelectRow.prototype.deselectRows=function(e,t){var o,l=this;if(void 0===e){o=l.selectedRows.length;for(var s=0;s<o;s++)l._deselectRow(l.selectedRows[0],!0);l._rowSelectionChanged(t)}else Array.isArray(e)?(e.forEach(function(e){l._deselectRow(e,!0)}),l._rowSelectionChanged(t)):l._deselectRow(e,t)},SelectRow.prototype._deselectRow=function(e,t){var o,l=this,s=l.table.rowManager.findRow(e);s?(o=l.selectedRows.findIndex(function(e){return e==s}))>-1&&(s.getElement().classList.remove("tabulator-selected"),s.modules.select||(s.modules.select={}),s.modules.select.selected=!1,s.modules.select.checkboxEl&&(s.modules.select.checkboxEl.checked=!1),l.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(s,!1),t||l.table.options.rowDeselected.call(this.table,s.getComponent()),l._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},SelectRow.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},SelectRow.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},SelectRow.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},SelectRow.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e,!0);if(t)for(var l=o,s=Array.isArray(l),c=0,l=s?l:l[Symbol.iterator]();;){var i;if(s){if(c>=l.length)break;i=l[c++]}else{if(c=l.next(),c.done)break;i=c.value}var n=i;this._selectRow(n,!0)}else for(var a=o,r=Array.isArray(a),d=0,a=r?a:a[Symbol.iterator]();;){var h;if(r){if(d>=a.length)break;h=a[d++]}else{if(d=a.next(),d.done)break;h=d.value}var w=h;this._deselectRow(w,!0)}},Tabulator.prototype.registerModule("selectRow",SelectRow);
\ No newline at end of file
index 416d028..397b532 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Sort = function Sort(table) {
        this.table = table; //hold Tabulator object
@@ -330,8 +330,8 @@ Sort.prototype._sortRow = function (a, b, column, dir, params) {
        a = typeof a !== "undefined" ? a : "";
        b = typeof b !== "undefined" ? b : "";
 
-       // el1Comp = el1.getComponent();
-       // el2Comp = el2.getComponent();
+       el1Comp = el1.getComponent();
+       el2Comp = el2.getComponent();
 
        return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
 };
index 7c874cd..ae10f50 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var r,o,n=this,i=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?i=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":i=t.definition.sorter}t.modules.sort={sorter:i,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&(r=t.getElement(),r.classList.add("tabulator-sortable"),o=document.createElement("div"),o.classList.add("tabulator-col-sorter"),"object"==_typeof(this.table.options.headerSortElement)?o.appendChild(this.table.options.headerSortElement):o.innerHTML=this.table.options.headerSortElement,e.appendChild(o),t.modules.sort.element=o,r.addEventListener("click",function(e){var r="",o=[],i=!1;if(t.modules.sort){if(t.modules.sort.tristate)r="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(o=n.getSort(),i=o.findIndex(function(e){return e.field===t.getField()}),i>-1?(o[i].dir=r,i!=o.length-1&&(i=o.splice(i,1)[0],"none"!=r&&o.push(i))):"none"!=r&&o.push({column:t,dir:r}),n.setSort(o)):"none"==r?n.clear():n.setSort(t,r),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},Sort.prototype.setSort=function(t,e){var r=this,o=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=r.table.columnManager.findColumn(t.column),e?(t.column=e,o.push(t),r.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),r.sortList=o,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,r=this.table.rowManager.activeRows[0],o="string";if(r&&(r=r.getData(),t.getField()))switch(e=t.getFieldValue(r),void 0===e?"undefined":_typeof(e)){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return this.sorters[o]},Sort.prototype.sort=function(t){var e=this,r=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,o=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?r.forEach(function(t,r){e.setColumnHeader(t.column,t.dir)}):(r.forEach(function(t,r){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,o.push(t)),e.setColumnHeader(t.column,t.dir)}),o.length&&e._sortItems(t,o)),e.table.options.dataSorted&&(t.forEach(function(t){n.push(t.getComponent())}),e.table.options.dataSorted.call(e.table,e.getSort(),n))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItems=function(t,e){var r=this,o=e.length-1;t.sort(function(t,n){for(var i,s=o;s>=0;s--){var a=e[s];if(0!==(i=r._sortRow(t,n,a.column,a.dir,a.params)))break}return i})},Sort.prototype._sortRow=function(t,e,r,o,n){var i="asc"==o?t:e,s="asc"==o?e:t;return t=r.getFieldValue(i.getData()),e=r.getFieldValue(s.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",r.modules.sort.sorter.call(this,t,e,void 0,void 0,r.getComponent(),o,n)},Sort.prototype.sorters={number:function(t,e,r,o,n,i,s){var a=s.alignEmptyValues,l=s.decimalSeparator,u=s.thousandSeparator,c=0;if(t=String(t),e=String(e),u&&(t=t.split(u).join(""),e=e.split(u).join("")),l&&(t=t.split(l).join("."),e=e.split(l).join(".")),t=parseFloat(t),e=parseFloat(e),isNaN(t))c=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;c=1}return("top"===a&&"desc"===i||"bottom"===a&&"asc"===i)&&(c*=-1),c},string:function(t,e,r,o,n,i,s){var a,l=s.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(s.locale)){case"boolean":s.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=s.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),a)}u=1}else u=e?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u},date:function(t,e,r,o,n,i,s){return s.format||(s.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},time:function(t,e,r,o,n,i,s){return s.format||(s.format="HH:mm"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},datetime:function(t,e,r,o,n,i,s){var a=s.format||"DD/MM/YYYY HH:mm:ss",l=s.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,a),e=moment(e,a),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,r,o,n,i,s){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,r,o,n,i,s){function a(t){switch(c){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,u=0,c=s.type||"length",d=s.alignEmptyValues,m=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?a(t):0,u=e?a(e):0,l-u;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===i||"bottom"===d&&"asc"===i)&&(m*=-1),m},exists:function(t,e,r,o,n,i,s){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,r,o,n,i,s){var a,l,u,c,d,m=0,f=/(\d+)|(\D+)/g,p=/\d/,h=s.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(a=String(t).toLowerCase(),l=String(e).toLowerCase(),a===l)return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(f),l=l.match(f),d=a.length>l.length?l.length:a.length;m<d;)if(u=a[m],c=l[m++],u!==c)return isFinite(u)&&isFinite(c)?("0"===u.charAt(0)&&(u="."+u),"0"===c.charAt(0)&&(c="."+c),u-c):u>c?1:-1;return a.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===h&&"desc"===i||"bottom"===h&&"asc"===i)&&(g*=-1),g}},Tabulator.prototype.registerModule("sort",Sort);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var r,o,n=this,i=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?i=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":i=t.definition.sorter}t.modules.sort={sorter:i,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&(r=t.getElement(),r.classList.add("tabulator-sortable"),o=document.createElement("div"),o.classList.add("tabulator-col-sorter"),"object"==_typeof(this.table.options.headerSortElement)?o.appendChild(this.table.options.headerSortElement):o.innerHTML=this.table.options.headerSortElement,e.appendChild(o),t.modules.sort.element=o,r.addEventListener("click",function(e){var r="",o=[],i=!1;if(t.modules.sort){if(t.modules.sort.tristate)r="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":r="desc";break;case"desc":r="asc";break;default:r=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(o=n.getSort(),i=o.findIndex(function(e){return e.field===t.getField()}),i>-1?(o[i].dir=r,i!=o.length-1&&(i=o.splice(i,1)[0],"none"!=r&&o.push(i))):"none"!=r&&o.push({column:t,dir:r}),n.setSort(o)):"none"==r?n.clear():n.setSort(t,r),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},Sort.prototype.setSort=function(t,e){var r=this,o=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=r.table.columnManager.findColumn(t.column),e?(t.column=e,o.push(t),r.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),r.sortList=o,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,r=this.table.rowManager.activeRows[0],o="string";if(r&&(r=r.getData(),t.getField()))switch(e=t.getFieldValue(r),void 0===e?"undefined":_typeof(e)){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return this.sorters[o]},Sort.prototype.sort=function(t){var e=this,r=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,o=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?r.forEach(function(t,r){e.setColumnHeader(t.column,t.dir)}):(r.forEach(function(t,r){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,o.push(t)),e.setColumnHeader(t.column,t.dir)}),o.length&&e._sortItems(t,o)),e.table.options.dataSorted&&(t.forEach(function(t){n.push(t.getComponent())}),e.table.options.dataSorted.call(e.table,e.getSort(),n))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItems=function(t,e){var r=this,o=e.length-1;t.sort(function(t,n){for(var i,s=o;s>=0;s--){var a=e[s];if(0!==(i=r._sortRow(t,n,a.column,a.dir,a.params)))break}return i})},Sort.prototype._sortRow=function(t,e,r,o,n){var i,s,a="asc"==o?t:e,l="asc"==o?e:t;return t=r.getFieldValue(a.getData()),e=r.getFieldValue(l.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",i=a.getComponent(),s=l.getComponent(),r.modules.sort.sorter.call(this,t,e,i,s,r.getComponent(),o,n)},Sort.prototype.sorters={number:function(t,e,r,o,n,i,s){var a=s.alignEmptyValues,l=s.decimalSeparator,u=s.thousandSeparator,c=0;if(t=String(t),e=String(e),u&&(t=t.split(u).join(""),e=e.split(u).join("")),l&&(t=t.split(l).join("."),e=e.split(l).join(".")),t=parseFloat(t),e=parseFloat(e),isNaN(t))c=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;c=1}return("top"===a&&"desc"===i||"bottom"===a&&"asc"===i)&&(c*=-1),c},string:function(t,e,r,o,n,i,s){var a,l=s.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(s.locale)){case"boolean":s.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=s.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),a)}u=1}else u=e?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u},date:function(t,e,r,o,n,i,s){return s.format||(s.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},time:function(t,e,r,o,n,i,s){return s.format||(s.format="HH:mm"),this.sorters.datetime.call(this,t,e,r,o,n,i,s)},datetime:function(t,e,r,o,n,i,s){var a=s.format||"DD/MM/YYYY HH:mm:ss",l=s.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,a),e=moment(e,a),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===i||"bottom"===l&&"asc"===i)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,r,o,n,i,s){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,r,o,n,i,s){function a(t){switch(c){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,u=0,c=s.type||"length",d=s.alignEmptyValues,m=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?a(t):0,u=e?a(e):0,l-u;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===i||"bottom"===d&&"asc"===i)&&(m*=-1),m},exists:function(t,e,r,o,n,i,s){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,r,o,n,i,s){var a,l,u,c,d,m=0,f=/(\d+)|(\D+)/g,p=/\d/,h=s.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(a=String(t).toLowerCase(),l=String(e).toLowerCase(),a===l)return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(f),l=l.match(f),d=a.length>l.length?l.length:a.length;m<d;)if(u=a[m],c=l[m++],u!==c)return isFinite(u)&&isFinite(c)?("0"===u.charAt(0)&&(u="."+u),"0"===c.charAt(0)&&(c="."+c),u-c):u>c?1:-1;return a.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===h&&"desc"===i||"bottom"===h&&"asc"===i)&&(g*=-1),g}},Tabulator.prototype.registerModule("sort",Sort);
\ No newline at end of file
index a5d953d..45f325f 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 var Validate = function Validate(table) {
        this.table = table;
index 794a0f9..8d42ce9 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Validate=function(t){this.table=t,this.invalidCells=[]};Validate.prototype.initializeColumn=function(t){var i,n=this,e=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(i=n._extractValidator(t))&&e.push(i)}):(i=this._extractValidator(t.definition.validator))&&e.push(i),t.modules.validate=!!e.length&&e)},Validate.prototype._extractValidator=function(t){var i,n,e;switch(void 0===t?"undefined":_typeof(t)){case"string":return e=t.indexOf(":"),e>-1?(i=t.substring(0,e),n=t.substring(e+1)):i=t,this._buildValidator(i,n);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,i){var n="function"==typeof t?t:this.validators[t];return n?{type:"function"==typeof t?"function":t,func:n,params:i}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,i,n){var e=this,a=[],o=this.invalidCells.indexOf(i);return t&&t.forEach(function(t){t.func.call(e,i.getComponent(),n,t.params)||a.push({type:t.type,parameters:t.params})}),a=!a.length||a,i.modules.validate||(i.modules.validate={}),!0===a?(i.modules.validate.invalid=!1,i.getElement().classList.remove("tabulator-validation-fail"),o>-1&&this.invalidCells.splice(o,1)):(i.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&i.getElement().classList.add("tabulator-validation-fail"),-1==o&&this.invalidCells.push(i)),a},Validate.prototype.getInvalidCells=function(){var t=[];return this.invalidCells.forEach(function(i){t.push(i.getComponent())}),t},Validate.prototype.clearValidation=function(t){var i;t.modules.validate&&t.modules.validate.invalid&&(t.getElement().classList.remove("tabulator-validation-fail"),t.modules.validate.invalid=!1,(i=this.invalidCells.indexOf(t))>-1&&this.invalidCells.splice(i,1))},Validate.prototype.validators={integer:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&Math.floor(i)===i},float:function(t,i,n){return""===i||null===i||void 0===i||"number"==typeof(i=Number(i))&&isFinite(i)&&i%1!=0},numeric:function(t,i,n){return""===i||null===i||void 0===i||!isNaN(i)},string:function(t,i,n){return""===i||null===i||void 0===i||isNaN(i)},max:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)<=n},min:function(t,i,n){return""===i||null===i||void 0===i||parseFloat(i)>=n},starts:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().startsWith(String(n).toLowerCase())},ends:function(t,i,n){return""===i||null===i||void 0===i||String(i).toLowerCase().endsWith(String(n).toLowerCase())},minLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length>=n},maxLength:function(t,i,n){return""===i||null===i||void 0===i||String(i).length<=n},in:function(t,i,n){return""===i||null===i||void 0===i||("string"==typeof n&&(n=n.split("|")),""===i||n.indexOf(i)>-1)},regex:function(t,i,n){return""===i||null===i||void 0===i||new RegExp(n).test(i)},unique:function(t,i,n){if(""===i||null===i||void 0===i)return!0;var e=!0,a=t.getData(),o=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var n=t.getData();n!==a&&i==o.getFieldValue(n)&&(e=!1)}),e},required:function(t,i,n){return""!==i&&null!==i&&void 0!==i}},Tabulator.prototype.registerModule("validate",Validate);
\ No newline at end of file
index 0a30906..8034297 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 'use strict';
 
@@ -1467,6 +1467,8 @@ var Column = function Column(def, parent) {
 
        this.width = null; //column width
        this.widthStyled = ""; //column width prestyled to improve render efficiency
+       this.maxWidth = null; //column maximum width
+       this.maxWidthStyled = ""; //column maximum prestyled to improve render efficiency
        this.minWidth = null; //column minimum width
        this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency
        this.widthFixed = false; //user has specified a width for this column
@@ -1892,6 +1894,12 @@ Column.prototype._buildColumnHeader = function () {
        //set min width if present
        this.setMinWidth(typeof def.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(def.minWidth));
 
+       if (def.maxWidth || this.table.options.columnMaxWidth) {
+               if (def.maxWidth !== false) {
+                       this.setMaxWidth(typeof def.maxWidth == "undefined" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth));
+               }
+       }
+
        this.reinitializeWidth();
 
        //set tooltip if present
@@ -2379,6 +2387,10 @@ Column.prototype.setWidthActual = function (width) {
 
        width = Math.max(this.minWidth, width);
 
+       if (this.maxWidth) {
+               width = Math.min(this.maxWidth, width);
+       }
+
        this.width = width;
        this.widthStyled = width ? width + "px" : "";
 
@@ -2454,6 +2466,17 @@ Column.prototype.setMinWidth = function (minWidth) {
        });
 };
 
+Column.prototype.setMaxWidth = function (maxWidth) {
+       this.maxWidth = maxWidth;
+       this.maxWidthStyled = maxWidth ? maxWidth + "px" : "";
+
+       this.element.style.maxWidth = this.maxWidthStyled;
+
+       this.cells.forEach(function (cell) {
+               cell.setMaxWidth();
+       });
+};
+
 Column.prototype.delete = function () {
        var _this9 = this;
 
@@ -2610,25 +2633,30 @@ Column.prototype.updateDefinition = function (updates) {
                var definition;
 
                if (!_this10.isGroup) {
-                       definition = Object.assign({}, _this10.getDefinition());
-                       definition = Object.assign(definition, updates);
+                       if (!_this10.parent.isGroup) {
+                               definition = Object.assign({}, _this10.getDefinition());
+                               definition = Object.assign(definition, updates);
 
-                       _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
+                               _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
 
-                               if (definition.field == _this10.field) {
-                                       _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
-                               }
+                                       if (definition.field == _this10.field) {
+                                               _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
+                                       }
 
-                               _this10.delete().then(function () {
-                                       resolve(column.getComponent());
+                                       _this10.delete().then(function () {
+                                               resolve(column.getComponent());
+                                       }).catch(function (err) {
+                                               reject(err);
+                                       });
                                }).catch(function (err) {
                                        reject(err);
                                });
-                       }).catch(function (err) {
-                               reject(err);
-                       });
+                       } else {
+                               console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns");
+                               reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                       }
                } else {
-                       console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                       console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns");
                        reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
                }
        });
@@ -2642,7 +2670,7 @@ Column.prototype.deleteCell = function (cell) {
        }
 };
 
-Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu",
+Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "maxWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu",
 // "headerClickMenu",
 "clickMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"];
 
@@ -4406,7 +4434,8 @@ RowManager.prototype.adjustTableSize = function () {
            modExists;
 
        if (this.renderMode === "virtual") {
-               var otherHeight = Math.floor(this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0));
+
+               var otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));
 
                if (this.fixedHeight) {
                        this.element.style.minHeight = "calc(100% - " + otherHeight + "px)";
@@ -4414,7 +4443,7 @@ RowManager.prototype.adjustTableSize = function () {
                        this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)";
                } else {
                        this.element.style.height = "";
-                       this.element.style.height = Math.floor(this.table.element.clientHeight) - otherHeight + "px";
+                       this.element.style.height = this.table.element.clientHeight - otherHeight + "px";
                        this.element.scrollTop = this.scrollTop;
                }
 
@@ -4422,7 +4451,7 @@ RowManager.prototype.adjustTableSize = function () {
                this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;
 
                //check if the table has changed size when dealing with variable height tables
-               if (!this.fixedHeight && Math.floor(initialHeight) != Math.floor(this.element.clientHeight)) {
+               if (!this.fixedHeight && initialHeight != this.element.clientHeight) {
                        modExists = this.table.modExists("resizeTable");
 
                        if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {
@@ -4944,7 +4973,7 @@ VDomHoz.prototype.initializeRow = function (row) {
                for (var _i7 = this.leftCol; _i7 <= this.rightCol; _i7++) {
                        var column = this.columns[_i7];
 
-                       if (column.visible) {
+                       if (column && column.visible) {
                                var cell = row.getCell(column);
 
                                row.getElement().appendChild(cell.getElement());
@@ -6383,10 +6412,12 @@ Cell.prototype._generateTooltip = function () {
 };
 
 //////////////////// Getters ////////////////////
-Cell.prototype.getElement = function () {
+Cell.prototype.getElement = function (containerOnly) {
        if (!this.loaded) {
                this.loaded = true;
-               this.layoutElement();
+               if (!containerOnly) {
+                       this.layoutElement();
+               }
        }
 
        return this.element;
@@ -6526,6 +6557,11 @@ Cell.prototype.setMinWidth = function () {
        this.element.style.minWidth = this.column.minWidthStyled;
 };
 
+Cell.prototype.setMaxWidth = function () {
+       this.maxWidth = this.column.maxWidth;
+       this.element.style.maxWidth = this.column.maxWidthStyled;
+};
+
 Cell.prototype.checkHeight = function () {
        // var height = this.element.css("height");
        this.row.reinitializeHeight();
@@ -6835,6 +6871,7 @@ Tabulator.prototype.defaultOptions = {
        layoutColumnsOnNewData: false, //update column widths on setData
 
        columnMinWidth: 40, //minimum global width for a column
+       columnMaxWidth: false, //minimum global width for a column
        columnHeaderVertAlign: "top", //vertical alignment of column headers
        columnVertAlign: false, // DEPRECATED - Left to allow warning
 
@@ -7431,10 +7468,6 @@ Tabulator.prototype._buildElement = function () {
                mod.persistence.initialize();
        }
 
-       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) {
-               options.columns = mod.persistence.load("columns", options.columns);
-       }
-
        if (options.movableRows && this.modExists("moveRow")) {
                mod.moveRow.initialize();
        }
@@ -8403,6 +8436,13 @@ Tabulator.prototype.setFilter = function (field, type, value, params) {
        }
 };
 
+//set standard filters
+Tabulator.prototype.refreshFilter = function () {
+       if (this.modExists("filter", true)) {
+               this.rowManager.filterRefresh();
+       }
+};
+
 //add filter to array
 Tabulator.prototype.addFilter = function (field, type, value, params) {
        if (this.modExists("filter", true)) {
@@ -8895,6 +8935,14 @@ Tabulator.prototype.getHistoryRedoSize = function () {
        }
 };
 
+Tabulator.prototype.clearHistory = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.clear();
+       } else {
+               return false;
+       }
+};
+
 /////////////// Download Management //////////////
 
 Tabulator.prototype.download = function (type, filename, options, active) {
@@ -9093,6 +9141,11 @@ Layout.prototype.getMode = function () {
 Layout.prototype.layout = function () {
 
        this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);
+
+       if (this.mode.indexOf("fitData") === 0 && this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+               this.table.modules.persistence.save("columns");
+       }
 };
 
 //layout render functions
@@ -9261,6 +9314,7 @@ Layout.prototype.modes = {
                            oversizeSpace = 0,
                            remainingSpace = 0,
                            nextColWidth = 0,
+                           remainingFlexGrowUnits = flexGrowUnits,
                            gap = 0,
                            changeUnits = 0,
                            undersizeCols = [];
@@ -9284,9 +9338,24 @@ Layout.prototype.modes = {
                                        oversizeCols.push(col);
                                } else {
 
-                                       undersizeCols.push(col);
+                                       if (col.column.maxWidth && col.column.maxWidth < width) {
+
+                                               col.width = col.column.maxWidth;
+
+                                               freeSpace -= col.column.maxWidth;
+
+                                               remainingFlexGrowUnits -= shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+
+                                               if (remainingFlexGrowUnits) {
+
+                                                       colWidth = Math.floor(freeSpace / remainingFlexGrowUnits);
+                                               }
+                                       } else {
+
+                                               undersizeCols.push(col);
 
-                                       changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                                               changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                                       }
                                }
                        });
 
@@ -10042,7 +10111,7 @@ Ajax.prototype.sendRequest = function (silent) {
 
                                self.loading = false;
 
-                               reject();
+                               reject(error);
                        });
                } else {
                        reject();
@@ -10107,7 +10176,7 @@ Ajax.prototype.defaultURLGenerator = function (url, config, params) {
                        if (!config.method || config.method.toLowerCase() == "get") {
                                config.method = "get";
 
-                               url += (url.includes("?") ? "&" : "?") + this.serializeParams(params);
+                               url += (url.includes("?") ? "&" : "?") + this.modules.ajax.serializeParams(params);
                        }
                }
        }
@@ -10122,7 +10191,7 @@ Ajax.prototype.defaultLoaderPromise = function (url, config, params) {
        return new Promise(function (resolve, reject) {
 
                //set url
-               url = self.urlGenerator(url, config, params);
+               url = self.urlGenerator.call(self.table, url, config, params);
 
                //set body content if not GET request
                if (config.method.toUpperCase() != "GET") {
@@ -10378,7 +10447,6 @@ ColumnCalcs.prototype.removeCalcs = function () {
 
 ColumnCalcs.prototype.initializeTopRow = function () {
        if (!this.topInitialized) {
-               // this.table.columnManager.headersElement.after(this.topElement);
                this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);
                this.topInitialized = true;
        }
@@ -10392,9 +10460,6 @@ ColumnCalcs.prototype.initializeBottomRow = function () {
 };
 
 ColumnCalcs.prototype.scrollHorizontal = function (left) {
-       var hozAdjust = 0,
-           scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth;
-
        if (this.botInitialized && this.botRow) {
                this.botRow.getElement().style.marginLeft = -left + "px";
        }
@@ -11323,12 +11388,15 @@ DataTree.prototype.getRows = function (rows) {
 
                if (row instanceof Row) {
 
+                       row.create();
+
                        config = row.modules.dataTree.children;
 
                        if (!config.index && config.children !== false) {
                                children = _this48.getChildren(row);
 
                                children.forEach(function (child) {
+                                       child.create();
                                        output.push(child);
                                });
                        }
@@ -11338,14 +11406,14 @@ DataTree.prototype.getRows = function (rows) {
        return output;
 };
 
-DataTree.prototype.getChildren = function (row) {
+DataTree.prototype.getChildren = function (row, allChildren) {
        var _this49 = this;
 
        var config = row.modules.dataTree,
            children = [],
            output = [];
 
-       if (config.children !== false && config.open) {
+       if (config.children !== false && (config.open || allChildren)) {
                if (!Array.isArray(config.children)) {
                        config.children = this.generateChildren(row);
                }
@@ -11387,8 +11455,12 @@ DataTree.prototype.generateChildren = function (row) {
 
        childArray.forEach(function (childData) {
                var childRow = new Row(childData || {}, _this50.table.rowManager);
+
+               childRow.create();
+
                childRow.modules.dataTree.index = row.modules.dataTree.index + 1;
                childRow.modules.dataTree.parent = row;
+
                if (childRow.modules.dataTree.children) {
                        childRow.modules.dataTree.open = _this50.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);
                }
@@ -12167,7 +12239,7 @@ Edit.prototype.cancelEdit = function () {
 //return a formatted value for a cell
 Edit.prototype.bindEditor = function (cell) {
        var self = this,
-           element = cell.getElement();
+           element = cell.getElement(true);
 
        element.setAttribute("tabindex", 0);
 
@@ -12230,7 +12302,13 @@ Edit.prototype.focusScrollAdjust = function (cell) {
                        rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);
                }
 
+               if (this.table.options.virtualDomHoz) {
+                       leftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);
+                       rightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);
+               }
+
                if (cellEl.offsetLeft < leftEdge) {
+
                        this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;
                } else {
                        if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {
@@ -12909,7 +12987,9 @@ Edit.prototype.editors = {
                    displayItems = [],
                    currentItems = [],
                    blurable = true,
-                   blockListShow = false;
+                   blockListShow = false,
+                   searchWord = "",
+                   searchWordTimeout = null;
 
                if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === "object" && !editorParams.values) {
                        console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object");
@@ -12935,21 +13015,11 @@ Edit.prototype.editors = {
                                                output[val] = true;
                                        }
                                });
-
-                               if (editorParams.sortValuesList) {
-                                       if (editorParams.sortValuesList == "asc") {
-                                               output = Object.keys(output).sort();
-                                       } else {
-                                               output = Object.keys(output).sort().reverse();
-                                       }
-                               } else {
-                                       output = Object.keys(output);
-                               }
                        } else {
                                console.warn("unable to find matching column to create select lookup list:", field);
                        }
 
-                       return output;
+                       return Object.keys(output);
                }
 
                function parseItems(inputValues, curentValues) {
@@ -13047,6 +13117,21 @@ Edit.prototype.editors = {
                                }
                        }
 
+                       if (editorParams.sortValuesList) {
+                               dataList.sort(function (a, b) {
+                                       return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
+                               });
+
+                               displayList.sort(function (a, b) {
+                                       return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
+                               });
+
+                               if (editorParams.sortValuesList !== "asc") {
+                                       dataList.reverse();
+                                       displayList.reverse();
+                               }
+                       }
+
                        dataItems = dataList;
                        displayItems = displayList;
 
@@ -13212,7 +13297,7 @@ Edit.prototype.editors = {
                                success(item.value);
                        }
 
-                       initialDisplayValue = input.value;
+                       initialDisplayValue = [item.value];
                }
 
                function chooseItems(silent) {
@@ -13226,7 +13311,7 @@ Edit.prototype.editors = {
                                output.push(item.value);
                        });
 
-                       initialDisplayValue = input.value;
+                       initialDisplayValue = output;
 
                        success(output);
                }
@@ -13302,6 +13387,26 @@ Edit.prototype.editors = {
                        self.table.rowManager.element.removeEventListener("scroll", cancelItem);
                }
 
+               function scrollTovalue(char) {
+
+                       clearTimeout(searchWordTimeout);
+
+                       var character = String.fromCharCode(event.keyCode).toLowerCase();
+                       searchWord += character.toLowerCase();
+
+                       var match = dataItems.find(function (item) {
+                               return typeof item.label !== "undefined" && item.label.toLowerCase().startsWith(searchWord);
+                       });
+
+                       if (match) {
+                               setCurrentItem(match, !multiselect);
+                       }
+
+                       searchWordTimeout = setTimeout(function () {
+                               searchWord = "";
+                       }, 800);
+               }
+
                //style input
                input.setAttribute("type", "text");
 
@@ -13411,6 +13516,10 @@ Edit.prototype.editors = {
                                        if (self.currentCell === false) {
                                                e.preventDefault();
                                        }
+
+                                       if (e.keyCode >= 38 && e.keyCode <= 90) {
+                                               scrollTovalue(e.keyCode);
+                                       }
                        }
                });
 
@@ -13732,6 +13841,8 @@ Edit.prototype.editors = {
 
                function showList() {
                        if (!listEl.parentNode) {
+
+                               console.log("show", initialDisplayValue);
                                while (listEl.firstChild) {
                                        listEl.removeChild(listEl.firstChild);
                                }var offset = Tabulator.prototype.helpers.elOffset(cellEl);
@@ -14065,7 +14176,9 @@ Edit.prototype.editors = {
 
                //set new value
                function updateValue() {
-                       var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min;
+                       var style = window.getComputedStyle(element, null);
+
+                       var calcVal = percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue("padding-left")) - parseInt(style.getPropertyValue("padding-right"))) / 100)) + min;
                        success(calcVal);
                        element.setAttribute("aria-valuenow", calcVal);
                        element.setAttribute("aria-label", value);
@@ -15026,7 +15139,7 @@ Filter.prototype.generateHeaderFilterElement = function (column, initialValue, r
 
                //set empty value function
                column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {
-                       return !value && value !== "0";
+                       return !value && value !== "0" && value !== 0;
                };
 
                filterElement = document.createElement("div");
@@ -15466,7 +15579,9 @@ Filter.prototype.clearHeaderFilter = function () {
        self.prevHeaderFilterChangeCheck = "{}";
 
        this.headerFilterColumns.forEach(function (column) {
-               column.modules.filter.value = null;
+               if (typeof column.modules.filter.value !== "undefined") {
+                       delete column.modules.filter.value;
+               }
                column.modules.filter.prevSuccess = undefined;
                self.reloadHeaderFilter(column);
        });
@@ -15967,8 +16082,18 @@ Format.prototype.formatters = {
 
        //image element
        image: function image(cell, formatterParams, onRendered) {
-               var el = document.createElement("img");
-               el.setAttribute("src", cell.getValue());
+               var el = document.createElement("img"),
+                   src = cell.getValue();
+
+               if (formatterParams.urlPrefix) {
+                       src = formatterParams.urlPrefix + cell.getValue();
+               }
+
+               if (formatterParams.urlSuffix) {
+                       src = src + formatterParams.urlSuffix;
+               }
+
+               el.setAttribute("src", src);
 
                switch (_typeof(formatterParams.height)) {
                        case "number":
@@ -16573,7 +16698,7 @@ FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
 
                if (allCells) {
                        column.cells.forEach(function (cell) {
-                               _this66.layoutElement(cell.getElement(), column);
+                               _this66.layoutElement(cell.getElement(true), column);
                        });
                }
        });
@@ -16595,7 +16720,7 @@ FrozenColumns.prototype.layoutColumnPosition = function (allCells) {
 
                if (allCells) {
                        column.cells.forEach(function (cell) {
-                               _this66.layoutElement(cell.getElement(), column);
+                               _this66.layoutElement(cell.getElement(true), column);
                        });
                }
        });
@@ -16652,7 +16777,7 @@ FrozenColumns.prototype.layoutRow = function (row) {
                var cell = row.getCell(column);
 
                if (cell) {
-                       _this67.layoutElement(cell.getElement(), column);
+                       _this67.layoutElement(cell.getElement(true), column);
                }
        });
 
@@ -16660,7 +16785,7 @@ FrozenColumns.prototype.layoutRow = function (row) {
                var cell = row.getCell(column);
 
                if (cell) {
-                       _this67.layoutElement(cell.getElement(), column);
+                       _this67.layoutElement(cell.getElement(true), column);
                }
        });
 };
@@ -18652,10 +18777,11 @@ Keybindings.prototype.actions = {
 Tabulator.prototype.registerModule("keybindings", Keybindings);
 var Menu = function Menu(table) {
        this.table = table; //hold Tabulator object
-       this.menuEl = false;
+       this.menuElements = [];
        this.blurEvent = this.hideMenu.bind(this);
        this.escEvent = this.escMenu.bind(this);
        this.nestedMenuBlock = false;
+       this.positionReversedX = false;
 };
 
 Menu.prototype.initializeColumnHeader = function (column) {
@@ -18679,11 +18805,10 @@ Menu.prototype.initializeColumnHeader = function (column) {
                headerMenuEl.innerHTML = "&vellip;";
 
                headerMenuEl.addEventListener("click", function (e) {
-                       var menu = typeof column.definition.headerMenu == "function" ? column.definition.headerMenu(column.getComponent(), e) : column.definition.headerMenu;
                        e.stopPropagation();
                        e.preventDefault();
 
-                       _this71.loadMenu(e, column, menu);
+                       _this71.LoadMenuEvent(column, column.definition.headerMenu, e);
                });
 
                column.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);
@@ -18691,7 +18816,7 @@ Menu.prototype.initializeColumnHeader = function (column) {
 };
 
 Menu.prototype.LoadMenuEvent = function (component, menu, e) {
-       menu = typeof menu == "function" ? menu(component.getComponent(), e) : menu;
+       menu = typeof menu == "function" ? menu.call(this.table, component.getComponent(), e) : menu;
 
        // if(component instanceof Cell){
        //      e.stopImmediatePropagation();
@@ -18732,12 +18857,12 @@ Menu.prototype.tapHold = function (component, menu) {
 
 Menu.prototype.initializeCell = function (cell) {
        if (cell.column.definition.contextMenu) {
-               cell.getElement().addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));
+               cell.getElement(true).addEventListener("contextmenu", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));
                this.tapHold(cell, cell.column.definition.contextMenu);
        }
 
        if (cell.column.definition.clickMenu) {
-               cell.getElement().addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));
+               cell.getElement(true).addEventListener("click", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));
        }
 };
 
@@ -18763,11 +18888,13 @@ Menu.prototype.initializeGroup = function (group) {
        }
 };
 
-Menu.prototype.loadMenu = function (e, component, menu) {
+Menu.prototype.loadMenu = function (e, component, menu, parentEl) {
        var _this73 = this;
 
-       var docHeight = Math.max(document.body.offsetHeight, window.innerHeight),
-           touch = !(e instanceof MouseEvent);
+       var touch = !(e instanceof MouseEvent);
+
+       var menuEl = document.createElement("div");
+       menuEl.classList.add("tabulator-menu");
 
        if (!touch) {
                e.preventDefault();
@@ -18778,26 +18905,26 @@ Menu.prototype.loadMenu = function (e, component, menu) {
                return;
        }
 
-       if (this.nestedMenuBlock) {
-               //abort if child menu already open
-               if (this.isOpen()) {
-                       return;
+       if (!parentEl) {
+               if (this.nestedMenuBlock) {
+                       //abort if child menu already open
+                       if (this.isOpen()) {
+                               return;
+                       }
+               } else {
+                       this.nestedMenuBlock = setTimeout(function () {
+                               _this73.nestedMenuBlock = false;
+                       }, 100);
                }
-       } else {
-               this.nestedMenuBlock = setTimeout(function () {
-                       _this73.nestedMenuBlock = false;
-               }, 100);
-       }
 
-       this.hideMenu();
-
-       this.menuEl = document.createElement("div");
-       this.menuEl.classList.add("tabulator-menu");
+               this.hideMenu();
+               this.menuElements = [];
+       }
 
        menu.forEach(function (item) {
-               var itemEl = document.createElement("div");
-               var label = item.label;
-               var disabled = item.disabled;
+               var itemEl = document.createElement("div"),
+                   label = item.label,
+                   disabled = item.disabled;
 
                if (item.separator) {
                        itemEl.classList.add("tabulator-menu-separator");
@@ -18805,7 +18932,7 @@ Menu.prototype.loadMenu = function (e, component, menu) {
                        itemEl.classList.add("tabulator-menu-item");
 
                        if (typeof label == "function") {
-                               label = label(component.getComponent());
+                               label = label.call(_this73.table, component.getComponent());
                        }
 
                        if (label instanceof Node) {
@@ -18815,7 +18942,7 @@ Menu.prototype.loadMenu = function (e, component, menu) {
                        }
 
                        if (typeof disabled == "function") {
-                               disabled = disabled(component.getComponent());
+                               disabled = disabled.call(_this73.table, component.getComponent());
                        }
 
                        if (disabled) {
@@ -18824,43 +18951,112 @@ Menu.prototype.loadMenu = function (e, component, menu) {
                                        e.stopPropagation();
                                });
                        } else {
-                               itemEl.addEventListener("click", function (e) {
-                                       _this73.hideMenu();
-                                       item.action(e, component.getComponent());
-                               });
+                               if (item.menu && item.menu.length) {
+                                       itemEl.addEventListener("click", function (e) {
+                                               e.stopPropagation();
+                                               _this73.hideOldSubMenus(menuEl);
+                                               _this73.loadMenu(e, component, item.menu, itemEl);
+                                       });
+                               } else {
+                                       if (item.action) {
+                                               itemEl.addEventListener("click", function (e) {
+                                                       item.action(e, component.getComponent());
+                                               });
+                                       }
+                               }
+                       }
+
+                       if (item.menu && item.menu.length) {
+                               itemEl.classList.add("tabulator-menu-item-submenu");
                        }
                }
 
-               _this73.menuEl.appendChild(itemEl);
+               menuEl.appendChild(itemEl);
        });
 
-       this.menuEl.style.top = (touch ? e.touches[0].pageY : e.pageY) + "px";
-       this.menuEl.style.left = (touch ? e.touches[0].pageX : e.pageX) + "px";
+       menuEl.addEventListener("click", function (e) {
+               _this73.hideMenu();
+       });
+
+       this.menuElements.push(menuEl);
+       this.positionMenu(menuEl, parentEl, touch, e);
+};
+
+Menu.prototype.hideOldSubMenus = function (menuEl) {
+       var index = this.menuElements.indexOf(menuEl);
+
+       if (index > -1) {
+               for (var _i13 = this.menuElements.length - 1; _i13 > index; _i13--) {
+                       var el = this.menuElements[_i13];
+
+                       if (el.parentNode) {
+                               el.parentNode.removeChild(el);
+                       }
+
+                       this.menuElements.pop();
+               }
+       }
+};
+
+Menu.prototype.positionMenu = function (element, parentEl, touch, e) {
+       var _this74 = this;
+
+       var docHeight = Math.max(document.body.offsetHeight, window.innerHeight),
+           x,
+           y,
+           parentOffset;
+
+       if (!parentEl) {
+               x = touch ? e.touches[0].pageX : e.pageX;
+               y = touch ? e.touches[0].pageY : e.pageY;
+
+               this.positionReversedX = false;
+       } else {
+               parentOffset = Tabulator.prototype.helpers.elOffset(parentEl);
+               x = parentOffset.left + parentEl.offsetWidth;
+               y = parentOffset.top - 1;
+       }
+
+       element.style.top = y + "px";
+       element.style.left = x + "px";
 
        setTimeout(function () {
-               _this73.table.rowManager.element.addEventListener("scroll", _this73.blurEvent);
-               document.body.addEventListener("click", _this73.blurEvent);
-               document.body.addEventListener("contextmenu", _this73.blurEvent);
-               document.body.addEventListener("keydown", _this73.escEvent);
+               _this74.table.rowManager.element.addEventListener("scroll", _this74.blurEvent);
+               document.body.addEventListener("click", _this74.blurEvent);
+               document.body.addEventListener("contextmenu", _this74.blurEvent);
+               window.addEventListener("resize", _this74.blurEvent);
+               document.body.addEventListener("keydown", _this74.escEvent);
        }, 100);
 
-       document.body.appendChild(this.menuEl);
+       document.body.appendChild(element);
 
-       //move menu to start on right edge if it is too close to the edge of the screen
-       if (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) {
-               this.menuEl.style.left = "";
-               this.menuEl.style.right = document.body.offsetWidth - e.pageX + "px";
+       //move menu to start on bottom edge if it is too close to the edge of the screen
+       if (y + element.offsetHeight >= docHeight) {
+               element.style.top = "";
+
+               if (parentEl) {
+                       element.style.bottom = docHeight - parentOffset.top - parentEl.offsetHeight - 1 + "px";
+               } else {
+                       element.style.bottom = docHeight - y + "px";
+               }
        }
 
-       //move menu to start on bottom edge if it is too close to the edge of the screen
-       if (e.pageY + this.menuEl.offsetHeight >= docHeight) {
-               this.menuEl.style.top = "";
-               this.menuEl.style.bottom = docHeight - e.pageY + "px";
+       //move menu to start on right edge if it is too close to the edge of the screen
+       if (x + element.offsetWidth >= document.body.offsetWidth || this.positionReversedX) {
+               element.style.left = "";
+
+               if (parentEl) {
+                       element.style.right = document.documentElement.offsetWidth - parentOffset.left + "px";
+               } else {
+                       element.style.right = document.documentElement.offsetWidth - x + "px";
+               }
+
+               this.positionReversedX = true;
        }
 };
 
 Menu.prototype.isOpen = function () {
-       return !!this.menuEl.parentNode;
+       return !!this.menuElements.length;
 };
 
 Menu.prototype.escMenu = function (e) {
@@ -18870,19 +19066,17 @@ Menu.prototype.escMenu = function (e) {
 };
 
 Menu.prototype.hideMenu = function () {
-       if (this.menuEl.parentNode) {
-               this.menuEl.parentNode.removeChild(this.menuEl);
-       }
-
-       if (this.escEvent) {
-               document.body.removeEventListener("keydown", this.escEvent);
-       }
+       this.menuElements.forEach(function (menuEl) {
+               if (menuEl.parentNode) {
+                       menuEl.parentNode.removeChild(menuEl);
+               }
+       });
 
-       if (this.blurEvent) {
-               document.body.removeEventListener("click", this.blurEvent);
-               document.body.removeEventListener("contextmenu", this.blurEvent);
-               this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
-       }
+       document.body.removeEventListener("keydown", this.escEvent);
+       document.body.removeEventListener("click", this.blurEvent);
+       document.body.removeEventListener("contextmenu", this.blurEvent);
+       window.removeEventListener("resize", this.blurEvent);
+       this.table.rowManager.element.removeEventListener("scroll", this.blurEvent);
 };
 
 //default accessors
@@ -19109,12 +19303,12 @@ MoveColumns.prototype.moveColumn = function (column, after) {
 
        if (after) {
                column.getCells().forEach(function (cell, i) {
-                       var cellEl = cell.getElement();
+                       var cellEl = cell.getElement(true);
                        cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);
                });
        } else {
                column.getCells().forEach(function (cell, i) {
-                       var cellEl = cell.getElement();
+                       var cellEl = cell.getElement(true);
                        cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);
                });
        }
@@ -19314,7 +19508,7 @@ MoveRows.prototype.initializeRow = function (row) {
 
 MoveRows.prototype.initializeCell = function (cell) {
        var self = this,
-           cellEl = cell.getElement();
+           cellEl = cell.getElement(true);
 
        cellEl.addEventListener("mousedown", function (e) {
                if (e.which === 1) {
@@ -19332,7 +19526,7 @@ MoveRows.prototype.initializeCell = function (cell) {
                }
        });
 
-       this.bindTouchEvents(cell.row, cell.getElement());
+       this.bindTouchEvents(cell.row, cellEl);
 };
 
 MoveRows.prototype.bindTouchEvents = function (row, element) {
@@ -19575,7 +19769,7 @@ MoveRows.prototype.elementRowDrop = function (e, element, row) {
 
 //establish connection with other tables
 MoveRows.prototype.connectToTables = function (row) {
-       var _this74 = this;
+       var _this75 = this;
 
        var connectionTables;
 
@@ -19599,15 +19793,15 @@ MoveRows.prototype.connectToTables = function (row) {
 
                this.connectionSelectorsElements.forEach(function (query) {
                        if (typeof query === "string") {
-                               _this74.connectionElements = _this74.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));
+                               _this75.connectionElements = _this75.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));
                        } else {
-                               _this74.connectionElements.push(query);
+                               _this75.connectionElements.push(query);
                        }
                });
 
                this.connectionElements.forEach(function (element) {
                        var dropEvent = function dropEvent(e) {
-                               _this74.elementRowDrop(e, element, _this74.moving);
+                               _this75.elementRowDrop(e, element, _this75.moving);
                        };
 
                        element.addEventListener("mouseup", dropEvent);
@@ -19723,8 +19917,6 @@ MoveRows.prototype.tableRowDrop = function (e, row) {
        var receiver = false,
            success = false;
 
-       console.trace("drop");
-
        e.stopImmediatePropagation();
 
        switch (_typeof(this.table.options.movableRowsReceiver)) {
@@ -19981,7 +20173,7 @@ Page.prototype.createElements = function () {
 };
 
 Page.prototype.generatePageSizeSelectList = function () {
-       var _this75 = this;
+       var _this76 = this;
 
        var pageSizes = [];
 
@@ -19999,8 +20191,8 @@ Page.prototype.generatePageSizeSelectList = function () {
                        if (this.pageSizes.indexOf(this.size) == -1) {
                                pageSizes = [];
 
-                               for (var _i13 = 1; _i13 < 5; _i13++) {
-                                       pageSizes.push(this.size * _i13);
+                               for (var _i14 = 1; _i14 < 5; _i14++) {
+                                       pageSizes.push(this.size * _i14);
                                }
 
                                this.pageSizes = pageSizes;
@@ -20016,14 +20208,14 @@ Page.prototype.generatePageSizeSelectList = function () {
                        itemEl.value = item;
 
                        if (item === true) {
-                               _this75.table.modules.localize.bind("pagination|all", function (value) {
+                               _this76.table.modules.localize.bind("pagination|all", function (value) {
                                        itemEl.innerHTML = value;
                                });
                        } else {
                                itemEl.innerHTML = item;
                        }
 
-                       _this75.pageSizeSelect.appendChild(itemEl);
+                       _this76.pageSizeSelect.appendChild(itemEl);
                });
 
                this.pageSizeSelect.value = this.size;
@@ -20217,7 +20409,7 @@ Page.prototype.setMaxPage = function (max) {
 
 //set current page number
 Page.prototype.setPage = function (page) {
-       var _this76 = this;
+       var _this77 = this;
 
        var self = this;
 
@@ -20243,9 +20435,9 @@ Page.prototype.setPage = function (page) {
 
                page = parseInt(page);
 
-               if (page > 0 && page <= _this76.max) {
-                       _this76.page = page;
-                       _this76.trigger().then(function () {
+               if (page > 0 && page <= _this77.max || _this77.mode !== "local") {
+                       _this77.page = page;
+                       _this77.trigger().then(function () {
                                resolve();
                        }).catch(function () {
                                reject();
@@ -20255,24 +20447,24 @@ Page.prototype.setPage = function (page) {
                                self.table.modules.persistence.save("page");
                        }
                } else {
-                       console.warn("Pagination Error - Requested page is out of range of 1 - " + _this76.max + ":", page);
+                       console.warn("Pagination Error - Requested page is out of range of 1 - " + _this77.max + ":", page);
                        reject();
                }
        });
 };
 
 Page.prototype.setPageToRow = function (row) {
-       var _this77 = this;
+       var _this78 = this;
 
        return new Promise(function (resolve, reject) {
 
-               var rows = _this77.table.rowManager.getDisplayRows(_this77.displayIndex - 1);
+               var rows = _this78.table.rowManager.getDisplayRows(_this78.displayIndex - 1);
                var index = rows.indexOf(row);
 
                if (index > -1) {
-                       var page = _this77.size === true ? 1 : Math.ceil((index + 1) / _this77.size);
+                       var page = _this78.size === true ? 1 : Math.ceil((index + 1) / _this78.size);
 
-                       _this77.setPage(page).then(function () {
+                       _this78.setPage(page).then(function () {
                                resolve();
                        }).catch(function () {
                                reject();
@@ -20330,9 +20522,9 @@ Page.prototype._setPageButtons = function () {
                self.nextBut.disabled = false;
        }
 
-       for (var _i14 = min; _i14 <= max; _i14++) {
-               if (_i14 > 0 && _i14 <= self.max) {
-                       self.pagesElement.appendChild(self._generatePageButton(_i14));
+       for (var _i15 = min; _i15 <= max; _i15++) {
+               if (_i15 > 0 && _i15 <= self.max) {
+                       self.pagesElement.appendChild(self._generatePageButton(_i15));
                }
        }
 
@@ -20368,19 +20560,19 @@ Page.prototype._generatePageButton = function (page) {
 
 //previous page
 Page.prototype.previousPage = function () {
-       var _this78 = this;
+       var _this79 = this;
 
        return new Promise(function (resolve, reject) {
-               if (_this78.page > 1) {
-                       _this78.page--;
-                       _this78.trigger().then(function () {
+               if (_this79.page > 1) {
+                       _this79.page--;
+                       _this79.trigger().then(function () {
                                resolve();
                        }).catch(function () {
                                reject();
                        });
 
-                       if (_this78.table.options.persistence && _this78.table.modExists("persistence", true) && _this78.table.modules.persistence.config.page) {
-                               _this78.table.modules.persistence.save("page");
+                       if (_this79.table.options.persistence && _this79.table.modExists("persistence", true) && _this79.table.modules.persistence.config.page) {
+                               _this79.table.modules.persistence.save("page");
                        }
                } else {
                        console.warn("Pagination Error - Previous page would be less than page 1:", 0);
@@ -20391,23 +20583,23 @@ Page.prototype.previousPage = function () {
 
 //next page
 Page.prototype.nextPage = function () {
-       var _this79 = this;
+       var _this80 = this;
 
        return new Promise(function (resolve, reject) {
-               if (_this79.page < _this79.max) {
-                       _this79.page++;
-                       _this79.trigger().then(function () {
+               if (_this80.page < _this80.max) {
+                       _this80.page++;
+                       _this80.trigger().then(function () {
                                resolve();
                        }).catch(function () {
                                reject();
                        });
 
-                       if (_this79.table.options.persistence && _this79.table.modExists("persistence", true) && _this79.table.modules.persistence.config.page) {
-                               _this79.table.modules.persistence.save("page");
+                       if (_this80.table.options.persistence && _this80.table.modExists("persistence", true) && _this80.table.modules.persistence.config.page) {
+                               _this80.table.modules.persistence.save("page");
                        }
                } else {
-                       if (!_this79.progressiveLoad) {
-                               console.warn("Pagination Error - Next page would be greater than maximum page of " + _this79.max + ":", _this79.max + 1);
+                       if (!_this80.progressiveLoad) {
+                               console.warn("Pagination Error - Next page would be greater than maximum page of " + _this80.max + ":", _this80.max + 1);
                        }
                        reject();
                }
@@ -20449,9 +20641,9 @@ Page.prototype.getRows = function (data) {
 
                this._setPageButtons();
 
-               for (var _i15 = start; _i15 < end; _i15++) {
-                       if (data[_i15]) {
-                               output.push(data[_i15]);
+               for (var _i16 = start; _i16 < end; _i16++) {
+                       if (data[_i16]) {
+                               output.push(data[_i16]);
                        }
                }
 
@@ -20465,28 +20657,28 @@ Page.prototype.getRows = function (data) {
 };
 
 Page.prototype.trigger = function () {
-       var _this80 = this;
+       var _this81 = this;
 
        var left;
 
        return new Promise(function (resolve, reject) {
 
-               switch (_this80.mode) {
+               switch (_this81.mode) {
                        case "local":
-                               left = _this80.table.rowManager.scrollLeft;
+                               left = _this81.table.rowManager.scrollLeft;
 
-                               _this80.table.rowManager.refreshActiveData("page");
-                               _this80.table.rowManager.scrollHorizontal(left);
+                               _this81.table.rowManager.refreshActiveData("page");
+                               _this81.table.rowManager.scrollHorizontal(left);
 
-                               _this80.table.options.pageLoaded.call(_this80.table, _this80.getPage());
+                               _this81.table.options.pageLoaded.call(_this81.table, _this81.getPage());
                                resolve();
                                break;
 
                        case "remote":
                        case "progressive_load":
                        case "progressive_scroll":
-                               _this80.table.modules.ajax.blockActiveRequest();
-                               _this80._getRemotePage().then(function () {
+                               _this81.table.modules.ajax.blockActiveRequest();
+                               _this81._getRemotePage().then(function () {
                                        resolve();
                                }).catch(function () {
                                        reject();
@@ -20494,14 +20686,14 @@ Page.prototype.trigger = function () {
                                break;
 
                        default:
-                               console.warn("Pagination Error - no such pagination mode:", _this80.mode);
+                               console.warn("Pagination Error - no such pagination mode:", _this81.mode);
                                reject();
                }
        });
 };
 
 Page.prototype._getRemotePage = function () {
-       var _this81 = this;
+       var _this82 = this;
 
        var self = this,
            oldParams,
@@ -20518,33 +20710,33 @@ Page.prototype._getRemotePage = function () {
                pageParams = self.table.modules.ajax.getParams();
 
                //configure request params
-               pageParams[_this81.dataSentNames.page] = self.page;
+               pageParams[_this82.dataSentNames.page] = self.page;
 
                //set page size if defined
-               if (_this81.size) {
-                       pageParams[_this81.dataSentNames.size] = _this81.size;
+               if (_this82.size) {
+                       pageParams[_this82.dataSentNames.size] = _this82.size;
                }
 
                //set sort data if defined
-               if (_this81.table.options.ajaxSorting && _this81.table.modExists("sort")) {
+               if (_this82.table.options.ajaxSorting && _this82.table.modExists("sort")) {
                        var sorters = self.table.modules.sort.getSort();
 
                        sorters.forEach(function (item) {
                                delete item.column;
                        });
 
-                       pageParams[_this81.dataSentNames.sorters] = sorters;
+                       pageParams[_this82.dataSentNames.sorters] = sorters;
                }
 
                //set filter data if defined
-               if (_this81.table.options.ajaxFiltering && _this81.table.modExists("filter")) {
+               if (_this82.table.options.ajaxFiltering && _this82.table.modExists("filter")) {
                        var filters = self.table.modules.filter.getFilters(true, true);
-                       pageParams[_this81.dataSentNames.filters] = filters;
+                       pageParams[_this82.dataSentNames.filters] = filters;
                }
 
                self.table.modules.ajax.setParams(pageParams);
 
-               self.table.modules.ajax.sendRequest(_this81.progressiveLoad).then(function (data) {
+               self.table.modules.ajax.sendRequest(_this82.progressiveLoad).then(function (data) {
                        self._parseRemoteData(data);
                        resolve();
                }).catch(function (e) {
@@ -20762,6 +20954,10 @@ Persistence.prototype.initialize = function () {
                        }
                }
        }
+
+       if (this.config.columns) {
+               this.table.options.columns = this.load("columns", this.table.options.columns);
+       }
 };
 
 Persistence.prototype.initializeColumn = function (column) {
@@ -20845,7 +21041,7 @@ Persistence.prototype.mergeDefinition = function (oldCols, newCols) {
                        }
 
                        keys.forEach(function (key) {
-                               if (typeof column[key] !== "undefined") {
+                               if (key !== "columns" && typeof column[key] !== "undefined") {
                                        from[key] = column[key];
                                }
                        });
@@ -21761,7 +21957,7 @@ var ResizeTable = function ResizeTable(table) {
 };
 
 ResizeTable.prototype.initialize = function (row) {
-       var _this82 = this;
+       var _this83 = this;
 
        var table = this.table,
            tableStyle;
@@ -21784,13 +21980,13 @@ ResizeTable.prototype.initialize = function (row) {
                                var nodeHeight = Math.floor(entry[0].contentRect.height);
                                var nodeWidth = Math.floor(entry[0].contentRect.width);
 
-                               if (_this82.tableHeight != nodeHeight || _this82.tableWidth != nodeWidth) {
-                                       _this82.tableHeight = nodeHeight;
-                                       _this82.tableWidth = nodeWidth;
+                               if (_this83.tableHeight != nodeHeight || _this83.tableWidth != nodeWidth) {
+                                       _this83.tableHeight = nodeHeight;
+                                       _this83.tableWidth = nodeWidth;
 
                                        if (table.element.parentNode) {
-                                               _this82.containerHeight = table.element.parentNode.clientHeight;
-                                               _this82.containerWidth = table.element.parentNode.clientWidth;
+                                               _this83.containerHeight = table.element.parentNode.clientHeight;
+                                               _this83.containerWidth = table.element.parentNode.clientWidth;
                                        }
 
                                        if (table.options.virtualDomHoz) {
@@ -21814,11 +22010,11 @@ ResizeTable.prototype.initialize = function (row) {
                                        var nodeHeight = Math.floor(entry[0].contentRect.height);
                                        var nodeWidth = Math.floor(entry[0].contentRect.width);
 
-                                       if (_this82.containerHeight != nodeHeight || _this82.containerWidth != nodeWidth) {
-                                               _this82.containerHeight = nodeHeight;
-                                               _this82.containerWidth = nodeWidth;
-                                               _this82.tableHeight = table.element.clientHeight;
-                                               _this82.tableWidth = table.element.clientWidth;
+                                       if (_this83.containerHeight != nodeHeight || _this83.containerWidth != nodeWidth) {
+                                               _this83.containerHeight = nodeHeight;
+                                               _this83.containerWidth = nodeWidth;
+                                               _this83.tableHeight = table.element.clientHeight;
+                                               _this83.tableWidth = table.element.clientWidth;
                                        }
 
                                        if (table.options.virtualDomHoz) {
@@ -21910,16 +22106,16 @@ ResponsiveLayout.prototype.initialize = function () {
        }
 
        //assign collapse column
-       for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i16 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+       for (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i17 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
                var _ref;
 
                if (_isArray) {
-                       if (_i16 >= _iterator.length) break;
-                       _ref = _iterator[_i16++];
+                       if (_i17 >= _iterator.length) break;
+                       _ref = _iterator[_i17++];
                } else {
-                       _i16 = _iterator.next();
-                       if (_i16.done) break;
-                       _ref = _i16.value;
+                       _i17 = _iterator.next();
+                       if (_i17.done) break;
+                       _ref = _i17.value;
                }
 
                var col = _ref;
@@ -22124,11 +22320,13 @@ ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
                                };
 
                                output.push({
+                                       field: column.field,
                                        title: column.definition.title,
                                        value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
                                });
                        } else {
                                output.push({
+                                       field: column.field,
                                        title: column.definition.title,
                                        value: value
                                });
@@ -22140,21 +22338,32 @@ ResponsiveLayout.prototype.generateCollapsedRowData = function (row) {
 };
 
 ResponsiveLayout.prototype.formatCollapsedData = function (data) {
-       var list = document.createElement("table"),
-           listContents = "";
+       var list = document.createElement("table");
 
        data.forEach(function (item) {
-               var div = document.createElement("div");
+               var row = document.createElement("tr");
+               var titleData = document.createElement("td");
+               var valueData = document.createElement("td");
+               var node_content;
+
+               var titleHighlight = document.createElement("strong");
+               titleData.appendChild(titleHighlight);
+               this.table.modules.localize.bind("columns|" + item.field, function (text) {
+                       titleHighlight.innerText = text || item.title;
+               });
 
                if (item.value instanceof Node) {
-                       div.appendChild(item.value);
-                       item.value = div.innerHTML;
+                       node_content = document.createElement("div");
+                       node_content.appendChild(item.value);
+                       valueData.appendChild(node_content);
+               } else {
+                       valueData.innerHTML = item.value;
                }
 
-               listContents += "<tr><td><strong>" + item.title + "</strong></td><td>" + item.value + "</td></tr>";
-       });
-
-       list.innerHTML = listContents;
+               row.appendChild(titleData);
+               row.appendChild(valueData);
+               list.appendChild(row);
+       }, this);
 
        return Object.keys(data).length ? list : "";
 };
@@ -22319,14 +22528,14 @@ SelectRow.prototype.toggleRow = function (row) {
 
 //select a number of rows
 SelectRow.prototype.selectRows = function (rows) {
-       var _this83 = this;
+       var _this84 = this;
 
        var rowMatch;
 
        switch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) {
                case "undefined":
                        this.table.rowManager.rows.forEach(function (row) {
-                               _this83._selectRow(row, true, true);
+                               _this84._selectRow(row, true, true);
                        });
 
                        this._rowSelectionChanged();
@@ -22340,7 +22549,7 @@ SelectRow.prototype.selectRows = function (rows) {
                                this._selectRow(rowMatch, true, true);
                        } else {
                                this.table.rowManager.getRows(rows).forEach(function (row) {
-                                       _this83._selectRow(row, true, true);
+                                       _this84._selectRow(row, true, true);
                                });
                        }
 
@@ -22350,7 +22559,7 @@ SelectRow.prototype.selectRows = function (rows) {
                default:
                        if (Array.isArray(rows)) {
                                rows.forEach(function (row) {
-                                       _this83._selectRow(row, true, true);
+                                       _this84._selectRow(row, true, true);
                                });
 
                                this._rowSelectionChanged();
@@ -22380,6 +22589,7 @@ SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
 
        if (row) {
                if (this.selectedRows.indexOf(row) == -1) {
+                       row.getElement().classList.add("tabulator-selected");
                        if (!row.modules.select) {
                                row.modules.select = {};
                        }
@@ -22388,7 +22598,6 @@ SelectRow.prototype._selectRow = function (rowInfo, silent, force) {
                        if (row.modules.select.checkboxEl) {
                                row.modules.select.checkboxEl.checked = true;
                        }
-                       row.getElement().classList.add("tabulator-selected");
 
                        this.selectedRows.push(row);
 
@@ -22422,7 +22631,7 @@ SelectRow.prototype.deselectRows = function (rows, silent) {
 
                rowCount = self.selectedRows.length;
 
-               for (var _i17 = 0; _i17 < rowCount; _i17++) {
+               for (var _i18 = 0; _i18 < rowCount; _i18++) {
                        self._deselectRow(self.selectedRows[0], true);
                }
 
@@ -22453,6 +22662,7 @@ SelectRow.prototype._deselectRow = function (rowInfo, silent) {
 
                if (index > -1) {
 
+                       row.getElement().classList.remove("tabulator-selected");
                        if (!row.modules.select) {
                                row.modules.select = {};
                        }
@@ -22461,7 +22671,6 @@ SelectRow.prototype._deselectRow = function (rowInfo, silent) {
                        if (row.modules.select.checkboxEl) {
                                row.modules.select.checkboxEl.checked = false;
                        }
-                       row.getElement().classList.remove("tabulator-selected");
                        self.selectedRows.splice(index, 1);
 
                        if (this.table.options.dataTreeSelectPropagate) {
@@ -22534,19 +22743,19 @@ SelectRow.prototype.registerHeaderSelectCheckbox = function (element) {
 };
 
 SelectRow.prototype.childRowSelection = function (row, select) {
-       var children = this.table.modules.dataTree.getChildren(row);
+       var children = this.table.modules.dataTree.getChildren(row, true);
 
        if (select) {
-               for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i18 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+               for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i19 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
                        var _ref2;
 
                        if (_isArray2) {
-                               if (_i18 >= _iterator2.length) break;
-                               _ref2 = _iterator2[_i18++];
+                               if (_i19 >= _iterator2.length) break;
+                               _ref2 = _iterator2[_i19++];
                        } else {
-                               _i18 = _iterator2.next();
-                               if (_i18.done) break;
-                               _ref2 = _i18.value;
+                               _i19 = _iterator2.next();
+                               if (_i19.done) break;
+                               _ref2 = _i19.value;
                        }
 
                        var child = _ref2;
@@ -22554,16 +22763,16 @@ SelectRow.prototype.childRowSelection = function (row, select) {
                        this._selectRow(child, true);
                }
        } else {
-               for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i19 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
+               for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i20 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
                        var _ref3;
 
                        if (_isArray3) {
-                               if (_i19 >= _iterator3.length) break;
-                               _ref3 = _iterator3[_i19++];
+                               if (_i20 >= _iterator3.length) break;
+                               _ref3 = _iterator3[_i20++];
                        } else {
-                               _i19 = _iterator3.next();
-                               if (_i19.done) break;
-                               _ref3 = _i19.value;
+                               _i20 = _iterator3.next();
+                               if (_i20.done) break;
+                               _ref3 = _i20.value;
                        }
 
                        var _child = _ref3;
@@ -22868,7 +23077,7 @@ Sort.prototype.setColumnHeader = function (column, dir) {
 
 //sort each item in sort list
 Sort.prototype._sortItems = function (data, sortList) {
-       var _this84 = this;
+       var _this85 = this;
 
        var sorterCount = sortList.length - 1;
 
@@ -22878,7 +23087,7 @@ Sort.prototype._sortItems = function (data, sortList) {
                for (var i = sorterCount; i >= 0; i--) {
                        var sortItem = sortList[i];
 
-                       result = _this84._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
+                       result = _this85._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);
 
                        if (result !== 0) {
                                break;
@@ -22903,8 +23112,8 @@ Sort.prototype._sortRow = function (a, b, column, dir, params) {
        a = typeof a !== "undefined" ? a : "";
        b = typeof b !== "undefined" ? b : "";
 
-       // el1Comp = el1.getComponent();
-       // el2Comp = el2.getComponent();
+       el1Comp = el1.getComponent();
+       el2Comp = el2.getComponent();
 
        return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
 };
index 983c998..3723ecb 100644 (file)
@@ -1,2 +1,2 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=e[n];if(t.call(i,s,n,e))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=e[n];if(t.call(i,s,n,e))return s;n++}}}),String.prototype.includes||(String.prototype.includes=function(t,e){if(t instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===e&&(e=0),-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;var n,s,a=0|e,r=Math.max(a>=0?a:i-Math.abs(a),0);for(;r<i;){if((n=o[r])===(s=t)||"number"==typeof n&&"number"==typeof s&&isNaN(n)&&isNaN(s))return!0;r++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}return o},writable:!0,configurable:!0});var ColumnManager=function(t){this.table=t,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};ColumnManager.prototype.createHeadersElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-headers"),t},ColumnManager.prototype.createHeaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-header"),this.table.options.headerVisible||t.classList.add("tabulator-header-hidden"),t},ColumnManager.prototype.initialize=function(){},ColumnManager.prototype.setRowManager=function(t){this.rowManager=t},ColumnManager.prototype.getElement=function(){return this.element},ColumnManager.prototype.getHeadersElement=function(){return this.headersElement},ColumnManager.prototype.scrollHorizontal=function(t){var e=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=t,t>o?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(t){var e,o,i=[],n=this.table.options.autoColumnsDefinitions;if(t&&t.length){for(var s in e=t[0]){var a={field:s,title:s},r=e[s];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}a.sorter=o,i.push(a)}if(n)switch(void 0===n?"undefined":_typeof(n)){case"function":this.table.options.columns=n.call(this.table,i);break;case"object":Array.isArray(n)?i.forEach((function(t){var e=n.find((function(e){return e.field===t.field}));e&&Object.assign(t,e)})):i.forEach((function(t){n[t.field]&&Object.assign(t,n[t.field])})),this.table.options.columns=i}else this.table.options.columns=i;this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach((function(t,e){o._addColumn(t)})),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),s=o?this.findColumnIndex(o):o;if(o&&s>-1){var a=this.columns.indexOf(o.getTopColumn()),r=o.getElement();e?(this.columns.splice(a,0,i),r.parentNode.insertBefore(n,r)):(this.columns.splice(a+1,0,i),r.parentNode.insertBefore(n,r.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach((function(t){t.reRegisterPosition()}))},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach((function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)})),t.columns.forEach((function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)})),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){return"object"!=(void 0===t?"undefined":_typeof(t))?this.columnsByField[t]||!1:t instanceof Column?t:t instanceof ColumnComponent?t._getSelf()||!1:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&this.columns.find((function(e){return e.element===t}))||!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach((function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])})),o},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getFirstVisibileColumn=function(t){return(t=this.columnsByIndex.findIndex((function(t){return t.visible})))>-1&&this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex((function(e){return t===e}))},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach((function(e,o){t(e,o)}))},ColumnManager.prototype.getDefinitions=function(t){var e=[];return this.columnsByIndex.forEach((function(o){(!t||t&&o.visible)&&e.push(o.getDefinition())})),e},ColumnManager.prototype.getDefinitionTree=function(){var t=[];return this.columns.forEach((function(e){t.push(e.getDefinition(!0))})),t},ColumnManager.prototype.getComponents=function(t){var e=[];return(t?this.columns:this.columnsByIndex).forEach((function(t){e.push(t.getComponent())})),e},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach((function(e){e.visible&&(t+=e.getWidth())})),t},ColumnManager.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var s,a=this,r=t.indexOf(e),l=[];r>-1&&(t.splice(r,1),(s=t.indexOf(o))>-1?i&&(s+=1):s=r,t.splice(s,0,e),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach((function(t){l=l.concat(a.table.modules.dataTree.getTreeChildren(t,!1,!0))})),(l=l.concat(this.table.rowManager.rows)).forEach((function(t){if(t.cells.length){var e=t.cells.splice(r,1)[0];t.cells.splice(s,0,e)}}))))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,s=0,a=0,r=t.getElement();return new Promise((function(l,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":a=-i.element.clientWidth/2;break;case"right":a=r.clientWidth-i.headersElement.clientWidth}if(!o&&(s=r.offsetLeft)>0&&s+r.offsetWidth<i.element.clientWidth)return!1;n=r.offsetLeft+a,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),l()}else console.warn("Scroll Error - Column not visible"),u("Scroll Error - Column not visible")}))},ColumnManager.prototype.generateCells=function(t){var e=[];return this.columnsByIndex.forEach((function(o){e.push(o.generateCell(t))})),e},ColumnManager.prototype.getFlexBaseWidth=function(){var t=this,e=t.table.element.clientWidth,o=0;return t.rowManager.element.scrollHeight>t.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(i){var n,s,a;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),a="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=a>s?a:s)})),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise((function(n,s){var a=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(!0),"fitColumns"!=i.table.modules.layout.getMode()&&a.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(),n(a)}))},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],(e=this.columnsByIndex.indexOf(t))>-1&&this.columnsByIndex.splice(e,1),(e=this.columns.indexOf(t))>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1||t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach((function(e){t.push(e.getComponent())})),t},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach((function(t){t.show()})):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach((function(t){t.hide()})):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach((function(e){t.push(e.getComponent())})),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},ColumnComponent.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},ColumnComponent.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(t){var e;return e=!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),e},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach((function(e,o){var n=new t(e,i);i.attachColumn(n)})),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach((function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)}))},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach((function(t){t.reRegisterPosition()})):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,(function(o){t.element.setAttribute("title",o||e.title)})):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",(function(e){t.setTooltip()}))},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",(function(t){n.headerClick(t,i.getComponent())})),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",(function(t){n.headerDblClick(t,i.getComponent())})),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",(function(t){n.headerContext(t,i.getComponent())})),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",(function(t){o=!0}),{passive:!0}),i.element.addEventListener("touchend",(function(t){o&&n.headerTap(t,i.getComponent()),o=!1}))),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",(function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout((function(){clearTimeout(t),t=null}),300)}))),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",(function(t){clearTimeout(e),e=setTimeout((function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())}),1e3)}),{passive:!0}),i.element.addEventListener("touchend",(function(t){clearTimeout(e),e=null}))),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=this.definition,o=this.table;(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(e.headerContextMenu||e.headerClickMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass)&&e.cssClass.split(" ").forEach((function(e){t.element.classList.add(e)}));e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(void 0===e.minWidth?this.table.options.columnMinWidth:parseInt(e.minWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign},Column.prototype._buildColumnHeaderContent=function(){this.definition,this.table;var t=document.createElement("div");return t.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),t.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),t},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",(function(t){t.stopPropagation(),n.focus()})),n.addEventListener("change",(function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())})),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,(function(t){n.value=t||e.title||"&nbsp;"})):n.value=e.title||"&nbsp;"}else e.field?o.modules.localize.bind("columns|"+e.field,(function(o){t._formatColumnHeaderTitle(i,o||e.title||"&nbsp;")})):t._formatColumnHeaderTitle(i,e.title||"&nbsp;");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,s,a,r=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),a=function(t){r.titleFormatterRendered=t},s={getValue:function(){return e},getElement:function(){return t}},n="function"==typeof(n=this.definition.titleFormatterParams||{})?n():n,void 0===(i=o.call(this.table.modules.format,s,n,a))?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){var t=this;(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((function(e){t.element.classList.add(e)}));(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign,this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,s=0;s<n&&(e=o=o[i[s]],o);s++);return e},Column.prototype._setFlatData=function(t,e){this.field&&(t[this.field]=e)},Column.prototype._setNestedData=function(t,e){for(var o=t,i=this.fieldStructure,n=i.length,s=0;s<n;s++)if(s==n-1)o[i[s]]=e;else{if(!o[i[s]]){if(void 0===e)break;o[i[s]]={}}o=o[i[s]]}},Column.prototype.attachColumn=function(t){this.groupElement?(this.columns.push(t),this.groupElement.appendChild(t.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},Column.prototype.verticalAlign=function(t,e){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:e||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===t||(this.element.style.paddingTop="bottom"===t?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach((function(e){e.verticalAlign(t)}))},Column.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach((function(t){t.clearVerticalAlign()}))},Column.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},Column.prototype.getElement=function(){return this.element},Column.prototype.getGroupElement=function(){return this.groupElement},Column.prototype.getField=function(){return this.field},Column.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},Column.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},Column.prototype.getColumns=function(){return this.columns},Column.prototype.getCells=function(){return this.cells},Column.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},Column.prototype.getDefinition=function(t){var e=[];return this.isGroup&&t&&(this.columns.forEach((function(t){e.push(t.getDefinition(!0))})),this.definition.columns=e),this.definition},Column.prototype.checkColumnVisibility=function(){var t=!1;this.columns.forEach((function(e){e.visible&&(t=!0)})),t?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},Column.prototype.show=function(t,e){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(t){t.show()})),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},Column.prototype.hide=function(t,e){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(t){t.hide()})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},Column.prototype.matchChildWidths=function(){var t=0;this.contentElement&&this.columns.length&&(this.columns.forEach((function(e){e.visible&&(t+=e.getWidth())})),this.contentElement.style.maxWidth=t-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.removeChild=function(t){var e=this.columns.indexOf(t);e>-1&&this.columns.splice(e,1),this.columns.length||this.delete()},Column.prototype.setWidth=function(t){this.widthFixed=!0,this.setWidthActual(t)},Column.prototype.setWidthActual=function(t){isNaN(t)&&(t=Math.floor(this.table.element.clientWidth/100*parseInt(t))),t=Math.max(this.minWidth,t),this.width=t,this.widthStyled=t?t+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(t){t.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},Column.prototype.checkCellHeights=function(){var t=[];this.cells.forEach((function(e){e.row.heightInitialized&&(null!==e.row.getElement().offsetParent?(t.push(e.row),e.row.clearCellHeight()):e.row.heightInitialized=!1)})),t.forEach((function(t){t.calcHeight()})),t.forEach((function(t){t.setCellHeight()}))},Column.prototype.getWidth=function(){var t=0;return this.isGroup?this.columns.forEach((function(e){e.visible&&(t+=e.getWidth())})):t=this.width,t},Column.prototype.getHeight=function(){return this.element.offsetHeight},Column.prototype.setMinWidth=function(t){this.minWidth=t,this.minWidthStyled=t?t+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(t){t.setMinWidth()}))},Column.prototype.delete=function(){var t=this;return new Promise((function(e,o){t.isGroup&&t.columns.forEach((function(t){t.delete()})),t.table.modExists("edit")&&t.table.modules.edit.currentCell.column===t&&t.table.modules.edit.cancelEdit();for(var i=t.cells.length,n=0;n<i;n++)t.cells[0].delete();t.element.parentNode&&t.element.parentNode.removeChild(t.element),t.element=!1,t.contentElement=!1,t.titleElement=!1,t.groupElement=!1,t.parent.isGroup&&t.parent.removeChild(t),t.table.columnManager.deregisterColumn(t),t.table.options.virtualDomHoz&&t.table.vdomHoz.reinitialize(!0),e()}))},Column.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},Column.prototype.validate=function(){var t=[];return this.cells.forEach((function(e){e.validate()||t.push(e.getComponent())})),!t.length||t},Column.prototype.generateCell=function(t){var e=new Cell(this,t);return this.cells.push(e),e},Column.prototype.nextColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._nextVisibleColumn(t+1)},Column.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},Column.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},Column.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},Column.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){this.widthFixed||(this.element.style.width="",this.cells.forEach((function(t){t.clearWidth()})));var t=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((function(e){var o=e.getWidth();o>t&&(t=o)})),t&&this.setWidthActual(t+1))},Column.prototype.updateDefinition=function(t){var e=this;return new Promise((function(o,i){var n;e.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then((function(t){n.field==e.field&&(e.field=!1),e.delete().then((function(){o(t.getComponent())})).catch((function(t){i(t)}))})).catch((function(t){i(t)})))}))},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",(function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e})),"virtual"===this.renderMode&&t.element.addEventListener("scroll",(function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e}))},RowManager.prototype.findRow=function(t){var e=this;return"object"!=(void 0===t?"undefined":_typeof(t))?null!=t&&(e.rows.find((function(o){return o.data[e.table.options.index]==t}))||!1):t instanceof Row?t:t instanceof RowComponent?t._getSelf()||!1:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&e.rows.find((function(e){return e.getElement()===t}))||!1},RowManager.prototype.getRowFromDataObject=function(t){return this.rows.find((function(e){return e.data===t}))||!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,s=this.getDisplayRows().indexOf(t),a=t.getElement(),r=0;return new Promise((function(t,l){if(s>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(a).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(a)&&(r=Tabulator.prototype.helpers.elOffset(a).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&r<n.element.clientHeight-a.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=Tabulator.prototype.helpers.elOffset(a).top-Tabulator.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(s,!0)}switch(e){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(a.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-a.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-a.offsetTop)+a.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+a.offsetHeight}t()}else console.warn("Scroll Error - Row not visible"),l("Scroll Error - Row not visible")}))},RowManager.prototype.setData=function(t,e,o){var i=this,n=this;return new Promise((function(s,a){e&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(t,!0):i.reRenderInPosition((function(){n._setDataActual(t)})):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(t),i.resetScroll(),i._setDataActual(t)),s()}))},RowManager.prototype._setDataActual=function(t,e){var o=this;o.table.options.dataLoading.call(this.table,t),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(t)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(t),t.forEach((function(t,e){if(t&&"object"===(void 0===t?"undefined":_typeof(t))){var i=new Row(t,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",t)})),o.refreshActiveData(!1,!1,e),o.table.options.dataLoaded.call(this.table,t)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===t?"undefined":_typeof(t),"\nData:     ",t)},RowManager.prototype._wipeElements=function(){this.rows.forEach((function(t){t.wipe()})),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()},RowManager.prototype.deleteRow=function(t,e){var o=this.rows.indexOf(t),i=this.activeRows.indexOf(t);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator((function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)})),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,s=[];return new Promise((function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach((function(t,i){var a=n.addRow(t,e,o,!0);s.push(a)})),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(s)}))},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,s,a=t instanceof Row?t:new Row(t||{},this),r=this.findAddRowPos(e),l=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),r?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],r=!1):s.length&&(o=s[s.length-1],r=!(s.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(a);var u=a.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?r?u[0]!==a&&(o=u[0],this._moveRowInArray(a.getGroup().rows,a,o,!r)):u[u.length-1]!==a&&(o=u[u.length-1],this._moveRowInArray(a.getGroup().rows,a,o,!r)):this._moveRowInArray(a.getGroup().rows,a,o,!r))}return o&&(l=this.rows.indexOf(o)),o&&l>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator((function(t){var e=t.indexOf(o);e>-1&&t.splice(r?e:e+1,0,a)})),n>-1&&this.activeRows.splice(r?n:n+1,0,a),this.rows.splice(r?l:l+1,0,a)):r?(this.displayRowIterator((function(t){t.unshift(a)})),this.activeRows.unshift(a),this.rows.unshift(a)):(this.displayRowIterator((function(t){t.push(a)})),this.activeRows.push(a),this.rows.push(a)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,a.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),i||this.reRenderInPosition(),a},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator((function(n){i._moveRowInArray(n,t,e,o)})),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof Group&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),s=t.getGroup();n===s?this._moveRowInArray(n.rows,t,e,o):(s&&s.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,s,a;if(e!==o&&((n=t.indexOf(e))>-1&&(t.splice(n,1),(s=t.indexOf(o))>-1?i?t.splice(s+1,0,e):t.splice(s,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){a=s>n?s:n+1;for(var r=n<s?n:s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof Row&&"row"==i.type?i:this.nextDisplayRow(i,e)},RowManager.prototype.prevDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!e||!i||i instanceof Row&&"row"==i.type?i:this.prevDisplayRow(i,e)},RowManager.prototype.findRowIndex=function(t,e){var o;return!!((t=this.findRow(t))&&(o=e.indexOf(t))>-1)&&o},RowManager.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach((function(t){"row"==t.type&&o.push(t.getData(e||"data"))})),o},RowManager.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach((function(t){e.push(t.getComponent())})),e},RowManager.prototype.getDataCount=function(t){return this.getRows(t).length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach((function(t){delete t.column})),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then((function(e){t._setDataActual(e,!0)})).catch((function(t){}))},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then((function(){})).catch((function(){}))):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then((function(){})).catch((function(){}))):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this.table,s=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)(!this.redrawBlockRestoreConfig||s.indexOf(t)<s.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:t,skipStage:e,renderInPosition:o});else{switch(this.table.modExists("edit")&&this.table.modules.edit.cancelEdit(),t||(t="all"),n.options.selectable&&!n.options.selectablePersistence&&n.modExists("selectRow")&&n.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:n.modExists("filter")?this.setActiveRows(n.modules.filter.filter(this.rows)):this.setActiveRows(this.rows.slice(0));case"sort":e?e=!1:n.modExists("sort")&&n.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&n.modules.frozenRows.isFrozen()&&(n.modules.frozenRows.getDisplayIndex()||n.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=n.modules.frozenRows.getDisplayIndex(),!0!==(i=this.setDisplayRows(n.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&n.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:n.options.groupBy&&n.modExists("groupRows")&&(n.modules.groupRows.getDisplayIndex()||n.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=n.modules.groupRows.getDisplayIndex(),!0!==(i=this.setDisplayRows(n.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&n.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:n.options.dataTree&&n.modExists("dataTree")&&(n.modules.dataTree.getDisplayIndex()||n.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=n.modules.dataTree.getDisplayIndex(),!0!==(i=this.setDisplayRows(n.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&n.modules.dataTree.setDisplayIndex(i)),n.options.pagination&&n.modExists("page")&&!o&&"local"==n.modules.page.getMode()&&n.modules.page.reset();case"page":e?e=!1:n.options.pagination&&n.modExists("page")&&(n.modules.page.getDisplayIndex()||n.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=n.modules.page.getDisplayIndex(),"local"==n.modules.page.getMode()&&n.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=this.setDisplayRows(n.modules.page.getRows(this.getDisplayRows(i-1)),i))&&n.modules.page.setDisplayIndex(i))}Tabulator.prototype.helpers.elVisible(this.element)&&(o?this.reRenderInPosition():("all"===t&&this.table.options.virtualDomHoz&&this.table.vdomHoz.dataChange(),this.renderTable(),n.options.layoutColumnsOnNewData&&this.table.columnManager.redraw(!0))),n.modExists("columnCalcs")&&n.modules.columnCalcs.recalc(this.activeRows)}},RowManager.prototype.regenerateRowNumbers=function(){var t=this;this.rowNumColumn&&this.activeRows.forEach((function(e){var o=e.getCell(t.rowNumColumn);o&&o._generateContents()}))},RowManager.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},RowManager.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},RowManager.prototype.getNextDisplayIndex=function(){return this.displayRows.length},RowManager.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},RowManager.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},RowManager.prototype.getVisibleRows=function(t){var e=this.element.scrollTop,o=this.element.clientHeight+e,i=!1,n=0,s=0,a=this.getDisplayRows();if(t){this.getDisplayRows();for(var r=this.vDomTop;r<=this.vDomBottom;r++)if(a[r])if(i){if(!(o-a[r].getElement().offsetTop>=0))break;s=r}else if(e-a[r].getElement().offsetTop>=0)n=r;else{if(i=!0,!(o-a[r].getElement().offsetTop>=0))break;s=r}}else n=this.vDomTop,s=this.vDomBottom;return a.slice(n,s+1)},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;case"selected":e=this.table.modules.selectRow.selectedRows;break;default:e=this.rows}return e},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a]){var r=e-s[a].getElement().offsetTop;if(!(!1===i||Math.abs(r)<i))break;i=r,o=a}t&&t(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),t&&t()},RowManager.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},RowManager.prototype.getRenderMode=function(){return this.renderMode},RowManager.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},RowManager.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},RowManager.prototype.checkClassicModeGroupHeaderWidth=function(){var t=this,e=this.tableElement,o=!0;t.getDisplayRows().forEach((function(i,n){t.styleRow(i,n),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)})),e.style.minWidth=o?t.table.columnManager.getWidth()+"px":""},RowManager.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"},RowManager.prototype._clearVirtualDom=function(){var t=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);t.firstChild;)t.removeChild(t.firstChild);t.style.paddingTop="",t.style.paddingBottom="",t.style.minWidth="",t.style.minHeight="",t.style.display="",t.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},RowManager.prototype.styleRow=function(t,e){var o=t.getElement();e%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},RowManager.prototype._virtualRenderFill=function(t,e,o){var i=this.tableElement,n=this.element,s=0,a=0,r=0,l=0,u=!0,c=this.getDisplayRows();if(o=o||0,t=t||0){for(;i.firstChild;)i.removeChild(i.firstChild);var d=(this.displayRowsCount-t+1)*this.vDomRowHeight;d<this.height&&(t-=Math.ceil((this.height-d)/this.vDomRowHeight))<0&&(t=0),t-=s=Math.min(Math.max(Math.floor(this.vDomWindowBuffer/this.vDomRowHeight),this.vDomWindowMinMarginRows),t)}else this._clearVirtualDom();if(this.displayRowsCount&&Tabulator.prototype.helpers.elVisible(this.element)){for(this.vDomTop=t,this.vDomBottom=t-1;(a<=this.height+this.vDomWindowBuffer||l<this.vDomWindowMinTotalRows)&&this.vDomBottom<this.displayRowsCount-1;){var h,p=this.vDomBottom+1,m=c[p];this.styleRow(m,p),i.appendChild(m.getElement()),m.initialize(),m.heightInitialized||m.normalizeHeight(!0),h=m.getHeight(),l<s?r+=h:a+=h,h>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*h),"group"!==m.type&&(u=!1),this.vDomBottom++,l++}t?(this.vDomTopPad=e?this.vDomRowHeight*this.vDomTop+o:this.scrollTop-r,this.vDomBottomPad=this.vDomBottom==this.displayRowsCount-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-a-r,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((a+r)/l),this.vDomBottomPad=this.vDomRowHeight*(this.displayRowsCount-this.vDomBottom-1),this.vDomScrollHeight=r+a+this.vDomBottomPad-this.height),i.style.paddingTop=this.vDomTopPad+"px",i.style.paddingBottom=this.vDomBottomPad+"px",e&&(this.scrollTop=this.vDomTopPad+r+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,n.scrollTop=this.scrollTop,i.style.minWidth=u?this.table.columnManager.getWidth()+"px":"",this.table.options.groupBy&&"fitDataFill"!=this.table.modules.layout.getMode()&&this.displayRowsCount==this.table.modules.groupRows.countGroups()&&(this.tableElement.style.minWidth=this.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],a=s.getHeight()||this.vDomRowHeight;t>=a&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=a,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=a,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),e<this.vDomMaxRenderChain&&this.vDomTop&&t>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,s=i[n],a=s.getHeight()||this.vDomRowHeight;t>=a&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=a,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=a,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),e<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&t>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach((function(t){t.calcHeight()})),t.forEach((function(t){t.setCellHeight()})),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach((function(t){t.normalizeHeight()}))},RowManager.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=Math.floor(this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=Math.floor(this.table.element.clientHeight)-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||Math.floor(e)==Math.floor(this.element.clientHeight)||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach((function(t){t.reinitialize(!0)}))},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var VDomHoz=function(t){this.table=t,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()};VDomHoz.prototype.compatabilityCheck=function(){var t=this.table.options,e=!0;return"fitDataTable"==t.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),e=!1),t.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),e=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),e=!1),t.columns&&t.columns.find((function(t){return t.frozen}))&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),e=!1),e||(t.virtualDomHoz=!1),e},VDomHoz.prototype.initialize=function(){var t=this;this.holderEl.addEventListener("scroll",(function(){var e=t.holderEl.scrollLeft;t.scrollLeft!=e&&(t.scrollLeft=e,t.scroll(e-(t.vDomScrollPosLeft+t.window)))}))},VDomHoz.prototype.deinitialize=function(){this.initialized=!1},VDomHoz.prototype.clear=function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0},VDomHoz.prototype.dataChange=function(){var t,e,o=!1,i=0,n=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach((function(t){!t.definition.width&&t.visible&&(o=!0)})),o&&o&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,t=this.table.options.groupBy?this.table.modules.groupRows.getGroups(!1)[0].getRows(!1)[0]:this.table.rowManager.getDisplayRows()[0])){e=t.getElement(),t.generateCells(),this.element.appendChild(e);for(n=0;n<t.cells.length;n++){var s=t.cells[n];if(e.appendChild(s.getElement()),s.column.reinitializeWidth(),(i+=s.column.getWidth())>this.vDomScrollPosRight)break}for(e.parentNode.removeChild(e),this.fitDataColAvg=Math.floor(i/(n+1));n<this.table.columnManager.columnsByIndex.length;n++)this.table.columnManager.columnsByIndex[n].setWidth(this.fitDataColAvg);this.reinitialize(!1,!0)}}else"fitColumns"===this.table.options.layout&&(this.table.modules.layout.layout(),this.table.vdomHoz.reinitialize(!1,!0))},VDomHoz.prototype.fitDataLayoutOverride=function(){for(var t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()},VDomHoz.prototype.reinitialize=function(t,e){var o=this,i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!t||this.initialized){this.clear(),this.scrollLeft=this.holderEl.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window;var n=0;this.table.columnManager.columnsByIndex.forEach((function(t){var e={};if(t.visible){var i=t.getWidth();e.leftPos=n,e.rightPos=n+i,n+i>o.vDomScrollPosLeft&&n<o.vDomScrollPosRight?(-1==o.leftCol&&(o.leftCol=o.columns.length,o.vDomPadLeft=n),o.rightCol=o.columns.length):-1!==o.leftCol&&(o.vDomPadRight+=i),o.columns.push(t),t.modules.vdomHoz=e,n+=i}})),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.element.style.paddingRight=this.vDomPadRight+"px",this.initialized=!0,e||t&&!this.reinitChanged(i)||this.renitializeRows(),this.holderEl.scrollLeft=this.scrollLeft}},VDomHoz.prototype.reinitChanged=function(t){var e=this,o=!0;return t.cols.length!==this.columns.length||t.leftCol!==this.leftCol||t.rightCol!==this.rightCol||(t.cols.forEach((function(t,i){t!==e.columns[i]&&(o=!1)})),!o)},VDomHoz.prototype.renitializeRows=function(){var t=this;this.table.rowManager.getVisibleRows().forEach((function(e){t.reinitializeRow(e,!0)}))},VDomHoz.prototype.scroll=function(t){this.vDomScrollPosLeft+=t,this.vDomScrollPosRight+=t,t>.8*this.holderEl.clientWidth?this.reinitialize():t>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())},VDomHoz.prototype.colPositionAdjust=function(t,e,o){for(var i=t;i<e;i++){var n=this.columns[i];n.modules.vdomHoz.leftPos-=o,n.modules.vdomHoz.rightPos-=o}},VDomHoz.prototype.addColRight=function(){var t,e,o=this.columns[this.rightCol+1];o&&o.modules.vdomHoz.leftPos<=this.vDomScrollPosRight&&(this.table.rowManager.getVisibleRows().forEach((function(t){if("group"!==t.type){var e=t.getCell(o);t.getElement().appendChild(e.getElement()),e.cellRendered()}})),this.fitDataColAvg&&(t=o.getWidth())===this.fitDataColAvg&&(o.reinitializeWidth(),(e=t-o.getWidth())&&(o.modules.vdomHoz.rightPos-=e,this.colPositionAdjust(this.rightCol+1,this.columns.length,e))),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=o.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())},VDomHoz.prototype.addColLeft=function(){var t=this.columns[this.leftCol-1];t&&t.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft&&(this.table.rowManager.getVisibleRows().forEach((function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().prepend(o.getElement()),o.cellRendered()}})),this.leftCol?this.vDomPadLeft-=t.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft())},VDomHoz.prototype.removeColRight=function(t){var e;(t=this.columns[this.rightCol])&&t.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(e=this.table.rowManager.getVisibleRows(),t.modules.vdomHoz.visible=!1,e.forEach((function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}})),this.vDomPadRight+=t.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())},VDomHoz.prototype.removeColLeft=function(){var t=this.columns[this.leftCol];t&&t.modules.vdomHoz.rightPos<this.vDomScrollPosLeft&&(this.table.rowManager.getVisibleRows().forEach((function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}})),this.vDomPadLeft+=t.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())},VDomHoz.prototype.initializeRow=function(t){if("group"!==t.type){t.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(var e=this.leftCol;e<=this.rightCol;e++){var o=this.columns[e];if(o.visible){var i=t.getCell(o);t.getElement().appendChild(i.getElement()),i.cellRendered()}}}},VDomHoz.prototype.reinitializeRow=function(t,e){if("group"!==t.type&&(e||!t.modules.vdomHoz||t.modules.vdomHoz.leftCol!==this.leftCol||t.modules.vdomHoz.rightCol!==this.rightCol)){for(var o=t.getElement();o.firstChild;)o.removeChild(o.firstChild);this.initializeRow(t)}};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach((function(e){t.push(e.getComponent())})),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(t,e){this._row.moveToRow(t,e)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){return!!this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)},RowComponent.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},RowComponent.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var Row=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(t)};Row.prototype.create=function(){this.created||(this.created=!0,this.generateElement())},Row.prototype.createElement=function(){var t=document.createElement("div");t.classList.add("tabulator-row"),t.setAttribute("role","row"),this.element=t},Row.prototype.getElement=function(){return this.create(),this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var t,e,o,i=this;this.createElement(),!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),(i.table.options.rowContextMenu||i.table.options.rowClickMenu)&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",(function(t){i.table.options.rowClick(t,i.getComponent())})),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",(function(t){i.table.options.rowDblClick(t,i.getComponent())})),i.table.options.rowContext&&i.element.addEventListener("contextmenu",(function(t){i.table.options.rowContext(t,i.getComponent())})),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",(function(t){i.table.options.rowMouseEnter(t,i.getComponent())})),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",(function(t){i.table.options.rowMouseLeave(t,i.getComponent())})),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",(function(t){i.table.options.rowMouseOver(t,i.getComponent())})),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",(function(t){i.table.options.rowMouseOut(t,i.getComponent())})),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",(function(t){i.table.options.rowMouseMove(t,i.getComponent())})),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",(function(t){o=!0}),{passive:!0}),i.element.addEventListener("touchend",(function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1}))),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",(function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout((function(){clearTimeout(t),t=null}),300)}))),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",(function(t){clearTimeout(e),e=setTimeout((function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())}),1e3)}),{passive:!0}),i.element.addEventListener("touchend",(function(t){clearTimeout(e),e=null})))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(this.create(),!this.initialized||t){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach((function(t){e.element.appendChild(t.getElement()),t.cellRendered()})),t&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(t){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach((function(t){t.reinitialize(!0)}))},Row.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(t){var o=t.getHeight();o>e&&(e=o)})),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach((function(t){t.setHeight()})),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach((function(t){t.clearHeight()}))},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(t){var e,o=this,i=this.element&&Tabulator.prototype.helpers.elVisible(this.element),n={};return new Promise((function(s,a){for(var r in"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t,e)o.data[r]=e[r];for(var r in o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock(),t){o.table.columnManager.getColumnsByFieldRoot(r).forEach((function(t){var n=o.getCell(t.getField());if(n){var s=t.getFieldValue(e);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}}))}o.table.options.groupUpdateOnCellEdit&&o.table.options.groupBy&&o.table.modExists("groupRows")&&o.table.modules.groupRows.reassignRowToGroup(o.row),i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),i&&(o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0))),o.table.options.rowUpdated.call(o.table,o.getComponent()),o.table.options.dataChanged&&o.table.options.dataChanged.call(o.table,o.table.rowManager.getData()),s()}))},Row.prototype.getData=function(t){return t&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,t):this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find((function(e){return e.column===t}))},Row.prototype.getCellIndex=function(t){return this.cells.findIndex((function(e){return e===t}))},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t<this.cells.length-1)for(var o=t+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){e=i;break}}}return e},Row.prototype.findPrevEditableCell=function(t){var e=!1;if(t>0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},Row.prototype.validate=function(){var t=[];return this.cells.forEach((function(e){e.validate()||t.push(e.getComponent())})),!t.length||t},Row.prototype.delete=function(){var t=this;return new Promise((function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(i=(n=t.getGroup().rows).indexOf(t))&&(i=n[i-1]):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()}))},Row.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.detatchModules=function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e<t;e++)this.cells[0].delete()},Row.prototype.wipe=function(){if(this.detatchModules(),this.deleteCells(),this.element){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.parentNode&&this.element.parentNode.removeChild(this.element)}this.element=!1,this.modules={}},Row.prototype.getGroup=function(){return this.modules.group||!1},Row.prototype.getComponent=function(){return this.component||(this.component=new RowComponent(this)),this.component};var CellComponent=function(t){this._cell=t};CellComponent.prototype.getValue=function(){return this._cell.getValue()},CellComponent.prototype.getOldValue=function(){return this._cell.getOldValue()},CellComponent.prototype.getInitialValue=function(){return this._cell.initialValue},CellComponent.prototype.getElement=function(){return this._cell.getElement()},CellComponent.prototype.getRow=function(){return this._cell.row.getComponent()},CellComponent.prototype.getData=function(){return this._cell.row.getData()},CellComponent.prototype.getField=function(){return this._cell.column.getField()},CellComponent.prototype.getColumn=function(){return this._cell.column.getComponent()},CellComponent.prototype.setValue=function(t,e){void 0===e&&(e=!0),this._cell.setValue(t,e)},CellComponent.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},CellComponent.prototype.restoreInitialValue=function(){this._cell.setValueActual(this._cell.initialValue)},CellComponent.prototype.edit=function(t){return this._cell.edit(t)},CellComponent.prototype.cancelEdit=function(){this._cell.cancelEdit()},CellComponent.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},CellComponent.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},CellComponent.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},CellComponent.prototype.validate=function(){return this._cell.validate()},CellComponent.prototype.clearValidation=function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},CellComponent.prototype.nav=function(){return this._cell.nav()},CellComponent.prototype.checkHeight=function(){this._cell.checkHeight()},CellComponent.prototype.getTable=function(){return this._cell.table},CellComponent.prototype._getSelf=function(){return this._cell};var Cell=function(t,e){this.table=t.table,this.column=t,this.row=e,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()};Cell.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value},Cell.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},Cell.prototype._configureCell=function(){var t=this,e=t.column.cellEvents,o=t.element,i=this.column.getField();(o.style.textAlign=t.column.hozAlign,t.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems={top:"flex-start",bottom:"flex-end",middle:"center"}[t.column.vertAlign]||"",t.column.hozAlign&&(o.style.justifyContent={left:"flex-start",right:"flex-end",center:"center"}[t.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),t.column.definition.cssClass)&&t.column.definition.cssClass.split(" ").forEach((function(t){o.classList.add(t)}));"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",(function(e){t._generateTooltip()})),t._bindClickEvents(e),t._bindTouchEvents(e),t._bindMouseEvents(e),t.column.modules.edit&&t.table.modules.edit.bindEditor(t),t.column.definition.rowHandle&&!1!==t.table.options.movableRows&&t.table.modExists("moveRow")&&t.table.modules.moveRow.initializeCell(t),t.column.visible||t.hide()},Cell.prototype._bindClickEvents=function(t){var e=this,o=e.element;(t.cellClick||e.table.options.cellClick)&&o.addEventListener("click",(function(o){var i=e.getComponent();t.cellClick&&t.cellClick.call(e.table,o,i),e.table.options.cellClick&&e.table.options.cellClick.call(e.table,o,i)})),t.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",(function(o){var i=e.getComponent();t.cellDblClick&&t.cellDblClick.call(e.table,o,i),e.table.options.cellDblClick&&e.table.options.cellDblClick.call(e.table,o,i)})):o.addEventListener("dblclick",(function(t){if(!e.table.modExists("edit")||e.table.modules.edit.currentCell!==e){t.preventDefault();try{if(document.selection)(o=document.body.createTextRange()).moveToElementText(e.element),o.select();else if(window.getSelection){var o;(o=document.createRange()).selectNode(e.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(t){}}})),(t.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",(function(o){var i=e.getComponent();t.cellContext&&t.cellContext.call(e.table,o,i),e.table.options.cellContext&&e.table.options.cellContext.call(e.table,o,i)}))},Cell.prototype._bindMouseEvents=function(t){var e=this,o=e.element;(t.cellMouseEnter||e.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",(function(o){var i=e.getComponent();t.cellMouseEnter&&t.cellMouseEnter.call(e.table,o,i),e.table.options.cellMouseEnter&&e.table.options.cellMouseEnter.call(e.table,o,i)})),(t.cellMouseLeave||e.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",(function(o){var i=e.getComponent();t.cellMouseLeave&&t.cellMouseLeave.call(e.table,o,i),e.table.options.cellMouseLeave&&e.table.options.cellMouseLeave.call(e.table,o,i)})),(t.cellMouseOver||e.table.options.cellMouseOver)&&o.addEventListener("mouseover",(function(o){var i=e.getComponent();t.cellMouseOver&&t.cellMouseOver.call(e.table,o,i),e.table.options.cellMouseOver&&e.table.options.cellMouseOver.call(e.table,o,i)})),(t.cellMouseOut||e.table.options.cellMouseOut)&&o.addEventListener("mouseout",(function(o){var i=e.getComponent();t.cellMouseOut&&t.cellMouseOut.call(e.table,o,i),e.table.options.cellMouseOut&&e.table.options.cellMouseOut.call(e.table,o,i)})),(t.cellMouseMove||e.table.options.cellMouseMove)&&o.addEventListener("mousemove",(function(o){var i=e.getComponent();t.cellMouseMove&&t.cellMouseMove.call(e.table,o,i),e.table.options.cellMouseMove&&e.table.options.cellMouseMove.call(e.table,o,i)}))},Cell.prototype._bindTouchEvents=function(t){var e,o,i,n=this,s=n.element;(t.cellTap||this.table.options.cellTap)&&(i=!1,s.addEventListener("touchstart",(function(t){i=!0}),{passive:!0}),s.addEventListener("touchend",(function(e){if(i){var o=n.getComponent();t.cellTap&&t.cellTap.call(n.table,e,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,e,o)}i=!1}))),(t.cellDblTap||this.table.options.cellDblTap)&&(e=null,s.addEventListener("touchend",(function(o){if(e){clearTimeout(e),e=null;var i=n.getComponent();t.cellDblTap&&t.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else e=setTimeout((function(){clearTimeout(e),e=null}),300)}))),(t.cellTapHold||this.table.options.cellTapHold)&&(o=null,s.addEventListener("touchstart",(function(e){clearTimeout(o),o=setTimeout((function(){clearTimeout(o),o=null,i=!1;var s=n.getComponent();t.cellTapHold&&t.cellTapHold.call(n.table,e,s),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,e,s)}),1e3)}),{passive:!0}),s.addEventListener("touchend",(function(t){clearTimeout(o),o=null})))},Cell.prototype._generateContents=function(){var t;switch(void 0===(t=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value)?"undefined":_typeof(t)){case"object":if(t instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(t)}else this.element.innerHTML="",null!=t&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",t);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=t}},Cell.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},Cell.prototype._generateTooltip=function(){var t=this.column.tooltip;t?(!0===t?t=this.value:"function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),void 0===t&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")},Cell.prototype.getElement=function(){return this.loaded||(this.loaded=!0,this.layoutElement()),this.element},Cell.prototype.getValue=function(){return this.value},Cell.prototype.getOldValue=function(){return this.oldValue},Cell.prototype.setValue=function(t,e){var o;this.setValueProcessData(t,e)&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))},Cell.prototype.setValueProcessData=function(t,e){var o=!1;return this.value!=t&&(o=!0,e&&this.column.modules.mutate&&(t=this.table.modules.mutator.transformCell(this,t))),this.setValueActual(t),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},Cell.prototype.setValueActual=function(t){this.oldValue=this.value,this.value=t,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,t),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()},Cell.prototype.layoutElement=function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},Cell.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},Cell.prototype.clearWidth=function(){this.width="",this.element.style.width=""},Cell.prototype.getWidth=function(){return this.width||this.element.offsetWidth},Cell.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},Cell.prototype.checkHeight=function(){this.row.reinitializeHeight()},Cell.prototype.clearHeight=function(){this.element.style.height="",this.height=null},Cell.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},Cell.prototype.getHeight=function(){return this.height||this.element.offsetHeight},Cell.prototype.show=function(){this.element.style.display=this.column.vertAlign?"inline-flex":""},Cell.prototype.hide=function(){this.element.style.display="none"},Cell.prototype.edit=function(t){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,t)},Cell.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var t=this.table.modules.edit.getCurrentCell();t&&t._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},Cell.prototype.validate=function(){return!this.column.modules.validate||!this.table.modExists("validate",!0)||!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())},Cell.prototype.delete=function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},Cell.prototype.nav=function(){var t=this,e=!1,o=this.row.getCellIndex(this);return{next:function(){var e,o=this.right();return!!o||!(!(e=t.table.rowManager.nextDisplayRow(t.row,!0))||!(o=e.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var e,o=this.left();return!!o||!(!(e=t.table.rowManager.prevDisplayRow(t.row,!0))||!(o=e.findPrevEditableCell(e.cells.length)))&&(o.edit(),!0)},left:function(){return!!(e=t.row.findPrevEditableCell(o))&&(e.edit(),!0)},right:function(){return!!(e=t.row.findNextEditableCell(o))&&(e.edit(),!0)},up:function(){var e=t.table.rowManager.prevDisplayRow(t.row,!0);e&&e.cells[o].edit()},down:function(){var e=t.table.rowManager.nextDisplayRow(t.row,!0);e&&e.cells[o].edit()}}},Cell.prototype.getIndex=function(){this.row.getCellIndex(this)},Cell.prototype.getComponent=function(){return this.component||(this.component=new CellComponent(this)),this.component};var FooterManager=function(t){this.table=t,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};FooterManager.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-footer"),t},FooterManager.prototype._initialize=function(t){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},FooterManager.prototype.getElement=function(){return this.element},FooterManager.prototype.append=function(t,e){this.activate(e),this.element.appendChild(t),this.table.rowManager.adjustTableSize()},FooterManager.prototype.prepend=function(t,e){this.activate(e),this.element.insertBefore(t,this.element.firstChild),this.table.rowManager.adjustTableSize()},FooterManager.prototype.remove=function(t){t.parentNode.removeChild(t),this.deactivate()},FooterManager.prototype.deactivate=function(t){this.element.firstChild&&!t||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},FooterManager.prototype.activate=function(t){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),t&&this.links.push(t)},FooterManager.prototype.redraw=function(){this.links.forEach((function(t){t.footerRedraw()}))};var Tabulator=function t(e,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(e)&&(this.initializeOptions(o||{}),this._create()),t.prototype.comms.register(this)};Tabulator.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"<div class='tabulator-arrow'></div>",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(t,e){return e},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(t,e){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:!1,dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},Tabulator.prototype.initializeOptions=function(t){if(!1!==t.invalidOptionWarnings)for(var e in t)void 0===this.defaultOptions[e]&&console.warn("Invalid table constructor option:",e);for(var e in this.defaultOptions)e in t?this.options[e]=t[e]:Array.isArray(this.defaultOptions[e])?this.options[e]=Object.assign([],this.defaultOptions[e]):"object"===_typeof(this.defaultOptions[e])&&null!==this.defaultOptions[e]?this.options[e]=Object.assign({},this.defaultOptions[e]):this.options[e]=this.defaultOptions[e]},Tabulator.prototype.initializeElement=function(t){return"undefined"!=typeof HTMLElement&&t instanceof HTMLElement?(this.element=t,!0):"string"==typeof t?(this.element=document.querySelector(t),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",t),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",t),!1)},Tabulator.prototype.rtlCheck=function(){var t=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==t.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}},Tabulator.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.dataEdited&&(console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"),this.options.dataChanged=this.options.dataEdited),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},Tabulator.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},Tabulator.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new ColumnManager(this),this.rowManager=new RowManager(this),this.footerManager=new FooterManager(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new VDomHoz(this)),this._buildElement(),this._loadInitialData()},Tabulator.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},Tabulator.prototype._buildElement=function(){var t=this,e=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);for(var n in i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",e.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",e.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",e.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),o.localize.initialize(),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder),i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var s=document.createElement("div");s.classList.add("tabulator-placeholder");var a=document.createElement("span");a.innerHTML=i.placeholder,s.appendChild(a),i.placeholder=s}if(e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.columns&&(i.columns=o.persistence.load("columns",i.columns)),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(r=o.persistence.load("sort"))&&i.initialSort&&(r=i.initialSort):i.initialSort&&(r=i.initialSort),o.sort.setSort(r)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var l=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(l=o.persistence.load("filter"))&&i.initialFilter&&(l=i.initialFilter):i.initialFilter&&(l=i.initialFilter),o.filter.setFilter(l)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach((function(e){var i=t.columnManager.findColumn(e.field);if(!i)return console.warn("Column Filter Error - No matching column found:",e.field),!1;o.filter.setHeaderFilterValue(i,e.value)})),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},Tabulator.prototype._loadInitialData=function(){var t=this;if(t.options.pagination&&t.modExists("page"))if(t.modules.page.reset(!0,!0),"local"==t.options.pagination){if(t.options.data.length)t.rowManager.setData(t.options.data,!1,!0);else{if((t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax"))return void t.modules.ajax.loadData(!1,!0).then((function(){})).catch((function(){t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}));t.rowManager.setData(t.options.data,!1,!0)}t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}else t.options.ajaxURL?t.modules.page.setPage(t.options.paginationInitialPage).then((function(){})).catch((function(){})):t.rowManager.setData([],!1,!0);else t.options.data.length?t.rowManager.setData(t.options.data):(t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax")?t.modules.ajax.loadData(!1,!0).then((function(){})).catch((function(){})):t.rowManager.setData(t.options.data,!1,!0)},Tabulator.prototype.destroy=function(){var t=this.element;for(Tabulator.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach((function(t){t.wipe()})),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();t.firstChild;)t.removeChild(t.firstChild);t.classList.remove("tabulator")},Tabulator.prototype._detectBrowser=function(){var t=navigator.userAgent||navigator.vendor||window.opera;t.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise((function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",(function(t){var s,a=n.files[0],r=new FileReader;r.readAsText(a),r.onload=function(t){try{s=JSON.parse(r.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e.setData(s).then((function(t){o(t)})).catch((function(t){o(t)}))},r.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}})),n.click()}))},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},Tabulator.prototype._setData=function(t,e,o,i,n){return"string"!=typeof t?t?this.rowManager.setData(t,i,n):this.modExists("ajax")&&(this.modules.ajax.getUrl||this.options.ajaxURLGenerator)?"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(i,n):this.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?this.rowManager.setData(JSON.parse(t),i,n):this.modExists("ajax",!0)?(e&&this.modules.ajax.setParams(e),o&&this.modules.ajax.setConfig(o),this.modules.ajax.setUrl(t),"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(i,n)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},Tabulator.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise((function(n,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach((function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then((function(){--i||n()})))})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise((function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then((function(t){var e=[];t.forEach((function(t){e.push(t.getComponent())})),n(e)})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise((function(s,a){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach((function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then((function(){n--,i.push(e.getComponent()),n||s(i)})):o.rowManager.addRows(t).then((function(t){n--,i.push(t[0].getComponent()),n||s(i)}))})):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))}))},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise((function(o,i){var n=e,s=0,a=0,r=[];function l(){++s==t.length&&a&&(n.rowManager.reRenderInPosition(),o())}Array.isArray(t)||(t=[t]),t.forEach((function(t){var o=e.rowManager.findRow(t,!0);o?r.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),l())})),r.sort((function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1})),r.forEach((function(t){t.delete().then((function(){a++,l()})).catch((function(t){l(),i(t)}))}))}))},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise((function(n,s){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then((function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())}))}))},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise((function(i,n){var s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then((function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())})).catch((function(t){n(t)})):s=o.rowManager.addRows(e).then((function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())})).catch((function(t){n(t)}))}))},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise((function(i,n){var s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then((function(){i(s.getComponent())})).catch((function(t){n(t)})):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))}))},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise((function(n,s){var a=i.rowManager.findRow(t);a?i.rowManager.scrollToRow(a,e,o).then((function(){n()})).catch((function(t){s(t)})):(console.warn("Scroll Error - No matching row found:",t),s("Scroll Error - No matching row found"))}))},Tabulator.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},Tabulator.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this;return new Promise((function(n,s){var a=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,a).then((function(t){n(t.getComponent())})).catch((function(t){s(t)}))}))},Tabulator.prototype.deleteColumn=function(t){var e=this;return new Promise((function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then((function(){o()})).catch((function(t){i(t)})):(console.warn("Column Delete Error - No matching column found:",t),i())}))},Tabulator.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise((function(i,n){var s=o.columnManager.findColumn(t);s?s.updateDefinition(e).then((function(t){i(t)})).catch((function(t){n(t)})):(console.warn("Column Update Error - No matching column found:",t),n())}))},Tabulator.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise((function(n,s){var a=i.columnManager.findColumn(t);a?i.columnManager.scrollToColumn(a,e,o).then((function(){n()})).catch((function(t){s(t)})):(console.warn("Scroll Error - No matching column found:",t),s("Scroll Error - No matching column found"))}))},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach((function(t){e.modules.validate.clearValidation(t._getSelf())})))},Tabulator.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach((function(t){var o=t.validate();!0!==o&&(e=e.concat(o))})),!e.length||e},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise((function(t,e){e()}))},Tabulator.prototype.setPageToRow=function(t){var e=this;return new Promise((function(o,i){e.options.pagination&&e.modExists("page")&&(t=e.rowManager.findRow(t))?e.modules.page.setPageToRow(t).then((function(){o()})).catch((function(){i()})):i()}))},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then((function(){})).catch((function(){}))},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupValues=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach((function(t){e.modules.edit.clearEdited(t._getSelf())})))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},Tabulator.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){for(var t in this.modules={},Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Object.assign(Array.isArray(t)?[]:{},t);for(var o in t)null!=t[o]&&"object"===_typeof(t[o])&&(t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]));return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if((o=document.querySelectorAll(t)).length)for(var s=0;s<o.length;s++)(i=Tabulator.prototype.comms.matchElement(o[s]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&t instanceof HTMLElement||t instanceof Tabulator?(i=Tabulator.prototype.comms.matchElement(t))&&n.push(i):Array.isArray(t)?t.forEach((function(t){n=n.concat(Tabulator.prototype.comms.lookupTable(t))})):e||console.warn("Table Connection Error - Invalid Selector",t);return n},matchElement:function(t){return Tabulator.prototype.comms.tables.find((function(e){return t instanceof Tabulator?e===t:e.element===t}))}},Tabulator.prototype.findTable=function(t){var e=Tabulator.prototype.comms.lookupTable(t,!0);return!(Array.isArray(e)&&!e.length)&&e};var Layout=function(t){this.table=t,this.mode=null};Layout.prototype.initialize=function(t){this.modes[t]?this.mode=t:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+t),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},Layout.prototype.getMode=function(){return this.mode},Layout.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex)},Layout.prototype.modes={fitData:function(t){this.table.options.virtualDomHoz?this.table.vdomHoz.fitDataLayoutOverride():t.forEach((function(t){t.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(t){t.forEach((function(t){t.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(t){t.forEach((function(t){t.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(t){var e=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,s=!1;t.forEach((function(t,i){t.widthFixed||t.reinitializeWidth(),(e.table.options.responsiveLayout?t.modules.responsive.visible:t.visible)&&(s=t),t.visible&&(o+=t.getWidth())})),s?(n=i-o+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){var e,o,i=this.table.element.clientWidth,n=0,s=0,a=0,r=[],l=[],u=0,c=0;function d(t){return"string"==typeof t?t.indexOf("%")>-1?i/100*parseInt(t):parseInt(t):t}function h(t,e,o,i){var n=[],s=0,a=0,r=0,l=0,u=0,c=[];function p(t){return o*(t.column.definition.widthGrow||1)}function m(t){return d(t.width)-o*(t.column.definition.widthShrink||0)}return t.forEach((function(t,e){var o=i?m(t):p(t);t.column.minWidth>=o?n.push(t):(c.push(t),u+=i?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)})),n.length?(n.forEach((function(t){s+=i?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth})),l=(a=e-s)-(r=u?Math.floor(a/u):a)*u,l+=h(c,a,r,i)):(l=u?e-Math.floor(e/u)*u:e,c.forEach((function(t){t.width=i?m(t):p(t)}))),l}this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(i-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach((function(t){var e,o,i;t.visible&&(e=t.definition.width,o=parseInt(t.minWidth),e?(i=d(e),n+=i>o?i:o,t.definition.widthShrink&&(l.push({column:t,width:i>o?i:o}),u+=t.definition.widthShrink)):(r.push({column:t,width:0}),a+=t.definition.widthGrow||1))})),s=i-n,e=Math.floor(s/a);c=h(r,s,e,!1);r.length&&c>0&&(r[r.length-1].width+=+c),r.forEach((function(t){s-=t.width})),(o=Math.abs(c)+s)>0&&u&&(c=h(l,o,Math.floor(o/u),!0)),l.length&&(l[l.length-1].width-=c),r.forEach((function(t){t.column.setWidth(t.width)})),l.forEach((function(t){t.column.setWidth(t.width)}))}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={},this.langList={}};Localize.prototype.initialize=function(){this.langList=Tabulator.prototype.helpers.deepClone(this.langs)},Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langList.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langList.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langList[t]?this._setLangProp(this.langList[t],e):this.langList[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){if(!0===(t=t||"default")&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!this.langList[t]){var e=t.split("-")[0];this.langList[e]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,e),t=e):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}this.locale=t,this.lang=Tabulator.prototype.helpers.deepClone(this.langList.default||{}),"default"!=t&&function t(e,o){for(var i in e)"object"==_typeof(e[i])?(o[i]||(o[i]={}),t(e[i],o[i])):o[i]=e[i]}(this.langList[t],this.lang),this.table.options.localized.call(this.table,this.locale,this.lang),this._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langList[t]:this.lang},Localize.prototype.getText=function(t,e){var o=(t=e?t+"|"+e:t).split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this.lang;return t.forEach((function(t){var e;o&&(e=o[t],o=void 0!==e&&e)})),o},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this,e=function(e){t.bindings[e].forEach((function(o){o(t.getText(e),t.lang)}))};for(var o in t.bindings)e(o)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e=this,o=[];return Tabulator.prototype.comms.lookupTable(t).forEach((function(t){e.table!==t&&o.push(t)})),o},Comms.prototype.send=function(t,e,o,i){var n=this,s=this.getConnections(t);s.forEach((function(t){t.tableComms(n.table.element,e,o,i)})),!s.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms);var Accessor=function(t){this.table=t,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(t){var e=this,o=!1,i={};this.allowedTypes.forEach((function(n){var s,a="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));t.definition[a]&&(s=e.lookupAccessor(t.definition[a]))&&(o=!0,i[a]={accessor:s,params:t.definition[a+"Params"]||{}})})),o&&(t.modules.accessor=i)},Accessor.prototype.lookupAccessor=function(t){var e=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.accessors[t]?e=this.accessors[t]:console.warn("Accessor Error - No such accessor found, ignoring: ",t);break;case"function":e=t}return e},Accessor.prototype.transformRow=function(t,e){var o="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),i=t.getComponent(),n=Tabulator.prototype.helpers.deepClone(t.data||{});return this.table.columnManager.traverse((function(t){var s,a,r,l;t.modules.accessor&&(a=t.modules.accessor[o]||t.modules.accessor.accessor||!1)&&"undefined"!=(s=t.getFieldValue(n))&&(l=t.getComponent(),r="function"==typeof a.params?a.params(s,n,e,l,i):a.params,t.setFieldValue(n,a.accessor(s,n,e,r,l,i)))})),n},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor);var Ajax=function(t){this.table=t,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var t;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?((t=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=t.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?((t=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=t.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-loader"),t},Ajax.prototype.createMsgElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-loader-msg"),t.setAttribute("role","alert"),t},Ajax.prototype.setParams=function(t,e){if(e)for(var o in this.params=this.params||{},t)this.params[o]=t[o];else this.params=t},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(t){if(this._loadDefaultConfig(),"string"==typeof t)this.config.method=t;else for(var e in t)this.config[e]=t[e]},Ajax.prototype._loadDefaultConfig=function(t){if(!this.config||t)for(var e in this.config={},this.defaultConfig)this.config[e]=this.defaultConfig[e]},Ajax.prototype.setUrl=function(t){this.url=t},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(t,e){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(t,e)},Ajax.prototype.nextPage=function(t){this.loading||t<(this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight)&&this.table.modules.page.nextPage().then((function(){})).catch((function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(t,e){var o=this;return new Promise((function(i,n){o.sendRequest(t).then((function(s){o.table.rowManager.setData(s,t,e).then((function(){i()})).catch((function(t){n(t)}))})).catch((function(t){n(t)}))}))},Ajax.prototype.generateParamsList=function(t,e){var o=this,i=[];if(e=e||"",Array.isArray(t))t.forEach((function(t,n){i=i.concat(o.generateParamsList(t,e?e+"["+n+"]":n))}));else if("object"===(void 0===t?"undefined":_typeof(t)))for(var n in t)i=i.concat(o.generateParamsList(t[n],e?e+"["+n+"]":n));else i.push({key:e,value:t});return i},Ajax.prototype.serializeParams=function(t){var e=this.generateParamsList(t),o=[];return e.forEach((function(t){o.push(encodeURIComponent(t.key)+"="+encodeURIComponent(t.value))})),o.join("&")},Ajax.prototype.sendRequest=function(t){var e,o=this,i=this,n=i.url;return i.requestOrder++,e=i.requestOrder,i._loadDefaultConfig(),new Promise((function(s,a){!1!==i.table.options.ajaxRequesting.call(o.table,i.url,i.params)?(i.loading=!0,t||i.showLoader(),o.loaderPromise(n,i.config,i.params).then((function(t){e===i.requestOrder?(i.table.options.ajaxResponse&&(t=i.table.options.ajaxResponse.call(i.table,i.url,i.params,t)),s(t),i.hideLoader(),i.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")})).catch((function(t){console.error("Ajax Load Error: ",t),i.table.options.ajaxError.call(i.table,t),i.showError(),setTimeout((function(){i.hideLoader()}),3e3),i.loading=!1,a()}))):a()}))},Ajax.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(t,e,o){return t&&o&&Object.keys(o).length&&(e.method&&"get"!=e.method.toLowerCase()||(e.method="get",t+=(t.includes("?")?"&":"?")+this.serializeParams(o))),t},Ajax.prototype.defaultLoaderPromise=function(t,e,o){var i,n=this;return new Promise((function(s,a){if(t=n.urlGenerator(t,e,o),"GET"!=e.method.toUpperCase())if(i="object"===_typeof(n.table.options.ajaxContentType)?n.table.options.ajaxContentType:n.contentTypeFormatters[n.table.options.ajaxContentType]){for(var r in i.headers)e.headers||(e.headers={}),void 0===e.headers[r]&&(e.headers[r]=i.headers[r]);e.body=i.body.call(n,t,e,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",n.table.options.ajaxContentType);t?(void 0===e.headers&&(e.headers={}),void 0===e.headers.Accept&&(e.headers.Accept="application/json"),void 0===e.headers["X-Requested-With"]&&(e.headers["X-Requested-With"]="XMLHttpRequest"),void 0===e.mode&&(e.mode="cors"),"cors"==e.mode?(void 0===e.headers["Access-Control-Allow-Origin"]&&(e.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===e.credentials&&(e.credentials="same-origin")):void 0===e.credentials&&(e.credentials="include"),fetch(t,e).then((function(t){t.ok?t.json().then((function(t){s(t)})).catch((function(t){a(t),console.warn("Ajax Load Error - Invalid JSON returned",t)})):(console.error("Ajax Load Error - Connection Error: "+t.status,t.statusText),a(t))})).catch((function(t){console.error("Ajax Load Error - Connection Error: ",t),a(t)}))):(console.warn("Ajax Load Error - No URL Set"),s([]))}))},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(t,e,o){return JSON.stringify(o)}},form:{headers:{},body:function(t,e,o){var i=this.generateParamsList(o),n=new FormData;return i.forEach((function(t){n.append(t.key,t.value)})),n}}},Tabulator.prototype.registerModule("ajax",Ajax);var CalcComponent=function(t){this._row=t};CalcComponent.prototype.getData=function(t){return this._row.getData(t)},CalcComponent.prototype.getElement=function(){return this._row.getElement()},CalcComponent.prototype.getTable=function(){return this._row.table},CalcComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach((function(e){t.push(e.getComponent())})),t},CalcComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},CalcComponent.prototype._getSelf=function(){return this._row};var ColumnCalcs=function(t){this.table=t,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(t){var e=t.definition,o={topCalcParams:e.topCalcParams||{},botCalcParams:e.bottomCalcParams||{}};if(e.topCalc){switch(_typeof(e.topCalc)){case"string":this.calculations[e.topCalc]?o.topCalc=this.calculations[e.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",e.topCalc);break;case"function":o.topCalc=e.topCalc}o.topCalc&&(t.modules.columnCalcs=o,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(e.bottomCalc){switch(_typeof(e.bottomCalc)){case"string":this.calculations[e.bottomCalc]?o.botCalc=this.calculations[e.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",e.bottomCalc);break;case"function":o.botCalc=e.bottomCalc}o.botCalc&&(t.modules.columnCalcs=o,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(t){this.table.columnManager.getElement().scrollWidth,this.table.element.clientWidth;this.botInitialized&&this.botRow&&(this.botRow.getElement().style.marginLeft=-t+"px")},ColumnCalcs.prototype.recalc=function(t){var e;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),e=this.generateRow("top",this.rowsToData(t)),this.topRow=e;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(e.getElement()),e.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),e=this.generateRow("bottom",this.rowsToData(t)),this.botRow=e;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(e.getElement()),e.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},ColumnCalcs.prototype.recalcAll=function(){var t=this;(this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs&&table.modules.groupRows.getChildGroups().forEach((function(e){t.recalcGroup(e)})))},ColumnCalcs.prototype.recalcGroup=function(t){var e,o;t&&t.calcs&&(t.calcs.bottom&&(e=this.rowsToData(t.rows),o=this.generateRowData("bottom",e),t.calcs.bottom.updateData(o),t.calcs.bottom.reinitialize()),t.calcs.top&&(e=this.rowsToData(t.rows),o=this.generateRowData("top",e),t.calcs.top.updateData(o),t.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},ColumnCalcs.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},ColumnCalcs.prototype.rowsToData=function(t){var e=this,o=[];return t.forEach((function(t){if(o.push(t.getData()),e.table.options.dataTree&&e.table.options.dataTreeChildColumnCalcs&&t.modules.dataTree.open){var i=e.rowsToData(e.table.modules.dataTree.getFilteredTreeChildren(t));o=o.concat(i)}})),o},ColumnCalcs.prototype.generateRow=function(t,e){var o,i=this,n=this.generateRowData(t,e);return i.table.modExists("mutator")&&i.table.modules.mutator.disable(),o=new Row(n,this,"calc"),i.table.modExists("mutator")&&i.table.modules.mutator.enable(),o.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),o.component=!1,o.getComponent=function(){return this.component||(this.component=new CalcComponent(this)),this.component},o.generateCells=function(){var e=[];i.table.columnManager.columnsByIndex.forEach((function(n){i.genColumn.setField(n.getField()),i.genColumn.hozAlign=n.hozAlign,n.definition[t+"CalcFormatter"]&&i.table.modExists("format")?i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter(n.definition[t+"CalcFormatter"]),params:n.definition[t+"CalcFormatterParams"]||{}}:i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter("plaintext"),params:{}},i.genColumn.definition.cssClass=n.definition.cssClass;var s=new Cell(i.genColumn,o);s.getElement(),s.column=n,s.setWidth(),n.cells.push(s),e.push(s),n.visible||s.hide()})),this.cells=e},o},ColumnCalcs.prototype.generateRowData=function(t,e){var o,i,n={},s="top"==t?this.topCalcs:this.botCalcs,a="top"==t?"topCalc":"botCalc";return s.forEach((function(t){var s=[];t.modules.columnCalcs&&t.modules.columnCalcs[a]&&(e.forEach((function(e){s.push(t.getFieldValue(e))})),i=a+"Params",o="function"==typeof t.modules.columnCalcs[i]?t.modules.columnCalcs[i](s,e):t.modules.columnCalcs[i],t.setFieldValue(n,t.modules.columnCalcs[a](s,e,o)))})),n},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var t=this,e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.getGroups(!0).forEach((function(o){e[o.getKey()]=t.getGroupResults(o)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e},ColumnCalcs.prototype.getGroupResults=function(t){var e=this,o=t._getSelf(),i=t.getSubGroups(),n={};return i.forEach((function(t){n[t.getKey()]=e.getGroupResults(t)})),{top:o.calcs.top?o.calcs.top.getData():{},bottom:o.calcs.bottom?o.calcs.bottom.getData():{},groups:n}},ColumnCalcs.prototype.calculations={avg:function(t,e,o){var i=0,n=void 0!==o.precision?o.precision:2;return t.length&&(i=t.reduce((function(t,e){return Number(t)+Number(e)})),i/=t.length,i=!1!==n?i.toFixed(n):i),parseFloat(i).toString()},max:function(t,e,o){var i=null,n=void 0!==o.precision&&o.precision;return t.forEach((function(t){((t=Number(t))>i||null===i)&&(i=t)})),null!==i?!1!==n?i.toFixed(n):i:""},min:function(t,e,o){var i=null,n=void 0!==o.precision&&o.precision;return t.forEach((function(t){((t=Number(t))<i||null===i)&&(i=t)})),null!==i?!1!==n?i.toFixed(n):i:""},sum:function(t,e,o){var i=0,n=void 0!==o.precision&&o.precision;return t.length&&t.forEach((function(t){t=Number(t),i+=isNaN(t)?0:Number(t)})),!1!==n?i.toFixed(n):i},concat:function(t,e,o){var i=0;return t.length&&(i=t.reduce((function(t,e){return String(t)+String(e)}))),i},count:function(t,e,o){var i=0;return t.length&&t.forEach((function(t){t&&i++})),i}},Tabulator.prototype.registerModule("columnCalcs",ColumnCalcs);var Clipboard=function(t){this.table=t,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};Clipboard.prototype.initialize=function(){var t=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(function(e){var o,i;if(!t.blocked){if(e.preventDefault(),t.customSelection)o=t.customSelection,t.table.options.clipboardCopyFormatter&&(o=t.table.options.clipboardCopyFormatter("plain",o));else{var n=t.table.modules.export.generateExportList(t.table.options.clipboardCopyConfig,t.table.options.clipboardCopyStyled,t.rowRange,"clipboard");o=(i=t.table.modules.export.genereateHTMLTable(n))?t.generatePlainContent(n):"",t.table.options.clipboardCopyFormatter&&(o=t.table.options.clipboardCopyFormatter("plain",o),i=t.table.options.clipboardCopyFormatter("html",i))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",o):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",o),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",o),i&&e.originalEvent.clipboardData.setData("text/html",i)),t.table.options.clipboardCopied.call(t.table,o,i),t.reset()}})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(function(e){t.paste(e)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},Clipboard.prototype.reset=function(){this.blocked=!0,this.customSelection=!1},Clipboard.prototype.generatePlainContent=function(t){var e=[];return t.forEach((function(t){var o=[];t.columns.forEach((function(e){var i="";if(e)if("group"===t.type&&(e.value=e.component.getKey()),null===e.value)i="";else switch(_typeof(e.value)){case"object":i=JSON.stringify(e.value);break;case"undefined":i="";break;default:i=e.value}o.push(i)})),e.push(o.join("\t"))})),e.join("\n")},Clipboard.prototype.copy=function(t,e){var o,i;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=t||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((t=document.createRange()).selectNodeContents(this.table.element),(o=window.getSelection()).toString()&&e&&(this.customSelection=o.toString()),o.removeAllRanges(),o.addRange(t)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((i=document.body.createTextRange()).moveToElementText(this.table.element),i.select()),document.execCommand("copy"),o&&o.removeAllRanges())},Clipboard.prototype.setPasteAction=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteAction=this.pasteActions[t],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",t);break;case"function":this.pasteAction=t}},Clipboard.prototype.setPasteParser=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteParser=this.pasteParsers[t],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",t);break;case"function":this.pasteParser=t}},Clipboard.prototype.paste=function(t){var e,o,i;this.checkPaseOrigin(t)&&(e=this.getPasteData(t),(o=this.pasteParser.call(this,e))?(t.preventDefault(),this.table.modExists("mutator")&&(o=this.mutateData(o)),i=this.pasteAction.call(this,o),this.table.options.clipboardPasted.call(this.table,e,o,i)):this.table.options.clipboardPasteError.call(this.table,e))},Clipboard.prototype.mutateData=function(t){var e=this,o=[];return Array.isArray(t)?t.forEach((function(t){o.push(e.table.modules.mutator.transformRow(t,"clipboard"))})):o=t,o},Clipboard.prototype.checkPaseOrigin=function(t){var e=!0;return("DIV"!=t.target.tagName||this.table.modules.edit.currentCell)&&(e=!1),e},Clipboard.prototype.getPasteData=function(t){var e;return window.clipboardData&&window.clipboardData.getData?e=window.clipboardData.getData("Text"):t.clipboardData&&t.clipboardData.getData?e=t.clipboardData.getData("text/plain"):t.originalEvent&&t.originalEvent.clipboardData.getData&&(e=t.originalEvent.clipboardData.getData("text/plain")),e},Clipboard.prototype.pasteParsers={table:function(t){var e=[],o=!0,i=this.table.columnManager.columns,n=[],s=[];return(t=t.split("\n")).forEach((function(t){e.push(t.split("\t"))})),!(!e.length||1===e.length&&e[0].length<2)&&(!0,e[0].forEach((function(t){var e=i.find((function(e){return t&&e.definition.title&&t.trim()&&e.definition.title.trim()===t.trim()}));e?n.push(e):o=!1})),o||(o=!0,n=[],e[0].forEach((function(t){var e=i.find((function(e){return t&&e.field&&t.trim()&&e.field.trim()===t.trim()}));e?n.push(e):o=!1})),o||(n=this.table.columnManager.columnsByIndex)),o&&e.shift(),e.forEach((function(t){var e={};t.forEach((function(t,o){n[o]&&(e[n[o].field]=t)})),s.push(e)})),s)}},Clipboard.prototype.pasteActions={replace:function(t){return this.table.setData(t)},update:function(t){return this.table.updateOrAddData(t)},insert:function(t){return this.table.addData(t)}},Tabulator.prototype.registerModule("clipboard",Clipboard);var DataTree=function(t){this.table=t,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};DataTree.prototype.initialize=function(){var t=null,e=this.table.columnManager.getFirstVisibileColumn(),o=this.table.options;switch(this.field=o.dataTreeChildField,this.indent=o.dataTreeChildIndent,this.elementField=o.dataTreeElementColumn||!!e&&e.field,o.dataTreeBranchElement&&(!0===o.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof o.dataTreeBranchElement?((t=document.createElement("div")).innerHTML=o.dataTreeBranchElement,this.branchEl=t.firstChild):this.branchEl=o.dataTreeBranchElement),o.dataTreeCollapseElement?"string"==typeof o.dataTreeCollapseElement?((t=document.createElement("div")).innerHTML=o.dataTreeCollapseElement,this.collapseEl=t.firstChild):this.collapseEl=o.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?((t=document.createElement("div")).innerHTML=o.dataTreeExpandElement,this.expandEl=t.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(t,e){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(t,e){return o.dataTreeStartExpanded[e]}}},DataTree.prototype.initializeRow=function(t){var e=t.getData()[this.field],o=Array.isArray(e),i=o||!o&&"object"===(void 0===e?"undefined":_typeof(e))&&null!==e;!i&&t.modules.dataTree&&t.modules.dataTree.branchEl&&t.modules.dataTree.branchEl.parentNode.removeChild(t.modules.dataTree.branchEl),!i&&t.modules.dataTree&&t.modules.dataTree.controlEl&&t.modules.dataTree.controlEl.parentNode.removeChild(t.modules.dataTree.controlEl),t.modules.dataTree={index:t.modules.dataTree?t.modules.dataTree.index:0,open:!!i&&(t.modules.dataTree?t.modules.dataTree.open:this.startOpen(t.getComponent(),0)),controlEl:!(!t.modules.dataTree||!i)&&t.modules.dataTree.controlEl,branchEl:!(!t.modules.dataTree||!i)&&t.modules.dataTree.branchEl,parent:!!t.modules.dataTree&&t.modules.dataTree.parent,children:i}},DataTree.prototype.layoutRow=function(t){var e=(this.elementField?t.getCell(this.elementField):t.getCells()[0]).getElement(),o=t.modules.dataTree;o.branchEl&&(o.branchEl.parentNode&&o.branchEl.parentNode.removeChild(o.branchEl),o.branchEl=!1),o.controlEl&&(o.controlEl.parentNode&&o.controlEl.parentNode.removeChild(o.controlEl),o.controlEl=!1),this.generateControlElement(t,e),t.getElement().classList.add("tabulator-tree-level-"+o.index),o.index&&(this.branchEl?(o.branchEl=this.branchEl.cloneNode(!0),e.insertBefore(o.branchEl,e.firstChild),this.table.rtl?o.branchEl.style.marginRight=(o.branchEl.offsetWidth+o.branchEl.style.marginLeft)*(o.index-1)+o.index*this.indent+"px":o.branchEl.style.marginLeft=(o.branchEl.offsetWidth+o.branchEl.style.marginRight)*(o.index-1)+o.index*this.indent+"px"):this.table.rtl?e.style.paddingRight=parseInt(window.getComputedStyle(e,null).getPropertyValue("padding-right"))+o.index*this.indent+"px":e.style.paddingLeft=parseInt(window.getComputedStyle(e,null).getPropertyValue("padding-left"))+o.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(t,e){var o=this,i=t.modules.dataTree,n=(e=e||t.getCells()[0].getElement(),i.controlEl);!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",(function(e){e.stopPropagation(),o.collapseRow(t)}))):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",(function(e){e.stopPropagation(),o.expandRow(t)}))),i.controlEl.addEventListener("mousedown",(function(t){t.stopPropagation()})),n&&n.parentNode===e?n.parentNode.replaceChild(i.controlEl,n):e.insertBefore(i.controlEl,e.firstChild))},DataTree.prototype.setDisplayIndex=function(t){this.displayIndex=t},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(t){var e=this,o=[];return t.forEach((function(t,i){var n;o.push(t),t instanceof Row&&((n=t.modules.dataTree.children).index||!1===n.children||e.getChildren(t).forEach((function(t){o.push(t)})))})),o},DataTree.prototype.getChildren=function(t){var e=this,o=t.modules.dataTree,i=[],n=[];return!1!==o.children&&o.open&&(Array.isArray(o.children)||(o.children=this.generateChildren(t)),i=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(o.children):o.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(i),i.forEach((function(t){n.push(t),e.getChildren(t).forEach((function(t){n.push(t)}))}))),n},DataTree.prototype.generateChildren=function(t){var e=this,o=[],i=t.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach((function(i){var n=new Row(i||{},e.table.rowManager);n.modules.dataTree.index=t.modules.dataTree.index+1,n.modules.dataTree.parent=t,n.modules.dataTree.children&&(n.modules.dataTree.open=e.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)})),o},DataTree.prototype.expandRow=function(t,e){var o=t.modules.dataTree;!1!==o.children&&(o.open=!0,t.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(t.getComponent(),t.modules.dataTree.index))},DataTree.prototype.collapseRow=function(t){var e=t.modules.dataTree;!1!==e.children&&(e.open=!1,t.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(t.getComponent(),t.modules.dataTree.index))},DataTree.prototype.toggleRow=function(t){var e=t.modules.dataTree;!1!==e.children&&(e.open?this.collapseRow(t):this.expandRow(t))},DataTree.prototype.getTreeParent=function(t){return!!t.modules.dataTree.parent&&t.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(t){var e=t.modules.dataTree,o=[];return e.children&&(Array.isArray(e.children)||(e.children=this.generateChildren(t)),(this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(e.children):e.children).forEach((function(t){t instanceof Row&&o.push(t)}))),o},DataTree.prototype.rowDelete=function(t){var e,o=t.modules.dataTree.parent;o&&(!1!==(e=this.findChildIndex(t,o))&&o.data[this.field].splice(e,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(t,e,o,i){var n=!1;"string"==typeof e&&(e=JSON.parse(e)),Array.isArray(t.data[this.field])||(t.data[this.field]=[],t.modules.dataTree.open=this.startOpen(t.getComponent(),t.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,t))&&t.data[this.field].splice(o?n:n+1,0,e),!1===n&&(o?t.data[this.field].unshift(e):t.data[this.field].push(e)),this.initializeRow(t),this.layoutRow(t),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(t,e){var o=this,i=!1;return"object"==(void 0===t?"undefined":_typeof(t))?t instanceof Row?i=t.data:t instanceof RowComponent?i=t._getSelf().data:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&e.modules.dataTree&&(i=e.modules.dataTree.children.find((function(e){return e instanceof Row&&e.element===t})))&&(i=i.data):i=null!=t&&e.data[this.field].find((function(e){return e.data[o.table.options.index]==t})),i&&(Array.isArray(e.data[this.field])&&(i=e.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},DataTree.prototype.getTreeChildren=function(t,e,o){var i=this,n=t.modules.dataTree,s=[];return n.children&&(Array.isArray(n.children)||(n.children=this.generateChildren(t)),n.children.forEach((function(t){t instanceof Row&&(s.push(e?t.getComponent():t),o&&(s=s.concat(i.getTreeChildren(t,e,o))))}))),s},DataTree.prototype.checkForRestyle=function(t){t.row.cells.indexOf(t)||t.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(t){return!!this.field&&void 0!==t[this.field]||!!this.elementField&&void 0!==t[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);var Download=function(t){this.table=t};Download.prototype.download=function(t,e,o,i,n){var s=this,a=!1;if("function"==typeof t?a=t:s.downloaders[t]?a=s.downloaders[t]:console.warn("Download Error - No such download type found: ",t),a){var r=this.generateExportList(i);a.call(this.table,r,o||{},(function(o,i){n?!0===n?s.triggerDownload(o,i,t,e,!0):n(o):s.triggerDownload(o,i,t,e)}))}},Download.prototype.generateExportList=function(t){var e=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,t||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),e.forEach((function(t){var e;"group"===t.type&&(e=t.columns[0],o&&o[t.indent]&&(e.value=o[t.indent](e.value,t.component._group.getRowCount(),t.component._group.getData(),t.component)))})),e},Download.prototype.triggerDownload=function(t,e,o,i,n){var s=document.createElement("a"),a=new Blob([t],{type:e});i=i||"Tabulator."+("function"==typeof o?"txt":o);(a=this.table.options.downloadReady.call(this.table,t,a))&&(n?window.open(window.URL.createObjectURL(a)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(a,i):(s.setAttribute("href",window.URL.createObjectURL(a)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(t,e,o){switch(e){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},Download.prototype.downloaders={csv:function(t,e,o){var i=e&&e.delimiter?e.delimiter:",",n=[],s=[];t.forEach((function(t){var e=[];switch(t.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":t.columns.forEach((function(t,e){t&&1===t.depth&&(s[e]=void 0===t.value||null===t.value?"":'"'+String(t.value).split('"').join('""')+'"')}));break;case"row":t.columns.forEach((function(t){if(t){switch(_typeof(t.value)){case"object":t.value=JSON.stringify(t.value);break;case"undefined":case"null":t.value=""}e.push('"'+String(t.value).split('"').join('""')+'"')}})),n.push(e.join(i))}})),s.length&&n.unshift(s.join(i)),n=n.join("\n"),e.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(t,e,o){var i=[];t.forEach((function(t){var e={};switch(t.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":t.columns.forEach((function(t){t&&(e[t.component.getField()]=t.value)})),i.push(e)}})),o(i=JSON.stringify(i,null,"\t"),"application/json")},pdf:function(t,e,o){var i=[],n=[],s={},a=e.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},r=e.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},l=e.jsPDF||{},u=e&&e.title?e.title:"";function c(t,e){var o=[];return t.columns.forEach((function(t){var i;if(t){switch(_typeof(t.value)){case"object":t.value=JSON.stringify(t.value);break;case"undefined":case"null":t.value=""}i={content:t.value,colSpan:t.width,rowSpan:t.height},e&&(i.styles=e),o.push(i)}else o.push("")})),o}l.orientation||(l.orientation=e.orientation||"landscape"),l.unit||(l.unit="pt"),t.forEach((function(t){switch(t.type){case"header":i.push(c(t));break;case"group":n.push(c(t,a));break;case"calc":n.push(c(t,r));break;case"row":n.push(c(t))}}));var d=new jsPDF(l);e&&e.autoTable&&(s="function"==typeof e.autoTable?e.autoTable(d)||{}:e.autoTable),u&&(s.addPageContent=function(t){d.text(u,40,30)}),s.head=i,s.body=n,d.autoTable(s),e&&e.documentProcessing&&e.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(t,e,o){var i=e.sheetName||"Sheet1",n=XLSX.utils.book_new();function s(){var e=[],o=[],i={},n={s:{c:0,r:0},e:{c:t[0]?t[0].columns.reduce((function(t,e){return t+(e&&e.width?e.width:1)}),0):0,r:t.length}};return t.forEach((function(t,i){var n=[];t.columns.forEach((function(t,e){t?(n.push(t.value instanceof Date||"object"!==_typeof(t.value)?t.value:JSON.stringify(t.value)),(t.width>1||t.height>-1)&&o.push({s:{r:i,c:e},e:{r:i+t.height-1,c:e+t.width-1}})):n.push("")})),e.push(n)})),XLSX.utils.sheet_add_aoa(i,e),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}if(n.SheetNames=[],n.Sheets={},e.sheetOnly)o(s());else{if(e.sheets)for(var a in e.sheets)!0===e.sheets[a]?(n.SheetNames.push(a),n.Sheets[a]=s()):(n.SheetNames.push(a),this.modules.comms.send(e.sheets[a],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function(t){n.Sheets[a]=t}}));else n.SheetNames.push(i),n.Sheets[i]=s();e.documentProcessing&&(n=e.documentProcessing(n)),o(function(t){for(var e=new ArrayBuffer(t.length),o=new Uint8Array(e),i=0;i!=t.length;++i)o[i]=255&t.charCodeAt(i);return e}(XLSX.write(n,{bookType:"xlsx",bookSST:!0,type:"binary"})),"application/octet-stream")}},html:function(t,e,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(t),"text/html")}},Tabulator.prototype.registerModule("download",Download);var Edit=function(t){this.table=t,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(t){var e={editor:!1,blocked:!1,check:t.definition.editable,params:t.definition.editorParams||{}};switch(_typeof(t.definition.editor)){case"string":"tick"===t.definition.editor&&(t.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[t.definition.editor]?e.editor=this.editors[t.definition.editor]:console.warn("Editor Error - No such editor found: ",t.definition.editor);break;case"function":e.editor=t.definition.editor;break;case"boolean":!0===t.definition.editor&&("function"!=typeof t.definition.formatter?("tick"===t.definition.formatter&&(t.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[t.definition.formatter]?e.editor=this.editors[t.definition.formatter]:e.editor=this.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",t.definition.formatter))}e.editor&&(t.modules.edit=e)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(t){var e,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,e=o.getElement(),t?o.validate():e.classList.remove("tabulator-validation-fail"),e.classList.remove("tabulator-editing");e.firstChild;)e.removeChild(e.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var t=this.currentCell,e=this.currentCell.getComponent();this.clearEditor(!0),t.setValueActual(t.getValue()),t.cellRendered(),("textarea"==t.column.definition.editor||t.column.definition.variableHeight)&&t.row.normalizeHeight(!0),t.column.cellEvents.cellEditCancelled&&t.column.cellEvents.cellEditCancelled.call(this.table,e),this.table.options.cellEditCancelled.call(this.table,e)}},Edit.prototype.bindEditor=function(t){var e=this,o=t.getElement();o.setAttribute("tabindex",0),o.addEventListener("click",(function(t){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})})),o.addEventListener("mousedown",(function(t){2===t.button?t.preventDefault():e.mouseClick=!0})),o.addEventListener("focus",(function(o){e.recursionBlock||e.edit(t,o,!1)}))},Edit.prototype.focusCellNoEvent=function(t,e){this.recursionBlock=!0,e&&"ie"===this.table.browser||t.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(t,e){this.focusCellNoEvent(t),this.edit(t,!1,e)},Edit.prototype.focusScrollAdjust=function(t){if("virtual"==this.table.rowManager.getRenderMode()){var e=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=t.row.getElement();i.offsetTop;i.offsetTop<e?this.table.rowManager.element.scrollTop-=e-i.offsetTop:i.offsetTop+i.offsetHeight>o&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o);var n=this.table.rowManager.element.scrollLeft,s=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,a=t.getElement();a.offsetLeft;this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin),s-=parseInt(this.table.modules.frozenColumns.rightMargin)),a.offsetLeft<n?this.table.rowManager.element.scrollLeft-=n-a.offsetLeft:a.offsetLeft+a.offsetWidth>s&&(this.table.rowManager.element.scrollLeft+=a.offsetLeft+a.offsetWidth-s)}},Edit.prototype.edit=function(t,e,o){var i,n,s,a=this,r=!0,l=function(){},u=t.getElement();if(!this.currentCell){if(t.column.modules.edit.blocked)return this.mouseClick=!1,u.blur(),!1;switch(e&&e.stopPropagation(),_typeof(t.column.modules.edit.check)){case"function":r=t.column.modules.edit.check(t.getComponent());break;case"boolean":r=t.column.modules.edit.check}if(r||o){if(a.cancelEdit(),a.currentCell=t,this.focusScrollAdjust(t),n=t.getComponent(),this.mouseClick&&(this.mouseClick=!1,t.column.cellEvents.cellClick&&t.column.cellEvents.cellClick.call(this.table,e,n)),t.column.cellEvents.cellEditing&&t.column.cellEvents.cellEditing.call(this.table,n),a.table.options.cellEditing.call(this.table,n),s="function"==typeof t.column.modules.edit.params?t.column.modules.edit.params(n):t.column.modules.edit.params,!1===(i=t.column.modules.edit.editor.call(a,n,(function(t){l=t}),(function(e){if(a.currentCell===t){var o=!0;return t.column.modules.validate&&a.table.modExists("validate")&&"manual"!=a.table.options.validationMode&&(o=a.table.modules.validate.validate(t.column.modules.validate,t,e)),!0===o||"highlight"===a.table.options.validationMode?(a.clearEditor(),t.modules.edit||(t.modules.edit={}),t.modules.edit.edited=!0,-1==a.editedCells.indexOf(t)&&a.editedCells.push(t),t.setValue(e,!0),a.table.options.dataTree&&a.table.modExists("dataTree")&&a.table.modules.dataTree.checkForRestyle(t),!0===o||(u.classList.add("tabulator-validation-fail"),a.table.options.validationFailed.call(a.table,t.getComponent(),e,o),!1)):(a.invalidEdit=!0,u.classList.add("tabulator-validation-fail"),a.focusCellNoEvent(t,!0),l(),a.table.options.validationFailed.call(a.table,t.getComponent(),e,o),!1)}}),(function(){a.currentCell===t&&(a.cancelEdit(),a.table.options.dataTree&&a.table.modExists("dataTree")&&a.table.modules.dataTree.checkForRestyle(t))}),s)))return u.blur(),!1;if(!(i instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",i),u.blur(),!1;for(u.classList.add("tabulator-editing"),t.row.getElement().classList.add("tabulator-row-editing");u.firstChild;)u.removeChild(u.firstChild);u.appendChild(i),l();for(var c=u.children,d=0;d<c.length;d++)c[d].addEventListener("click",(function(t){t.stopPropagation()}));return!0}return this.mouseClick=!1,u.blur(),!1}this.invalidEdit||this.cancelEdit()},Edit.prototype.maskInput=function(t,e){var o=e.mask,i=void 0!==e.maskLetterChar?e.maskLetterChar:"A",n=void 0!==e.maskNumberChar?e.maskNumberChar:"9",s=void 0!==e.maskWildcardChar?e.maskWildcardChar:"*";function a(e){var r=o[e];void 0!==r&&r!==s&&r!==i&&r!==n&&(t.value=t.value+""+r,a(e+1))}t.addEventListener("keydown",(function(e){var a=t.value.length,r=e.key;if(e.keyCode>46){if(a>=o.length)return e.preventDefault(),e.stopPropagation(),!1,!1;switch(o[a]){case i:if(r.toUpperCase()==r.toLowerCase())return e.preventDefault(),e.stopPropagation(),!1,!1;break;case n:if(isNaN(r))return e.preventDefault(),e.stopPropagation(),!1,!1;break;case s:break;default:if(r!==o[a])return e.preventDefault(),e.stopPropagation(),!1,!1}!0}})),t.addEventListener("keyup",(function(o){o.keyCode>46&&e.maskAutoFill&&a(t.value.length)})),t.placeholder||(t.placeholder=o),e.maskAutoFill&&a(t.value.length)},Edit.prototype.getEditedCells=function(){var t=[];return this.editedCells.forEach((function(e){t.push(e.getComponent())})),t},Edit.prototype.clearEdited=function(t){var e;t.modules.edit&&t.modules.edit.edited&&(t.modules.edit.edited=!1,t.modules.validate&&(t.modules.validate.invalid=!1)),(e=this.editedCells.indexOf(t))>-1&&this.editedCells.splice(e,1)},Edit.prototype.editors={input:function(t,e,o,i,n){var s=t.getValue(),a=document.createElement("input");if(a.setAttribute("type",n.search?"search":"text"),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var r in n.elementAttributes)"+"==r.charAt(0)?(r=r.slice(1),a.setAttribute(r,a.getAttribute(r)+n.elementAttributes["+"+r])):a.setAttribute(r,n.elementAttributes[r]);function l(t){null==s&&""!==a.value||a.value!==s?o(a.value)&&(s=a.value):i()}return a.value=void 0!==s?s:"",e((function(){a.focus({preventScroll:!0}),a.style.height="100%"})),a.addEventListener("change",l),a.addEventListener("blur",l),a.addEventListener("keydown",(function(t){switch(t.keyCode){case 13:l();break;case 27:i();break;case 35:case 36:t.stopPropagation()}})),n.mask&&this.table.modules.edit.maskInput(a,n),a},textarea:function(t,e,o,i,n){var s=t.getValue(),a=n.verticalNavigation||"hybrid",r=String(null!=s?s:""),l=((r.match(/(?:\r\n|\r|\n)/g)||[]).length,document.createElement("textarea")),u=0;if(l.style.display="block",l.style.padding="2px",l.style.height="100%",l.style.width="100%",l.style.boxSizing="border-box",l.style.whiteSpace="pre-wrap",l.style.resize="none",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);function d(e){null==s&&""!==l.value||l.value!==s?(o(l.value)&&(s=l.value),setTimeout((function(){t.getRow().normalizeHeight()}),300)):i()}return l.value=r,e((function(){l.focus({preventScroll:!0}),l.style.height="100%",l.scrollHeight,l.style.height=l.scrollHeight+"px",t.getRow().normalizeHeight()})),l.addEventListener("change",d),l.addEventListener("blur",d),l.addEventListener("keyup",(function(){l.style.height="";var e=l.scrollHeight;l.style.height=e+"px",e!=u&&(u=e,t.getRow().normalizeHeight())})),l.addEventListener("keydown",(function(t){switch(t.keyCode){case 27:i();break;case 38:("editor"==a||"hybrid"==a&&l.selectionStart)&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 40:("editor"==a||"hybrid"==a&&l.selectionStart!==l.value.length)&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 35:case 36:t.stopPropagation()}})),n.mask&&this.table.modules.edit.maskInput(l,n),l},number:function(t,e,o,i,n){var s=t.getValue(),a=n.verticalNavigation||"editor",r=document.createElement("input");if(r.setAttribute("type","number"),void 0!==n.max&&r.setAttribute("max",n.max),void 0!==n.min&&r.setAttribute("min",n.min),void 0!==n.step&&r.setAttribute("step",n.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),r.setAttribute(l,r.getAttribute(l)+n.elementAttributes["+"+l])):r.setAttribute(l,n.elementAttributes[l]);r.value=s;var u=function(t){c()};function c(){var t=r.value;isNaN(t)||""===t||(t=Number(t)),t!==s?o(t)&&(s=t):i()}return e((function(){r.removeEventListener("blur",u),r.focus({preventScroll:!0}),r.style.height="100%",r.addEventListener("blur",u)})),r.addEventListener("keydown",(function(t){switch(t.keyCode){case 13:c();break;case 27:i();break;case 38:case 40:"editor"==a&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 35:case 36:t.stopPropagation()}})),n.mask&&this.table.modules.edit.maskInput(r,n),r},range:function(t,e,o,i,n){var s=t.getValue(),a=document.createElement("input");if(a.setAttribute("type","range"),void 0!==n.max&&a.setAttribute("max",n.max),void 0!==n.min&&a.setAttribute("min",n.min),void 0!==n.step&&a.setAttribute("step",n.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var r in n.elementAttributes)"+"==r.charAt(0)?(r=r.slice(1),a.setAttribute(r,a.getAttribute(r)+n.elementAttributes["+"+r])):a.setAttribute(r,n.elementAttributes[r]);function l(){var t=a.value;isNaN(t)||""===t||(t=Number(t)),t!=s?o(t)&&(s=t):i()}return a.value=s,e((function(){a.focus({preventScroll:!0}),a.style.height="100%"})),a.addEventListener("blur",(function(t){l()})),a.addEventListener("keydown",(function(t){switch(t.keyCode){case 13:l();break;case 27:i()}})),a},select:function(t,e,o,i,n){var s=this,a=this,r=t.getElement(),l=t.getValue(),u=n.verticalNavigation||"editor",c=void 0!==l||null===l?Array.isArray(l)?l:[l]:void 0!==n.defaultValue?n.defaultValue:[],d=document.createElement("input"),h=document.createElement("div"),p=n.multiselect,m=[],f={},g=[],b=[],v=!0,w=!1;function y(e){var o,i={},s=a.table.getData();return(o=e?a.table.columnManager.getColumnByField(e):t.getColumn()._getSelf())?(s.forEach((function(t){var e=o.getFieldValue(t);null!=e&&""!==e&&(i[e]=!0)})),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create select lookup list:",e),i}function C(e,o){var i=[],s=[];function a(t){t={label:t.label,value:t.value,itemParams:t.itemParams,elementAttributes:t.elementAttributes,element:!1};return o.indexOf(t.value)>-1&&R(t),i.push(t),s.push(t),t}if("function"==typeof e&&(e=e(t)),Array.isArray(e))e.forEach((function(t){var e;"object"===(void 0===t?"undefined":_typeof(t))?t.options?(e={label:t.label,group:!0,itemParams:t.itemParams,elementAttributes:t.elementAttributes,element:!1},s.push(e),t.options.forEach((function(t){a(t)}))):a(t):(e={label:t,value:t,element:!1},o.indexOf(e.value)>-1&&R(e),i.push(e),s.push(e))}));else for(var r in e){var l={label:e[r],value:r,element:!1};o.indexOf(l.value)>-1&&R(l),i.push(l),s.push(l)}m=i,g=s,function(){for(;h.firstChild;)h.removeChild(h.firstChild);g.forEach((function(e){var o=e.element;if(!o){if(o=document.createElement("div"),e.label=n.listItemFormatter?n.listItemFormatter(e.value,e.label,t,o,e.itemParams):e.label,e.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===e.label?"&nbsp;":e.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===e.label?"&nbsp;":e.label,o.addEventListener("click",(function(){w=!0,setTimeout((function(){w=!1}),10),p?(M(e),d.focus()):T(e)})),b.indexOf(e)>-1&&o.classList.add("active")),e.elementAttributes&&"object"==_typeof(e.elementAttributes))for(var i in e.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,d.getAttribute(i)+e.elementAttributes["+"+i])):o.setAttribute(i,e.elementAttributes[i]);o.addEventListener("mousedown",(function(){v=!1,setTimeout((function(){v=!0}),10)})),e.element=o}h.appendChild(o)}))}()}function E(t,e){!p&&f&&f.element&&f.element.classList.remove("active"),f&&f.element&&f.element.classList.remove("focused"),f=t,t.element&&(t.element.classList.add("focused"),e&&t.element.classList.add("active")),t&&t.element&&t.element.scrollIntoView&&t.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function R(t){-1==b.indexOf(t)&&(b.push(t),E(t,!0)),D()}function x(t){var e=b[t];t>-1&&(b.splice(t,1),e.element&&e.element.classList.remove("active"))}function M(t){t||(t=f);var e=b.indexOf(t);e>-1?x(e):(!0!==p&&b.length>=p&&x(0),R(t)),D()}function T(t){k(),t||(t=f),t&&(d.value=t.label,o(t.value)),c=d.value}function L(t){t||k();var e=[];b.forEach((function(t){e.push(t.value)})),c=d.value,o(e)}function D(){var t=[];b.forEach((function(e){t.push(e.label)})),d.value=t.join(", "),!1===a.currentCell&&L(!0)}function z(){k(),i()}function k(){h.parentNode&&h.parentNode.removeChild(h),a.table.rowManager.element.removeEventListener("scroll",z)}if((Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),d.setAttribute("type","text"),d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",d.style.cursor="default",d.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var H in n.elementAttributes)"+"==H.charAt(0)?(H=H.slice(1),d.setAttribute(H,d.getAttribute(H)+n.elementAttributes["+"+H])):d.setAttribute(H,n.elementAttributes[H]);return d.value=void 0!==l||null===l?l:"",d.addEventListener("search",(function(t){d.value||(!function(){for(var t=b.length,e=0;e<t;e++)x(0)}(),L())})),d.addEventListener("keydown",(function(t){var e;switch(t.keyCode){case 38:e=m.indexOf(f),("editor"==u||"hybrid"==u&&e)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e>0&&E(m[e-1],!p));break;case 40:e=m.indexOf(f),("editor"==u||"hybrid"==u&&e<m.length-1)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e<m.length-1&&E(-1==e?m[0]:m[e+1],!p));break;case 37:case 39:t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault();break;case 13:p?M():T();break;case 27:z();break;case 9:break;default:!1===a.currentCell&&t.preventDefault()}})),d.addEventListener("blur",(function(t){v&&(p?L():z())})),d.addEventListener("focus",(function(t){w||function(){if(b=[],!h.parentNode){!0===n.values?C(y(),c):"string"==typeof n.values?C(y(n.values),c):C(n.values||[],c);var t=Tabulator.prototype.helpers.elOffset(r);h.style.minWidth=r.offsetWidth+"px",h.style.top=t.top+r.offsetHeight+"px",h.style.left=t.left+"px",h.addEventListener("mousedown",(function(t){v=!1,setTimeout((function(){v=!0}),10)})),document.body.appendChild(h)}}()})),(h=document.createElement("div")).classList.add("tabulator-edit-select-list"),e((function(){d.style.height="100%",d.focus({preventScroll:!0})})),setTimeout((function(){s.table.rowManager.element.addEventListener("scroll",z)}),10),d},autocomplete:function(t,e,o,i,n){var s=this,a=this,r=t.getElement(),l=t.getValue(),u=n.verticalNavigation||"editor",c=void 0!==l||null===l?l:void 0!==n.defaultValue?n.defaultValue:"",d=document.createElement("input"),h=document.createElement("div"),p=[],m=!1,f=!0,g=!1;if(d.setAttribute("type","search"),d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var b in n.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),d.setAttribute(b,d.getAttribute(b)+n.elementAttributes["+"+b])):d.setAttribute(b,n.elementAttributes[b]);function v(){!0===n.values?g=w():"string"==typeof n.values&&(g=w(n.values))}function w(e){var o,i={},s=a.table.getData();return(o=e?a.table.columnManager.getColumnByField(e):t.getColumn()._getSelf())?(s.forEach((function(t){var e=o.getFieldValue(t);null!=e&&""!==e&&(i[e]=!0)})),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create autocomplete lookup list:",e),i}function y(t,e){var o,i,s=[];o=g||(n.values||[]),n.searchFunc?(s=n.searchFunc(t,o))instanceof Promise?(C(void 0!==n.searchingPlaceholder?n.searchingPlaceholder:"Searching..."),s.then((function(t){x(E(t),e)})).catch((function(t){console.err("error in autocomplete search promise:",t)}))):x(E(s),e):(i=E(o),""===t?n.showListOnEmpty&&(s=i):i.forEach((function(e){null===e.value&&void 0===e.value||(String(e.value).toLowerCase().indexOf(String(t).toLowerCase())>-1||String(e.title).toLowerCase().indexOf(String(t).toLowerCase())>-1)&&s.push(e)})),x(s,e))}function C(t){var e=document.createElement("div");R(),!1!==t&&(e.classList.add("tabulator-edit-select-list-notice"),e.tabIndex=0,t instanceof Node?e.appendChild(t):e.innerHTML=t,h.appendChild(e))}function E(t){var e=[];if(Array.isArray(t))t.forEach((function(t){var o={};"object"===(void 0===t?"undefined":_typeof(t))?(o.title=n.listItemFormatter?n.listItemFormatter(t.value,t.label):t.label,o.value=t.value):(o.title=n.listItemFormatter?n.listItemFormatter(t,t):t,o.value=t),e.push(o)}));else for(var o in t){var i={title:n.listItemFormatter?n.listItemFormatter(o,t[o]):t[o],value:o};e.push(i)}return e}function R(){for(;h.firstChild;)h.removeChild(h.firstChild)}function x(t,e){t.length?function(t,e){var o=!1;R(),(p=t).forEach((function(t){var i=t.element;i||((i=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=t.title,i.addEventListener("click",(function(e){T(t),M()})),i.addEventListener("mousedown",(function(t){f=!1,setTimeout((function(){f=!0}),10)})),t.element=i,e&&t.value==l&&(d.value=t.title,t.element.classList.add("active"),o=!0),t===m&&(t.element.classList.add("active"),o=!0)),h.appendChild(i)})),o||T(!1)}(t,e):n.emptyPlaceholder&&C(n.emptyPlaceholder)}function M(){L(),m?l!==m.value?(l=m.value,d.value=m.title,o(m.value)):i():n.freetext||n.allowEmpty&&""===d.value?(l=d.value,o(d.value)):i()}function T(t,e){m&&m.element&&m.element.classList.remove("active"),m=t,t&&t.element&&t.element.classList.add("active"),t&&t.element&&t.element.scrollIntoView&&t.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function L(){h.parentNode&&h.parentNode.removeChild(h),a.table.rowManager.element.removeEventListener("scroll",D)}function D(){L(),i()}return h.classList.add("tabulator-edit-select-list"),h.addEventListener("mousedown",(function(t){f=!1,setTimeout((function(){f=!0}),10)})),d.addEventListener("keydown",(function(t){var e;switch(t.keyCode){case 38:e=p.indexOf(m),("editor"==u||"hybrid"==u&&e)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),T(e>0&&p[e-1]));break;case 40:e=p.indexOf(m),("editor"==u||"hybrid"==u&&e<p.length-1)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e<p.length-1&&T(-1==e?p[0]:p[e+1]));break;case 37:case 39:t.stopImmediatePropagation(),t.stopPropagation();break;case 13:M();break;case 27:D();break;case 36:case 35:t.stopImmediatePropagation()}})),d.addEventListener("keyup",(function(t){switch(t.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:y(d.value)}})),d.addEventListener("search",(function(t){y(d.value)})),d.addEventListener("blur",(function(t){f&&M()})),d.addEventListener("focus",(function(t){var e=c;v(),function(){if(!h.parentNode){for(;h.firstChild;)h.removeChild(h.firstChild);var t=Tabulator.prototype.helpers.elOffset(r);h.style.minWidth=r.offsetWidth+"px",h.style.top=t.top+r.offsetHeight+"px",h.style.left=t.left+"px",document.body.appendChild(h)}}(),d.value=e,y(e,!0)})),e((function(){d.style.height="100%",d.focus({preventScroll:!0})})),n.mask&&this.table.modules.edit.maskInput(d,n),setTimeout((function(){s.table.rowManager.element.addEventListener("scroll",D)}),10),v(),d.value=c,y(c,!0),d},star:function(t,e,o,i,n){var s=this,a=t.getElement(),r=t.getValue(),l=a.getElementsByTagName("svg").length||5,u=a.getElementsByTagName("svg")[0]?a.getElementsByTagName("svg")[0].getAttribute("width"):14,c=[],d=document.createElement("div"),h=document.createElementNS("http://www.w3.org/2000/svg","svg");function p(t){c.forEach((function(e,o){o<t?("ie"==s.table.browser?e.setAttribute("class","tabulator-star-active"):e.classList.replace("tabulator-star-inactive","tabulator-star-active"),e.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==s.table.browser?e.setAttribute("class","tabulator-star-inactive"):e.classList.replace("tabulator-star-active","tabulator-star-inactive"),e.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')}))}function m(t){var e=document.createElement("span"),i=h.cloneNode(!0);c.push(i),e.addEventListener("mouseenter",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),p(t)})),e.addEventListener("mousemove",(function(t){t.stopPropagation(),t.stopImmediatePropagation()})),e.addEventListener("click",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),o(t),a.blur()})),e.appendChild(i),d.appendChild(e)}function f(t){r=t,p(t)}if(a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",d.style.verticalAlign="middle",d.style.display="inline-block",d.style.padding="4px",h.setAttribute("width",u),h.setAttribute("height",u),h.setAttribute("viewBox","0 0 512 512"),h.setAttribute("xml:space","preserve"),h.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var g in n.elementAttributes)"+"==g.charAt(0)?(g=g.slice(1),d.setAttribute(g,d.getAttribute(g)+n.elementAttributes["+"+g])):d.setAttribute(g,n.elementAttributes[g]);for(var b=1;b<=l;b++)m(b);return p(r=Math.min(parseInt(r),l)),d.addEventListener("mousemove",(function(t){p(0)})),d.addEventListener("click",(function(t){o(0)})),a.addEventListener("blur",(function(t){i()})),a.addEventListener("keydown",(function(t){switch(t.keyCode){case 39:f(r+1);break;case 37:f(r-1);break;case 13:o(r);break;case 27:i()}})),d},progress:function(t,e,o,i,n){var s,a,r=t.getElement(),l=void 0===n.max?r.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?r.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,c=(l-u)/100,d=t.getValue()||0,h=document.createElement("div"),p=document.createElement("div");function m(){var t=c*Math.round(p.offsetWidth/(r.clientWidth/100))+u;o(t),r.setAttribute("aria-valuenow",t),r.setAttribute("aria-label",d)}if(h.style.position="absolute",h.style.right="0",h.style.top="0",h.style.bottom="0",h.style.width="5px",h.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);return r.style.padding="4px 4px",d=Math.min(parseFloat(d),l),d=Math.max(parseFloat(d),u),d=Math.round((d-u)/c),p.style.width=d+"%",r.setAttribute("aria-valuemin",u),r.setAttribute("aria-valuemax",l),p.appendChild(h),h.addEventListener("mousedown",(function(t){s=t.screenX,a=p.offsetWidth})),h.addEventListener("mouseover",(function(){h.style.cursor="ew-resize"})),r.addEventListener("mousemove",(function(t){s&&(p.style.width=a+t.screenX-s+"px")})),r.addEventListener("mouseup",(function(t){s&&(t.stopPropagation(),t.stopImmediatePropagation(),s=!1,a=!1,m())})),r.addEventListener("keydown",(function(t){switch(t.keyCode){case 39:t.preventDefault(),p.style.width=p.clientWidth+r.clientWidth/100+"px";break;case 37:t.preventDefault(),p.style.width=p.clientWidth-r.clientWidth/100+"px";break;case 9:case 13:m();break;case 27:i()}})),r.addEventListener("blur",(function(){i()})),p},tickCross:function(t,e,o,i,n){var s=t.getValue(),a=document.createElement("input"),r=n.tristate,l=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(a.setAttribute("type","checkbox"),a.style.marginTop="5px",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),a.setAttribute(c,a.getAttribute(c)+n.elementAttributes["+"+c])):a.setAttribute(c,n.elementAttributes[c]);function d(t){return r?t?u?l:a.checked:a.checked&&!u?(a.checked=!1,a.indeterminate=!0,u=!0,l):(u=!1,a.checked):a.checked}return a.value=s,!r||void 0!==s&&s!==l&&""!==s||(u=!0,a.indeterminate=!0),"firefox"!=this.table.browser&&e((function(){a.focus({preventScroll:!0})})),a.checked=!0===s||"true"===s||"True"===s||1===s,e((function(){a.focus()})),a.addEventListener("change",(function(t){o(d())})),a.addEventListener("blur",(function(t){o(d(!0))})),a.addEventListener("keydown",(function(t){13==t.keyCode&&o(d()),27==t.keyCode&&i()})),a}},Tabulator.prototype.registerModule("edit",Edit);var ExportRow=function(t,e,o,i){this.type=t,this.columns=e,this.component=o||!1,this.indent=i||0},ExportColumn=function(t,e,o,i,n){this.value=t,this.component=e||!1,this.width=o,this.height=i,this.depth=n},Export=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(t,e,o,i){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},Export.prototype.genereateTable=function(t,e,o,i){var n=this.generateExportList(t,e,o,i);return this.genereateTableElement(n)},Export.prototype.rowLookup=function(t){var e=this,o=[];if("function"==typeof t)t.call(this.table).forEach((function(t){(t=e.table.rowManager.findRow(t))&&o.push(t)}));else switch(t){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],o)},Export.prototype.generateColumnGroupHeaders=function(){var t=this,e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((function(o){var i=t.processColumnGroup(o);i&&e.push(i)})),e},Export.prototype.processColumnGroup=function(t){var e=this,o=t.columns,i=0,n={title:t.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||t.definition.title,column:t,depth:1};if(o.length){if(n.subGroups=[],n.width=0,o.forEach((function(t){var o=e.processColumnGroup(t);o&&(n.width+=o.width,n.subGroups.push(o),o.depth>i&&(i=o.depth))})),n.depth+=i,!n.width)return!1}else{if(!this.columnVisCheck(t))return!1;n.width=1}return n},Export.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(t){var e=[],o=0,i=[];return t.forEach((function(t){t.depth>o&&(o=t.depth)})),t.forEach((function(t){!function t(i,n){var s=o-n;if(void 0===e[n]&&(e[n]=[]),i.height=i.subGroups?1:s-i.depth+1,e[n].push(i),i.height>1)for(var a=1;a<i.height;a++)void 0===e[n+a]&&(e[n+a]=[]),e[n+a].push(!1);if(i.width>1)for(var r=1;r<i.width;r++)e[n].push(!1);i.subGroups&&i.subGroups.forEach((function(e){t(e,n+1)}))}(t,0)})),e.forEach((function(t){var e=[];t.forEach((function(t){t?e.push(new ExportColumn(t.title,t.column.getComponent(),t.width,t.height,t.depth)):e.push(null)})),i.push(new ExportRow("header",e))})),i},Export.prototype.bodyToExportRows=function(t){var e=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach((function(t){e.columnVisCheck(t)&&o.push(t.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&t.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&t.push(this.table.modules.columnCalcs.botRow)),(t=t.filter((function(t){switch(t.type){case"group":return!1!==e.config.rowGroups;case"calc":return!1!==e.config.columnCalcs;case"row":return!(e.table.options.dataTree&&!1===e.config.dataTree&&t.modules.dataTree.parent)}return!0}))).forEach((function(t,n){var s=t.getData(e.colVisProp),a=[],r=0;switch(t.type){case"group":r=t.level,a.push(new ExportColumn(t.key,t.getComponent(),o.length,1));break;case"calc":case"row":o.forEach((function(t){a.push(new ExportColumn(t._column.getFieldValue(s),t,1,1))})),e.table.options.dataTree&&!1!==e.config.dataTree&&(r=t.modules.dataTree.index)}i.push(new ExportRow(t.type,a,t.getComponent(),r))})),i},Export.prototype.genereateTableElement=function(t){var e=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r={};return r.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(r.treeElementField=this.table.modules.dataTree.elementField),r.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r.groupHeader&&!Array.isArray(r.groupHeader)&&(r.groupHeader=[r.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),t.forEach((function(t,o){switch(t.type){case"header":i.appendChild(e.genereateHeaderElement(t,r,s));break;case"group":n.appendChild(e.genereateGroupElement(t,r,s));break;case"calc":n.appendChild(e.genereateCalcElement(t,r,s));break;case"row":var a=e.genereateRowElement(t,r,s);e.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(a)}})),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},Export.prototype.lookupTableStyles=function(){var t={};return this.cloneTableStyle&&window.getComputedStyle&&(t.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),t.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),t.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),t.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),t.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],t.firstRow&&(t.styleCells=t.firstRow.getElementsByClassName("tabulator-cell"),t.firstCell=t.styleCells[0],t.lastCell=t.styleCells[t.styleCells.length-1])),t},Export.prototype.genereateHeaderElement=function(t,e,o){var i=this,n=document.createElement("tr");return t.columns.forEach((function(t){if(t){var e=document.createElement("th"),o=t.component._column.definition.cssClass?t.component._column.definition.cssClass.split(" "):[];e.colSpan=t.width,e.rowSpan=t.height,e.innerHTML=t.value,i.cloneTableStyle&&(e.style.boxSizing="border-box"),o.forEach((function(t){e.classList.add(t)})),i.mapElementStyles(t.component.getElement(),e,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(t.component._column.contentElement,e,["padding-top","padding-left","padding-right","padding-bottom"]),t.component._column.visible?i.mapElementStyles(t.component.getElement(),e,["width"]):t.component._column.definition.width&&(e.style.width=t.component._column.definition.width+"px"),t.component._column.parent&&i.mapElementStyles(t.component._column.parent.groupElement,e,["border-top"]),n.appendChild(e)}})),n},Export.prototype.genereateGroupElement=function(t,e,o){var i=document.createElement("tr"),n=document.createElement("td"),s=t.columns[0];return i.classList.add("tabulator-print-table-row"),e.groupHeader&&e.groupHeader[t.indent]?s.value=e.groupHeader[t.indent](s.value,t.component._group.getRowCount(),t.component._group.getData(),t.component):!1===e.groupHeader?s.value=s.value:s.value=t.component._group.generator(s.value,t.component._group.getRowCount(),t.component._group.getData(),t.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+t.indent),s.component.isVisible()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},Export.prototype.genereateCalcElement=function(t,e,o){var i=this.genereateRowElement(t,e,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},Export.prototype.genereateRowElement=function(t,e,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),t.columns.forEach((function(a){if(a){var r=document.createElement("td"),l=a.component._column,u=a.value,c={modules:{},getValue:function(){return u},getField:function(){return l.definition.field},getElement:function(){return r},getColumn:function(){return l.getComponent()},getData:function(){return t.component.getData()},getRow:function(){return t.component},getComponent:function(){return c},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach((function(t){r.classList.add(t)})),n.table.modExists("format")&&!1!==n.config.formatCells)u=n.table.modules.format.formatExportValue(c,n.colVisProp);else switch(void 0===u?"undefined":_typeof(u)){case"object":u=JSON.stringify(u);break;case"undefined":case"null":u="";break;default:u=u}u instanceof Node?r.appendChild(u):r.innerHTML=u,o.firstCell&&(n.mapElementStyles(o.firstCell,r,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(r.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(e.treeElementField&&e.treeElementField==l.field||!e.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&r.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),r.firstChild),t.component._row.modules.dataTree.branchEl&&r.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),r.firstChild)),s.appendChild(r),c.modules.format&&c.modules.format.renderedCallback&&c.modules.format.renderedCallback(),e.rowFormatter&&!1!==n.config.formatCells&&e.rowFormatter(t.component)}})),s},Export.prototype.genereateHTMLTable=function(t){var e=document.createElement("div");return e.appendChild(this.genereateTableElement(t)),e.innerHTML},Export.prototype.getHtml=function(t,e,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,e,t,i||"htmlOutput");return this.genereateHTMLTable(n)},Export.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(t);o.forEach((function(t){e.style[i[t]]=n.getPropertyValue(t)}))}}},Tabulator.prototype.registerModule("export",Export);var Filter=function(t){this.table=t,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(t,e){var o=this,i=t.getField();t.modules.filter={success:function(e){var n,s="input"==t.modules.filter.tagType&&"text"==t.modules.filter.attrType||"textarea"==t.modules.filter.tagType?"partial":"match",a="",r="";if(void 0===t.modules.filter.prevSuccess||t.modules.filter.prevSuccess!==e){if(t.modules.filter.prevSuccess=e,t.modules.filter.emptyFunc(e))delete o.headerFilters[i];else{switch(t.modules.filter.value=e,_typeof(t.definition.headerFilterFunc)){case"string":o.filters[t.definition.headerFilterFunc]?(a=t.definition.headerFilterFunc,n=function(i){var n=t.definition.headerFilterFuncParams||{},s=t.getFieldValue(i);return n="function"==typeof n?n(e,s,i):n,o.filters[t.definition.headerFilterFunc](e,s,i,n)}):console.warn("Header Filter Error - Matching filter function not found: ",t.definition.headerFilterFunc);break;case"function":a=n=function(o){var i=t.definition.headerFilterFuncParams||{},n=t.getFieldValue(o);return i="function"==typeof i?i(e,n,o):i,t.definition.headerFilterFunc(e,n,o,i)}}if(!n)switch(s){case"partial":n=function(o){var i=t.getFieldValue(o);return null!=i&&String(i).toLowerCase().indexOf(String(e).toLowerCase())>-1},a="like";break;default:n=function(o){return t.getFieldValue(o)==e},a="="}o.headerFilters[i]={value:e,func:n,type:a,params:{}}}r=JSON.stringify(o.headerFilters),o.prevHeaderFilterChangeCheck!==r&&(o.prevHeaderFilterChangeCheck=r,o.changed=!0,o.table.rowManager.filterRefresh())}return!0},attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(t)},Filter.prototype.generateHeaderFilterElement=function(t,e,o){var i,n,s,a,r,l,u,c=this,d=this,h=t.modules.filter.success,p=t.getField();if(t.modules.filter.headerElement&&t.modules.filter.headerElement.parentNode&&t.contentElement.removeChild(t.modules.filter.headerElement.parentNode),p){switch(t.modules.filter.emptyFunc=t.definition.headerFilterEmptyCheck||function(t){return!t&&"0"!==t},(i=document.createElement("div")).classList.add("tabulator-header-filter"),_typeof(t.definition.headerFilter)){case"string":d.table.modules.edit.editors[t.definition.headerFilter]?(n=d.table.modules.edit.editors[t.definition.headerFilter],"tick"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(t){return!0!==t&&!1!==t})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",t.definition.editor);break;case"function":n=t.definition.headerFilter;break;case"boolean":t.modules.edit&&t.modules.edit.editor?n=t.modules.edit.editor:t.definition.formatter&&d.table.modules.edit.editors[t.definition.formatter]?(n=d.table.modules.edit.editors[t.definition.formatter],"tick"!==t.definition.formatter&&"tickCross"!==t.definition.formatter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(t){return!0!==t&&!1!==t})):n=d.table.modules.edit.editors.input}if(n){if(a={getValue:function(){return void 0!==e?e:""},getField:function(){return t.definition.field},getElement:function(){return i},getColumn:function(){return t.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u="function"==typeof(u=t.definition.headerFilterParams||{})?u.call(d.table):u,!(s=n.call(this.table.modules.edit,a,(function(){}),h,(function(){}),u)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(s instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",s);p?d.table.modules.localize.bind("headerFilters|columns|"+t.definition.field,(function(t){s.setAttribute("placeholder",void 0!==t&&t?t:d.table.modules.localize.getText("headerFilters|default"))})):d.table.modules.localize.bind("headerFilters|default",(function(t){s.setAttribute("placeholder",void 0!==d.column.definition.headerFilterPlaceholder&&d.column.definition.headerFilterPlaceholder?d.column.definition.headerFilterPlaceholder:t)})),s.addEventListener("click",(function(t){t.stopPropagation(),s.focus()})),s.addEventListener("focus",(function(t){var e=c.table.columnManager.element.scrollLeft;e!==c.table.rowManager.element.scrollLeft&&(c.table.rowManager.scrollHorizontal(e),c.table.columnManager.scrollHorizontal(e))})),r=!1,l=function(t){r&&clearTimeout(r),r=setTimeout((function(){h(s.value)}),d.table.options.headerFilterLiveFilterDelay)},t.modules.filter.headerElement=s,t.modules.filter.attrType=s.hasAttribute("type")?s.getAttribute("type").toLowerCase():"",t.modules.filter.tagType=s.tagName.toLowerCase(),!1!==t.definition.headerFilterLiveFilter&&("autocomplete"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter&&("autocomplete"!==t.definition.editor&&"tickCross"!==t.definition.editor||!0!==t.definition.headerFilter)&&(s.addEventListener("keyup",l),s.addEventListener("search",l),"number"==t.modules.filter.attrType&&s.addEventListener("change",(function(t){h(s.value)})),"text"==t.modules.filter.attrType&&"ie"!==this.table.browser&&s.setAttribute("type","search")),"input"!=t.modules.filter.tagType&&"select"!=t.modules.filter.tagType&&"textarea"!=t.modules.filter.tagType||s.addEventListener("mousedown",(function(t){t.stopPropagation()}))),i.appendChild(s),t.contentElement.appendChild(i),o||d.headerFilterColumns.push(t)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",t.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(t){t.modules.filter&&t.modules.filter.headerElement&&(t.modules.filter.headerElement.style.display="none")}))},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(t){t.modules.filter&&t.modules.filter.headerElement&&(t.modules.filter.headerElement.style.display="")}))},Filter.prototype.setHeaderFilterFocus=function(t){t.modules.filter&&t.modules.filter.headerElement?t.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",t.getField())},Filter.prototype.getHeaderFilterValue=function(t){if(t.modules.filter&&t.modules.filter.headerElement)return t.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",t.getField())},Filter.prototype.setHeaderFilterValue=function(t,e){t&&(t.modules.filter&&t.modules.filter.headerElement?(this.generateHeaderFilterElement(t,e,!0),t.modules.filter.success(e)):console.warn("Column Filter Error - No header filter set on column:",t.getField()))},Filter.prototype.reloadHeaderFilter=function(t){t&&(t.modules.filter&&t.modules.filter.headerElement?this.generateHeaderFilterElement(t,t.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",t.getField()))},Filter.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Filter.prototype.setFilter=function(t,e,o,i){this.filterList=[],Array.isArray(t)||(t=[{field:t,type:e,value:o,params:i}]),this.addFilter(t)},Filter.prototype.addFilter=function(t,e,o,i){var n=this;Array.isArray(t)||(t=[{field:t,type:e,value:o,params:i}]),t.forEach((function(t){(t=n.findFilter(t))&&(n.filterList.push(t),n.changed=!0)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(t){var e,o=this;if(Array.isArray(t))return this.findSubFilters(t);var i=!1;return"function"==typeof t.field?i=function(e){return t.field(e,t.type||{})}:o.filters[t.type]?i=(e=o.table.columnManager.getColumnByField(t.field))?function(i){return o.filters[t.type](t.value,e.getFieldValue(i),i,t.params||{})}:function(e){return o.filters[t.type](t.value,e[t.field],e,t.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",t.type),t.func=i,!!t.func&&t},Filter.prototype.findSubFilters=function(t){var e=this,o=[];return t.forEach((function(t){(t=e.findFilter(t))&&o.push(t)})),!!o.length&&o},Filter.prototype.getFilters=function(t,e){var o=[];return t&&(o=this.getHeaderFilters()),e&&o.forEach((function(t){"function"==typeof t.type&&(t.type="function")})),o=o.concat(this.filtersToArray(this.filterList,e))},Filter.prototype.filtersToArray=function(t,e){var o=this,i=[];return t.forEach((function(t){var n;Array.isArray(t)?i.push(o.filtersToArray(t,e)):(n={field:t.field,type:t.type,value:t.value},e&&"function"==typeof n.type&&(n.type="function"),i.push(n))})),i},Filter.prototype.getHeaderFilters=function(){var t=[];for(var e in this.headerFilters)t.push({field:e,type:this.headerFilters[e].type,value:this.headerFilters[e].value});return t},Filter.prototype.removeFilter=function(t,e,o){var i=this;Array.isArray(t)||(t=[{field:t,type:e,value:o}]),t.forEach((function(t){var e=-1;(e="object"==_typeof(t.field)?i.filterList.findIndex((function(e){return t===e})):i.filterList.findIndex((function(e){return t.field===e.field&&t.type===e.type&&t.value===e.value})))>-1?(i.filterList.splice(e,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",t.type)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(t){this.filterList=[],t&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var t=this;this.headerFilters={},t.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((function(e){e.modules.filter.value=null,e.modules.filter.prevSuccess=void 0,t.reloadHeaderFilter(e)})),this.changed=!0},Filter.prototype.search=function(t,e,o,i){var n=this,s=[],a=[];return Array.isArray(e)||(e=[{field:e,type:o,value:i}]),e.forEach((function(t){(t=n.findFilter(t))&&a.push(t)})),this.table.rowManager.rows.forEach((function(e){var o=!0;a.forEach((function(t){n.filterRecurse(t,e.getData())||(o=!1)})),o&&s.push("data"===t?e.getData("data"):e.getComponent())})),s},Filter.prototype.filter=function(t,e){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=t.slice(0):t.forEach((function(t){o.filterRow(t)&&i.push(t)})),o.table.options.dataFiltered&&(i.forEach((function(t){n.push(t.getComponent())})),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},Filter.prototype.filterRow=function(t,e){var o=this,i=!0,n=t.getData();for(var s in o.filterList.forEach((function(t){o.filterRecurse(t,n)||(i=!1)})),o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},Filter.prototype.filterRecurse=function(t,e){var o=this,i=!1;return Array.isArray(t)?t.forEach((function(t){o.filterRecurse(t,e)&&(i=!0)})):i=t.func(e),i},Filter.prototype.filters={"=":function(t,e,o,i){return e==t},"<":function(t,e,o,i){return e<t},"<=":function(t,e,o,i){return e<=t},">":function(t,e,o,i){return e>t},">=":function(t,e,o,i){return e>=t},"!=":function(t,e,o,i){return e!=t},regex:function(t,e,o,i){return"string"==typeof t&&(t=new RegExp(t)),t.test(e)},like:function(t,e,o,i){return null==t?e===t:null!=e&&String(e).toLowerCase().indexOf(t.toLowerCase())>-1},keywords:function(t,e,o,i){var n=t.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null==e?"":e).toLowerCase(),a=[];return n.forEach((function(t){s.includes(t)&&a.push(!0)})),i.matchAll?a.length===n.length:!!a.length},starts:function(t,e,o,i){return null==t?e===t:null!=e&&String(e).toLowerCase().startsWith(t.toLowerCase())},ends:function(t,e,o,i){return null==t?e===t:null!=e&&String(e).toLowerCase().endsWith(t.toLowerCase())},in:function(t,e,o,i){return Array.isArray(t)?!t.length||t.indexOf(e)>-1:(console.warn("Filter Error - filter value is not an array:",t),!1)}},Tabulator.prototype.registerModule("filter",Filter);var Format=function(t){this.table=t};Format.prototype.initializeColumn=function(t){t.modules.format=this.lookupFormatter(t,""),void 0!==t.definition.formatterPrint&&(t.modules.format.print=this.lookupFormatter(t,"Print")),void 0!==t.definition.formatterClipboard&&(t.modules.format.clipboard=this.lookupFormatter(t,"Clipboard")),void 0!==t.definition.formatterHtmlOutput&&(t.modules.format.htmlOutput=this.lookupFormatter(t,"HtmlOutput"))},Format.prototype.lookupFormatter=function(t,e){var o={params:t.definition["formatter"+e+"Params"]||{}},i=t.definition["formatter"+e];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},Format.prototype.cellRendered=function(t){t.modules.format&&t.modules.format.renderedCallback&&!t.modules.format.rendered&&(t.modules.format.renderedCallback(),t.modules.format.rendered=!0)},Format.prototype.formatValue=function(t){var e=t.getComponent(),o="function"==typeof t.column.modules.format.params?t.column.modules.format.params(e):t.column.modules.format.params;return t.column.modules.format.formatter.call(this,e,o,(function(e){t.modules.format||(t.modules.format={}),t.modules.format.renderedCallback=e,t.modules.format.rendered=!1}))},Format.prototype.formatExportValue=function(t,e){var o,i=t.column.modules.format[e];if(i){return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,t.getComponent(),o,(function(e){t.modules.format||(t.modules.format={}),t.modules.format.renderedCallback=e,t.modules.format.rendered=!1}))}return this.formatValue(t)},Format.prototype.sanitizeHTML=function(t){if(t){var e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(t).replace(/[&<>"'`=\/]/g,(function(t){return e[t]}))}return t},Format.prototype.emptyToSpace=function(t){return null==t||""===t?"&nbsp;":t},Format.prototype.getFormatter=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.formatters[t]?t=this.formatters[t]:(console.warn("Formatter Error - No such formatter found: ",t),t=this.formatters.plaintext);break;case"function":t=t;break;default:t=this.formatters.plaintext}return t},Format.prototype.formatters={plaintext:function(t,e,o){return this.emptyToSpace(this.sanitizeHTML(t.getValue()))},html:function(t,e,o){return t.getValue()},textarea:function(t,e,o){return t.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(t.getValue()))},money:function(t,e,o){var i,n,s,a,r=parseFloat(t.getValue()),l=e.decimal||".",u=e.thousand||",",c=e.symbol||"",d=!!e.symbolAfter,h=void 0!==e.precision?e.precision:2;if(isNaN(r))return this.emptyToSpace(this.sanitizeHTML(t.getValue()));for(i=!1!==h?r.toFixed(h):r,n=(i=String(i).split("."))[0],s=i.length>1?l+i[1]:"",a=/(\d+)(\d{3})/;a.test(n);)n=n.replace(a,"$1"+u+"$2");return d?n+s+c:c+n+s},link:function(t,e,o){var i=t.getValue(),n=e.urlPrefix||"",s=e.download,a=i,r=document.createElement("a");if(e.labelField&&(a=t.getData()[e.labelField]),e.label)switch(_typeof(e.label)){case"string":a=e.label;break;case"function":a=e.label(t)}if(a){if(e.urlField&&(i=t.getData()[e.urlField]),e.url)switch(_typeof(e.url)){case"string":i=e.url;break;case"function":i=e.url(t)}return r.setAttribute("href",n+i),e.target&&r.setAttribute("target",e.target),e.download&&(s="function"==typeof s?s(t):!0===s?"":s,r.setAttribute("download",s)),r.innerHTML=this.emptyToSpace(this.sanitizeHTML(a)),r}return"&nbsp;"},image:function(t,e,o){var i=document.createElement("img");switch(i.setAttribute("src",t.getValue()),_typeof(e.height)){case"number":i.style.height=e.height+"px";break;case"string":i.style.height=e.height}switch(_typeof(e.width)){case"number":i.style.width=e.width+"px";break;case"string":i.style.width=e.width}return i.addEventListener("load",(function(){t.getRow().normalizeHeight()})),i},tickCross:function(t,e,o){var i=t.getValue(),n=t.getElement(),s=e.allowEmpty,a=e.allowTruthy,r=void 0!==e.tickElement?e.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',l=void 0!==e.crossElement?e.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return a&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),r||""):!s||"null"!==i&&""!==i&&null!=i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(t,e,o){var i=e.inputFormat||"YYYY-MM-DD hh:mm:ss",n=e.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==e.invalidPlaceholder?e.invalidPlaceholder:"",a=t.getValue(),r=moment(a,i);return r.isValid()?e.timezone?r.tz(e.timezone).format(n):r.format(n):!0===s?a:"function"==typeof s?s(a):s},datetimediff:function(t,e,o){var i=e.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==e.invalidPlaceholder?e.invalidPlaceholder:"",s=void 0!==e.suffix&&e.suffix,a=void 0!==e.unit?e.unit:void 0,r=void 0!==e.humanize&&e.humanize,l=void 0!==e.date?e.date:moment(),u=t.getValue(),c=moment(u,i);return c.isValid()?r?moment.duration(c.diff(l)).humanize(s):c.diff(l,a)+(s?" "+s:""):!0===n?u:"function"==typeof n?n(u):n},lookup:function(t,e,o){var i=t.getValue();return void 0===e[i]?(console.warn("Missing display value for "+i),i):e[i]},star:function(t,e,o){var i=t.getValue(),n=t.getElement(),s=e&&e.stars?e.stars:5,a=document.createElement("span"),r=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.verticalAlign="middle",r.setAttribute("width","14"),r.setAttribute("height","14"),r.setAttribute("viewBox","0 0 512 512"),r.setAttribute("xml:space","preserve"),r.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var u=r.cloneNode(!0);u.innerHTML=l<=i?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',a.appendChild(u)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),a},traffic:function(t,e,o){var i,n,s=this.sanitizeHTML(t.getValue())||0,a=document.createElement("span"),r=e&&e.max?e.max:100,l=e&&e.min?e.min:0,u=e&&void 0!==e.color?e.color:["red","orange","green"],c="#666666";if(!isNaN(s)&&void 0!==t.getValue()){switch(a.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=r?parseFloat(s):r,n=parseFloat(n)>=l?parseFloat(n):l,i=(r-l)/100,n=Math.round((n-l)/i),void 0===u?"undefined":_typeof(u)){case"string":c=u;break;case"function":c=u(s);break;case"object":if(Array.isArray(u)){var d=100/u.length,h=Math.floor(n/d);h=Math.min(h,u.length-1),c=u[h=Math.max(h,0)];break}}return a.style.backgroundColor=c,a}},progress:function(t,e,o){var i,n,s,a,r,l=this.sanitizeHTML(t.getValue())||0,u=t.getElement(),c=e&&e.max?e.max:100,d=e&&e.min?e.min:0,h=e&&e.legendAlign?e.legendAlign:"center";switch(n=parseFloat(l)<=c?parseFloat(l):c,n=parseFloat(n)>=d?parseFloat(n):d,i=(c-d)/100,n=Math.round((n-d)/i),_typeof(e.color)){case"string":s=e.color;break;case"function":s=e.color(l);break;case"object":if(Array.isArray(e.color)){var p=100/e.color.length,m=Math.floor(n/p);m=Math.min(m,e.color.length-1),m=Math.max(m,0),s=e.color[m];break}default:s="#2DC214"}switch(_typeof(e.legend)){case"string":a=e.legend;break;case"function":a=e.legend(l);break;case"boolean":a=l;break;default:a=!1}switch(_typeof(e.legendColor)){case"string":r=e.legendColor;break;case"function":r=e.legendColor(l);break;case"object":if(Array.isArray(e.legendColor)){p=100/e.legendColor.length,m=Math.floor(n/p);m=Math.min(m,e.legendColor.length-1),m=Math.max(m,0),r=e.legendColor[m]}break;default:r="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var f=document.createElement("div");if(f.style.display="inline-block",f.style.position="relative",f.style.width=n+"%",f.style.backgroundColor=s,f.style.height="100%",f.setAttribute("data-max",c),f.setAttribute("data-min",d),a){var g=document.createElement("div");g.style.position="absolute",g.style.top="4px",g.style.left=0,g.style.textAlign=h,g.style.width="100%",g.style.color=r,g.innerHTML=a}return o((function(){if(!(t instanceof CellComponent)){var e=document.createElement("div");e.style.position="absolute",e.style.top="4px",e.style.bottom="4px",e.style.left="4px",e.style.right="4px",u.appendChild(e),u=e}u.appendChild(f),a&&u.appendChild(g)})),""},color:function(t,e,o){return t.getElement().style.backgroundColor=this.sanitizeHTML(t.getValue()),""},buttonTick:function(t,e,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(t,e,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(t,e,o){return this.table.rowManager.activeRows.indexOf(t.getRow()._getSelf())+1},handle:function(t,e,o){return t.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(t,e,o){var i=document.createElement("div"),n=t.getRow()._row.modules.responsiveLayout;function s(t){var e=n.element;n.open=t,e&&(n.open?(i.classList.add("open"),e.style.display=""):(i.classList.remove("open"),e.style.display="none"))}return i.classList.add("tabulator-responsive-collapse-toggle"),i.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",t.getElement().classList.add("tabulator-row-handle"),i.addEventListener("click",(function(t){t.stopImmediatePropagation(),s(!n.open)})),s(n.open),i},rowSelection:function(t,e,o){var i=this,n=document.createElement("input");if(n.type="checkbox",this.table.modExists("selectRow",!0))if(n.addEventListener("click",(function(t){t.stopPropagation()})),"function"==typeof t.getRow){var s=t.getRow();s instanceof RowComponent?(n.addEventListener("change",(function(t){s.toggleSelect()})),n.checked=s.isSelected&&s.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(s,n)):n=""}else n.addEventListener("change",(function(t){i.table.modules.selectRow.selectedRows.length?i.table.deselectRow():i.table.selectRow(e.rowRange)})),this.table.modules.selectRow.registerHeaderSelectCheckbox(n);return n}},Tabulator.prototype.registerModule("format",Format);var FrozenColumns=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.isGroup||(this.frozenCheck(t)?(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(t){return t.parent.isGroup&&t.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),t.parent.isGroup?this.frozenCheck(t.parent):t.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var t,e=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((function(){e.layout()}),100),t=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),t.forEach((function(t){"row"===t.type&&e.layoutRow(t)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(t){var e=this,o=[];this.leftColumns.forEach((function(i,n){if(i.modules.frozen.margin=e._calcSpace(e.leftColumns,n)+e.table.columnManager.scrollLeft+"px",n==e.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=e.getColGroupParentElement(i);o.includes(s)||(e.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else e.layoutElement(i.getElement(),i);t&&i.cells.forEach((function(t){e.layoutElement(t.getElement(),i)}))})),this.rightColumns.forEach((function(o,i){o.modules.frozen.margin=e.rightPadding-e._calcSpace(e.rightColumns,i+1)+"px",i==e.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?e.layoutElement(e.getColGroupParentElement(o),o):e.layoutElement(o.getElement(),o),t&&o.cells.forEach((function(t){e.layoutElement(t.getElement(),o)}))}))},FrozenColumns.prototype.getColGroupParentElement=function(t){return t.parent.isGroup?this.getColGroupParentElement(t.parent):t.getElement()},FrozenColumns.prototype.layout=function(){var t=this;t.active&&(this.calcMargins(),t.table.rowManager.getDisplayRows().forEach((function(e){"row"===e.type&&t.layoutRow(e)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(t){var e=this;t.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((function(o){var i=t.getCell(o);i&&e.layoutElement(i.getElement(),o)})),this.rightColumns.forEach((function(o){var i=t.getCell(o);i&&e.layoutElement(i.getElement(),o)}))},FrozenColumns.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin,t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(t,e){for(var o=0,i=0;i<e;i++)t[i].visible&&(o+=t[i].getWidth());return o},Tabulator.prototype.registerModule("frozenColumns",FrozenColumns);var FrozenRows=function(t){this.table=t,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(t){var e=t.slice(0);return this.rows.forEach((function(t){var o=e.indexOf(t);o>-1&&e.splice(o,1)})),e},FrozenRows.prototype.freezeRow=function(t){t.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(t.modules.frozen=!0,this.topElement.appendChild(t.getElement()),t.initialize(),t.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(t),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(t){this.rows.indexOf(t);t.modules.frozen?(t.modules.frozen=!1,this.detachRow(t),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.detachRow=function(t){var e=this.rows.indexOf(t);if(e>-1){var o=t.getElement();o.parentNode.removeChild(o),this.rows.splice(e,1)}},FrozenRows.prototype.styleRows=function(t){var e=this;this.rows.forEach((function(t,o){e.table.rowManager.styleRow(t,o)}))},Tabulator.prototype.registerModule("frozenRows",FrozenRows);var GroupComponent=function(t){this._group=t,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function(t,e,o,i,n,s,a){this.groupManager=t,this.parent=e,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o<t.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=a,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=a?a.visible:void 0!==t.startOpen[o]?t.startOpen[o]:t.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};Group.prototype.wipe=function(){this.groupList.length?this.groupList.forEach((function(t){t.wipe()})):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},Group.prototype.createElements=function(){var t=document.createElement("div");t.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(t),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},Group.prototype.createValueGroups=function(){var t=this,e=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach((function(o){t._createGroup(o,e)}))},Group.prototype.addBindings=function(){var t,e,o,i=this;i.groupManager.table.options.groupClick&&i.element.addEventListener("click",(function(t){i.groupManager.table.options.groupClick.call(i.groupManager.table,t,i.getComponent())})),i.groupManager.table.options.groupDblClick&&i.element.addEventListener("dblclick",(function(t){i.groupManager.table.options.groupDblClick.call(i.groupManager.table,t,i.getComponent())})),i.groupManager.table.options.groupContext&&i.element.addEventListener("contextmenu",(function(t){i.groupManager.table.options.groupContext.call(i.groupManager.table,t,i.getComponent())})),(i.groupManager.table.options.groupContextMenu||i.groupManager.table.options.groupClickMenu)&&i.groupManager.table.modExists("menu")&&i.groupManager.table.modules.menu.initializeGroup.call(i.groupManager.table.modules.menu,i),i.groupManager.table.options.groupTap&&(o=!1,i.element.addEventListener("touchstart",(function(t){o=!0}),{passive:!0}),i.element.addEventListener("touchend",(function(t){o&&i.groupManager.table.options.groupTap(t,i.getComponent()),o=!1}))),i.groupManager.table.options.groupDblTap&&(t=null,i.element.addEventListener("touchend",(function(e){t?(clearTimeout(t),t=null,i.groupManager.table.options.groupDblTap(e,i.getComponent())):t=setTimeout((function(){clearTimeout(t),t=null}),300)}))),i.groupManager.table.options.groupTapHold&&(e=null,i.element.addEventListener("touchstart",(function(t){clearTimeout(e),e=setTimeout((function(){clearTimeout(e),e=null,o=!1,i.groupManager.table.options.groupTapHold(t,i.getComponent())}),1e3)}),{passive:!0}),i.element.addEventListener("touchend",(function(t){clearTimeout(e),e=null}))),i.groupManager.table.options.groupToggleElement&&("arrow"==i.groupManager.table.options.groupToggleElement?i.arrowElement:i.element).addEventListener("click",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),i.toggleVisibility()}))},Group.prototype._createGroup=function(t,e){var o=e+"_"+t,i=new Group(this.groupManager,this,e,t,this.groupManager.groupIDLookups[e].field,this.groupManager.headerGenerator[e]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[o]);this.groups[o]=i,this.groupList.push(i)},Group.prototype._addRowToGroup=function(t){var e=this.level+1;if(this.hasSubGroups){var o=this.groupManager.groupIDLookups[e].func(t.getData()),i=e+"_"+o;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]?this.groups[i]&&this.groups[i].addRow(t):(this.groups[i]||this._createGroup(o,e),this.groups[i].addRow(t))}},Group.prototype._addRow=function(t){this.rows.push(t),t.modules.group=this},Group.prototype.insertRow=function(t,e,o){var i=this.conformRowData({});t.updateData(i);var n=this.rows.indexOf(e);n>-1?o?this.rows.splice(n+1,0,t):this.rows.splice(n,0,t):o?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(t){this.arrowElement.style.marginLeft=t,this.groupList.forEach((function(e){e.scrollHeader(t)}))},Group.prototype.getRowIndex=function(t){},Group.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},Group.prototype.removeRow=function(t){var e=this.rows.indexOf(t),o=t.getElement();e>-1&&this.rows.splice(e,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(t){var e,o=t.level+"_"+t.key;this.groups[o]&&(delete this.groups[o],(e=this.groupList.indexOf(t))>-1&&this.groupList.splice(e,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(t){var e=[];return e.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(o){e=e.concat(o.getHeadersAndRows(t))})):(!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!t&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top))),!t&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom)))),e},Group.prototype.getData=function(t,e){var o=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach((function(t){o.push(t.getData(e||"data"))})),o},Group.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach((function(e){t+=e.getRowCount()})):t=this.rows.length,t},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((function(t){t.getHeadersAndRows().forEach((function(t){t.detachElement()}))})):this.rows.forEach((function(t){var e=t.getElement();e.parentNode.removeChild(e)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var t=this.getElement();this.groupList.length?this.groupList.forEach((function(e){e.getHeadersAndRows().forEach((function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o}))})):this.rows.forEach((function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach((function(e){t.push(e.getData())})),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},Group.prototype.getRowGroup=function(t){var e=!1;return this.groupList.length?this.groupList.forEach((function(o){var i=o.getRowGroup(t);i&&(e=i)})):this.rows.find((function(e){return e===t}))&&(e=this),e},Group.prototype.getSubGroups=function(t){var e=[];return this.groupList.forEach((function(o){e.push(t?o.getComponent():o)})),e},Group.prototype.getRows=function(t){var e=[];return this.rows.forEach((function(o){e.push(t?o.getComponent():o)})),e},Group.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach((function(e){t.push(e.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getPath=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return t.unshift(this.key),this.parent&&this.parent.getPath(t),t},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var t=0;t<this.element.childNodes.length;++t)this.element.childNodes[t].parentNode.removeChild(this.element.childNodes[t]);return this.generateGroupHeaderContents(),this.element},Group.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Group.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},Group.prototype.initialize=function(t){this.initialized&&!t||(this.normalizeHeight(),this.initialized=!0)},Group.prototype.reinitialize=function(){this.initialized=!1,this.height=0,Tabulator.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},Group.prototype.setHeight=function(t){this.height!=t&&(this.height=t,this.outerHeight=this.element.offsetHeight)},Group.prototype.getHeight=function(){return this.outerHeight},Group.prototype.getGroup=function(){return this},Group.prototype.reinitializeHeight=function(){},Group.prototype.calcHeight=function(){},Group.prototype.setCellHeight=function(){},Group.prototype.clearCellHeight=function(){},Group.prototype.getComponent=function(){return this.component||(this.component=new GroupComponent(this)),this.component};var GroupRows=function(t){this.table=t,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};GroupRows.prototype.initialize=function(){var t=this,e=t.table.options.groupBy,o=t.table.options.groupStartOpen,i=t.table.options.groupHeader;(this.allowedValues=t.table.options.groupValues,Array.isArray(e)&&Array.isArray(i)&&e.length>i.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",(function(e,o){t.headerGenerator[0]=function(t,i,n){return(void 0===t?"":t)+"<span>("+i+" "+(1===i?e:o.groups.items)+")</span>"}})),this.groupIDLookups=[],Array.isArray(e)||e)?this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs():this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs&&this.table.columnManager.getRealColumns().forEach((function(e){e.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),e.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(e)||(e=[e]),e.forEach((function(e,o){var i,n;i="function"==typeof e?e:(n=t.table.columnManager.getColumnByField(e))?function(t){return n.getFieldValue(t)}:function(t){return t[e]},t.groupIDLookups.push({field:"function"!=typeof e&&e,func:i,values:!!t.allowedValues&&t.allowedValues[o]})})),o&&(Array.isArray(o)||(o=[o]),o.forEach((function(t){t="function"==typeof t?t:function(){return!0}})),t.startOpen=o),i&&(t.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},GroupRows.prototype.getGroups=function(t){var e=[];return this.groupList.forEach((function(o){e.push(t?o.getComponent():o)})),e},GroupRows.prototype.getChildGroups=function(t){var e=this,o=[];return t||(t=this),t.groupList.forEach((function(t){t.groupList.length?o=o.concat(e.getChildGroups(t)):o.push(t)})),o},GroupRows.prototype.wipe=function(){this.groupList.forEach((function(t){t.wipe()}))},GroupRows.prototype.pullGroupListData=function(t){var e=this,o=[];return t.forEach((function(t){var i={level:0,rowCount:0,headerContent:""},n=[];t.hasSubGroups?(n=e.pullGroupListData(t.groupList),i.level=t.level,i.rowCount=n.length-t.groupList.length,i.headerContent=t.generator(t.key,i.rowCount,t.rows,t),o.push(i),o=o.concat(n)):(i.level=t.level,i.headerContent=t.generator(t.key,t.rows.length,t.rows,t),i.rowCount=t.getRows().length,o.push(i),t.getRows().forEach((function(t){o.push(t.getData("data"))})))})),o},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(t){var e=!1;return this.groupList.forEach((function(o){var i=o.getRowGroup(t);i&&(e=i)})),e},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(t){var e=this,o=e.groups;e.groups={},e.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((function(t){e.createGroup(t,0,o)})),t.forEach((function(t){e.assignRowToExistingGroup(t,o)}))):t.forEach((function(t){e.assignRowToGroup(t,o)}))},GroupRows.prototype.createGroup=function(t,e,o){var i,n=e+"_"+t;o=o||[],i=new Group(this,!1,e,t,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},GroupRows.prototype.assignRowToExistingGroup=function(t,e){var o="0_"+this.groupIDLookups[0].func(t.getData());this.groups[o]&&this.groups[o].addRow(t)},GroupRows.prototype.assignRowToGroup=function(t,e){var o=this.groupIDLookups[0].func(t.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,e),this.groups["0_"+o].addRow(t),!i},GroupRows.prototype.reassignRowToGroup=function(t){var e=t.getGroup(),o=e.getPath(),i=this.getExpectedPath(t);o.length==i.length&&o.every((function(t,e){return t===i[e]}))||(e.removeRow(t),this.assignRowToGroup(t,self.groups),this.table.rowManager.refreshActiveData("group",!1,!0))},GroupRows.prototype.getExpectedPath=function(t){var e=[],o=t.getData();return this.groupIDLookups.forEach((function(t){e.push(t.func(o))})),e},GroupRows.prototype.updateGroupRows=function(t){var e=[];if(this.groupList.forEach((function(t){e=e.concat(t.getHeadersAndRows())})),t){var o=this.table.rowManager.setDisplayRows(e,this.getDisplayIndex());!0!==o&&this.setDisplayIndex(o),this.table.rowManager.refreshActiveData("group",!0,!0)}return e},GroupRows.prototype.scrollHeaders=function(t){this.table.options.virtualDomHoz&&(t-=this.table.vdomHoz.vDomPadLeft),t+="px",this.groupList.forEach((function(e){e.scrollHeader(t)}))},GroupRows.prototype.removeGroup=function(t){var e,o=t.level+"_"+t.key;this.groups[o]&&(delete this.groups[o],(e=this.groupList.indexOf(t))>-1&&this.groupList.splice(e,1))},Tabulator.prototype.registerModule("groupRows",GroupRows);var History=function(t){this.table=t,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(t,e,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:e,data:o}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.clearComponentHistory=function(t){var e=this.history.findIndex((function(e){return e.component===t}));e>-1&&(this.history.splice(e,1),e<=this.index&&this.index--,this.clearComponentHistory(t))},History.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var e=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,e)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posFrom],!t.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var e=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,e)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posTo],t.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(t,e){this.history.forEach((function(o){if(o.component instanceof Row)o.component===t&&(o.component=e);else if(o.component instanceof Cell&&o.component.row===t){var i=o.component.column.getField();i&&(o.component=e.getCell(i))}}))},Tabulator.prototype.registerModule("history",History);var HtmlTableImport=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var t=this.table.element,e=this.table.options,o=(e.columns,t.getElementsByTagName("th")),i=t.getElementsByTagName("tbody")[0],n=[];this.hasIndex=!1,this.table.options.htmlImporting.call(this.table),i=i?i.getElementsByTagName("tr"):[],this._extractOptions(t,e),o.length?this._extractHeaders(o,i):this._generateBlankHeaders(o,i);for(var s=0;s<i.length;s++){var a=i[s].getElementsByTagName("td"),r={};this.hasIndex||(r[e.index]=s);for(var l=0;l<a.length;l++){var u=a[l];void 0!==this.fieldIndex[l]&&(r[this.fieldIndex[l]]=u.innerHTML)}n.push(r)}var c=document.createElement("div"),d=t.attributes;for(var l in d)"object"==_typeof(d[l])&&c.setAttribute(d[l].name,d[l].value);t.parentNode.replaceChild(c,t),e.data=n,this.table.options.htmlImported.call(this.table),this.table.element=c},HtmlTableImport.prototype._extractOptions=function(t,e,o){var i=t.attributes,n=o?Object.assign([],o):Object.keys(e),s={};for(var a in n.forEach((function(t){s[t.toLowerCase()]=t})),i){var r,l=i[a];l&&"object"==(void 0===l?"undefined":_typeof(l))&&l.name&&0===l.name.indexOf("tabulator-")&&(r=l.name.replace("tabulator-",""),void 0!==s[r]&&(e[s[r]]=this._attribValue(l.value)))}},HtmlTableImport.prototype._attribValue=function(t){return"true"===t||"false"!==t&&t},HtmlTableImport.prototype._findCol=function(t){return this.table.options.columns.find((function(e){return e.title===t}))||!1},HtmlTableImport.prototype._extractHeaders=function(t,e){for(var o=0;o<t.length;o++){var i,n=t[o],s=!1,a=this._findCol(n.textContent);a?s=!0:a={title:n.textContent.trim()},a.field||(a.field=n.textContent.trim().toLowerCase().replace(" ","_")),(i=n.getAttribute("width"))&&!a.width&&(a.width=i),n.attributes,this._extractOptions(n,a,Column.prototype.defaultOptionList),this.fieldIndex[o]=a.field,a.field==this.table.options.index&&(this.hasIndex=!0),s||this.table.options.columns.push(a)}},HtmlTableImport.prototype._generateBlankHeaders=function(t,e){for(var o=0;o<t.length;o++){var i=t[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var s=i.getAttribute("width");s&&(n.width=s),this.table.options.columns.push(n)}},Tabulator.prototype.registerModule("htmlTableImport",HtmlTableImport);var Keybindings=function(t){this.table=t,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};Keybindings.prototype.initialize=function(){var t=this.table.options.keybindings,e={};if(this.watchKeys={},this.pressedKeys=[],!1!==t){for(var o in this.bindings)e[o]=this.bindings[o];if(Object.keys(t).length)for(var i in t)e[i]=t[i];this.mapBindings(e),this.bindEvents()}},Keybindings.prototype.mapBindings=function(t){var e=this,o=this,i=function(i){e.actions[i]?t[i]&&("object"!==_typeof(t[i])&&(t[i]=[t[i]]),t[i].forEach((function(t){o.mapBinding(i,t)}))):console.warn("Key Binding Error - no such action:",i)};for(var n in t)i(n)},Keybindings.prototype.mapBinding=function(t,e){var o=this,i={action:this.actions[t],keys:[],ctrl:!1,shift:!1,meta:!1};e.toString().toLowerCase().split(" ").join("").split("+").forEach((function(t){switch(t){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:t=parseInt(t),i.keys.push(t),o.watchKeys[t]||(o.watchKeys[t]=[]),o.watchKeys[t].push(i)}}))},Keybindings.prototype.bindEvents=function(){var t=this;this.keyupBinding=function(e){var o=e.keyCode,i=t.watchKeys[o];i&&(t.pressedKeys.push(o),i.forEach((function(o){t.checkBinding(e,o)})))},this.keydownBinding=function(e){var o=e.keyCode;if(t.watchKeys[o]){var i=t.pressedKeys.indexOf(o);i>-1&&t.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(t,e){var o=this,i=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&t.metaKey==e.meta&&(e.keys.forEach((function(t){-1==o.pressedKeys.indexOf(t)&&(i=!1)})),i&&e.action.call(o,t),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,o=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(o>=0?e.element.scrollTop=o:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,o=e.scrollTop+e.height,i=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(o<=i?e.element.scrollTop=o:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(t.preventDefault(),(e=o.nav()).next()||i&&(o.getElement().firstChild.blur(),(i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i))).then((function(){setTimeout((function(){e.next()}))}))))},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings);var Menu=function(t){this.table=t,this.menuEl=!1,this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1};Menu.prototype.initializeColumnHeader=function(t){var e,o=this;t.definition.headerContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,t.definition.headerContextMenu)),this.tapHold(t,t.definition.headerContextMenu)),t.definition.headerMenu&&((e=document.createElement("span")).classList.add("tabulator-header-menu-button"),e.innerHTML="&vellip;",e.addEventListener("click",(function(e){var i="function"==typeof t.definition.headerMenu?t.definition.headerMenu(t.getComponent(),e):t.definition.headerMenu;e.stopPropagation(),e.preventDefault(),o.loadMenu(e,t,i)})),t.titleElement.insertBefore(e,t.titleElement.firstChild))},Menu.prototype.LoadMenuEvent=function(t,e,o){e="function"==typeof e?e(t.getComponent(),o):e,this.loadMenu(o,t,e)},Menu.prototype.tapHold=function(t,e){var o=this,i=t.getElement(),n=null,s=!1;i.addEventListener("touchstart",(function(i){clearTimeout(n),s=!1,n=setTimeout((function(){clearTimeout(n),n=null,s=!0,o.LoadMenuEvent(t,e,i)}),1e3)}),{passive:!0}),i.addEventListener("touchend",(function(t){clearTimeout(n),n=null,s&&t.preventDefault()}))},Menu.prototype.initializeCell=function(t){t.column.definition.contextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,t.column.definition.contextMenu)),this.tapHold(t,t.column.definition.contextMenu)),t.column.definition.clickMenu&&t.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,t,t.column.definition.clickMenu))},Menu.prototype.initializeRow=function(t){this.table.options.rowContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,this.table.options.rowContextMenu)),this.tapHold(t,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&t.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,t,this.table.options.rowClickMenu))},Menu.prototype.initializeGroup=function(t){this.table.options.groupContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,this.table.options.groupContextMenu)),this.tapHold(t,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&t.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,t,this.table.options.groupClickMenu))},Menu.prototype.loadMenu=function(t,e,o){var i=this,n=Math.max(document.body.offsetHeight,window.innerHeight),s=!(t instanceof MouseEvent);if(s||t.preventDefault(),o&&o.length){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((function(){i.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuEl=document.createElement("div"),this.menuEl.classList.add("tabulator-menu"),o.forEach((function(t){var o=document.createElement("div"),n=t.label,s=t.disabled;t.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof n&&(n=n(e.getComponent())),n instanceof Node?o.appendChild(n):o.innerHTML=n,"function"==typeof s&&(s=s(e.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",(function(t){t.stopPropagation()}))):o.addEventListener("click",(function(o){i.hideMenu(),t.action(o,e.getComponent())}))),i.menuEl.appendChild(o)})),this.menuEl.style.top=(s?t.touches[0].pageY:t.pageY)+"px",this.menuEl.style.left=(s?t.touches[0].pageX:t.pageX)+"px",setTimeout((function(){i.table.rowManager.element.addEventListener("scroll",i.blurEvent),document.body.addEventListener("click",i.blurEvent),document.body.addEventListener("contextmenu",i.blurEvent),document.body.addEventListener("keydown",i.escEvent)}),100),document.body.appendChild(this.menuEl),t.pageX+this.menuEl.offsetWidth>=document.body.offsetWidth&&(this.menuEl.style.left="",this.menuEl.style.right=document.body.offsetWidth-t.pageX+"px"),t.pageY+this.menuEl.offsetHeight>=n&&(this.menuEl.style.top="",this.menuEl.style.bottom=n-t.pageY+"px")}},Menu.prototype.isOpen=function(){return!!this.menuEl.parentNode},Menu.prototype.escMenu=function(t){27==t.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuEl.parentNode&&this.menuEl.parentNode.removeChild(this.menuEl),this.escEvent&&document.body.removeEventListener("keydown",this.escEvent),this.blurEvent&&(document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent))},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);var MoveColumns=function(t){this.table=t,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.classList.add("tabulator-col-placeholder"),t},MoveColumns.prototype.initializeColumn=function(t){var e,o=this,i={};t.modules.frozen||(e=t.getElement(),i.mousemove=function(i){t.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-Tabulator.prototype.helpers.elOffset(e).left+o.table.columnManager.element.scrollLeft>t.getWidth()/2?o.toCol===t&&o.toColAfter||(e.parentNode.insertBefore(o.placeholderElement,e.nextSibling),o.moveColumn(t,!0)):(o.toCol!==t||o.toColAfter)&&(e.parentNode.insertBefore(o.placeholderElement,e),o.moveColumn(t,!1)))}.bind(o),e.addEventListener("mousedown",(function(e){o.touchMove=!1,1===e.which&&(o.checkTimeout=setTimeout((function(){o.startMove(e,t)}),o.checkPeriod))})),e.addEventListener("mouseup",(function(t){1===t.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)})),o.bindTouchEvents(t)),t.modules.moveColumn=i},MoveColumns.prototype.bindTouchEvents=function(t){var e,o,i,n,s,a,r=this,l=t.getElement(),u=!1;l.addEventListener("touchstart",(function(l){r.checkTimeout=setTimeout((function(){r.touchMove=!0,t,e=t.nextColumn(),i=e?e.getWidth()/2:0,o=t.prevColumn(),n=o?o.getWidth()/2:0,s=0,a=0,u=!1,r.startMove(l,t)}),r.checkPeriod)}),{passive:!0}),l.addEventListener("touchmove",(function(l){var c,d;r.moving&&(r.moveHover(l),u||(u=l.touches[0].pageX),(c=l.touches[0].pageX-u)>0?e&&c-s>i&&(d=e)!==t&&(u=l.touches[0].pageX,d.getElement().parentNode.insertBefore(r.placeholderElement,d.getElement().nextSibling),r.moveColumn(d,!0)):o&&-c-a>n&&(d=o)!==t&&(u=l.touches[0].pageX,d.getElement().parentNode.insertBefore(r.placeholderElement,d.getElement()),r.moveColumn(d,!1)),d&&(d,e=d.nextColumn(),s=i,i=e?e.getWidth()/2:0,o=d.prevColumn(),a=n,n=o?o.getWidth()/2:0))}),{passive:!0}),l.addEventListener("touchend",(function(t){r.checkTimeout&&clearTimeout(r.checkTimeout),r.moving&&r.endMove(t)}))},MoveColumns.prototype.startMove=function(t,e){var o=e.getElement();this.moving=e,this.startX=(this.touchMove?t.touches[0].pageX:t.pageX)-Tabulator.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=e.getWidth()+"px",this.placeholderElement.style.height=e.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(t)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(t){t.modules.moveColumn.mousemove&&t.getElement().addEventListener("mousemove",t.modules.moveColumn.mousemove)}))},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(t){t.modules.moveColumn.mousemove&&t.getElement().removeEventListener("mousemove",t.modules.moveColumn.mousemove)}))},MoveColumns.prototype.moveColumn=function(t,e){var o=this.moving.getCells();this.toCol=t,this.toColAfter=e,e?t.getCells().forEach((function(t,e){var i=t.getElement();i.parentNode.insertBefore(o[e].getElement(),i.nextSibling)})):t.getCells().forEach((function(t,e){var i=t.getElement();i.parentNode.insertBefore(o[e].getElement(),i)}))},MoveColumns.prototype.endMove=function(t){(1===t.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(t){var e,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?t.touches[0].pageX:t.pageX)-Tabulator.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-n<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout((function(){e=Math.max(0,n-5),o.table.rowManager.getElement().scrollLeft=e,o.autoScrollTimeout=!1}),1))),n+i.clientWidth-s<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout((function(){e=Math.min(i.clientWidth,n+5),o.table.rowManager.getElement().scrollLeft=e,o.autoScrollTimeout=!1}),1)))},Tabulator.prototype.registerModule("moveColumn",MoveColumns);var MoveRows=function(t){this.table=t,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.classList.add("tabulator-row-placeholder"),t},MoveRows.prototype.initialize=function(t){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},MoveRows.prototype.setHandle=function(t){this.hasHandle=t},MoveRows.prototype.initializeGroupHeader=function(t){var e=this,o={};o.mouseup=function(t){e.tableRowDrop(t,row)}.bind(e),o.mousemove=function(o){var i;o.pageY-Tabulator.prototype.helpers.elOffset(t.element).top+e.table.rowManager.element.scrollTop>t.getHeight()/2?e.toRow===t&&e.toRowAfter||((i=t.getElement()).parentNode.insertBefore(e.placeholderElement,i.nextSibling),e.moveRow(t,!0)):(e.toRow!==t||e.toRowAfter)&&(i=t.getElement()).previousSibling&&(i.parentNode.insertBefore(e.placeholderElement,i),e.moveRow(t,!1))}.bind(e),t.modules.moveRow=o},MoveRows.prototype.initializeRow=function(t){var e,o=this,i={};i.mouseup=function(e){o.tableRowDrop(e,t)}.bind(o),i.mousemove=function(e){var i=t.getElement();e.pageY-Tabulator.prototype.helpers.elOffset(i).top+o.table.rowManager.element.scrollTop>t.getHeight()/2?o.toRow===t&&o.toRowAfter||(i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(t,!0)):(o.toRow!==t||o.toRowAfter)&&(i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(t,!1))}.bind(o),this.hasHandle||((e=t.getElement()).addEventListener("mousedown",(function(e){1===e.which&&(o.checkTimeout=setTimeout((function(){o.startMove(e,t)}),o.checkPeriod))})),e.addEventListener("mouseup",(function(t){1===t.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)})),this.bindTouchEvents(t,t.getElement())),t.modules.moveRow=i},MoveRows.prototype.initializeCell=function(t){var e=this,o=t.getElement();o.addEventListener("mousedown",(function(o){1===o.which&&(e.checkTimeout=setTimeout((function(){e.startMove(o,t.row)}),e.checkPeriod))})),o.addEventListener("mouseup",(function(t){1===t.which&&e.checkTimeout&&clearTimeout(e.checkTimeout)})),this.bindTouchEvents(t.row,t.getElement())},MoveRows.prototype.bindTouchEvents=function(t,e){var o,i,n,s,a,r,l=this,u=!1;e.addEventListener("touchstart",(function(e){l.checkTimeout=setTimeout((function(){l.touchMove=!0,t,o=t.nextRow(),n=o?o.getHeight()/2:0,i=t.prevRow(),s=i?i.getHeight()/2:0,a=0,r=0,u=!1,l.startMove(e,t)}),l.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,e.addEventListener("touchmove",(function(e){var c,d;l.moving&&(e.preventDefault(),l.moveHover(e),u||(u=e.touches[0].pageY),(c=e.touches[0].pageY-u)>0?o&&c-a>n&&(d=o)!==t&&(u=e.touches[0].pageY,d.getElement().parentNode.insertBefore(l.placeholderElement,d.getElement().nextSibling),l.moveRow(d,!0)):i&&-c-r>s&&(d=i)!==t&&(u=e.touches[0].pageY,d.getElement().parentNode.insertBefore(l.placeholderElement,d.getElement()),l.moveRow(d,!1)),d&&(d,o=d.nextRow(),a=n,n=o?o.getHeight()/2:0,i=d.prevRow(),r=s,s=i?i.getHeight()/2:0))})),e.addEventListener("touchend",(function(t){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&(l.endMove(t),l.touchMove=!1)}))},MoveRows.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach((function(t){"row"!==t.type&&"group"!==t.type||!t.modules.moveRow.mousemove||t.getElement().addEventListener("mousemove",t.modules.moveRow.mousemove)}))},MoveRows.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach((function(t){"row"!==t.type&&"group"!==t.type||!t.modules.moveRow.mousemove||t.getElement().removeEventListener("mousemove",t.modules.moveRow.mousemove)}))},MoveRows.prototype.startMove=function(t,e){var o=e.getElement();this.setStartPosition(t,e),this.moving=e,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=e.getWidth()+"px",this.placeholderElement.style.height=e.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(e)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(t)},MoveRows.prototype.setStartPosition=function(t,e){var o,i,n=this.touchMove?t.touches[0].pageX:t.pageX,s=this.touchMove?t.touches[0].pageY:t.pageY;o=e.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},MoveRows.prototype.endMove=function(t){t&&1!==t.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(t,e){this.toRow=t,this.toRowAfter=e},MoveRows.prototype.moveHover=function(t){this.connection?this.moveHoverConnections.call(this,t):this.moveHoverTable.call(this,t)},MoveRows.prototype.moveHoverTable=function(t){var e=this.table.rowManager.getElement(),o=e.scrollTop,i=(this.touchMove?t.touches[0].pageY:t.pageY)-e.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(t){this.hoverElement.style.left=this.startX+(this.touchMove?t.touches[0].pageX:t.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?t.touches[0].pageY:t.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(t,e,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(t,e,!!o&&o.getComponent())},MoveRows.prototype.connectToTables=function(t){var e,o=this;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:t})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((function(t){"string"==typeof t?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(t))):o.connectionElements.push(t)})),this.connectionElements.forEach((function(t){var e=function(e){o.elementRowDrop(e,t,o.moving)};t.addEventListener("mouseup",e),t.tabulatorElementDropEvent=e,t.classList.add("tabulator-movingrow-receiving")})))},MoveRows.prototype.disconnectFromTables=function(){var t;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((function(t){t.classList.remove("tabulator-movingrow-receiving"),t.removeEventListener("mouseup",t.tabulatorElementDropEvent),delete t.tabulatorElementDropEvent}))},MoveRows.prototype.connect=function(t,e){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=t,this.connectedRow=e,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(t){"row"===t.type&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().addEventListener("mouseup",t.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,e,t),!0)},MoveRows.prototype.disconnect=function(t){t===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(t){"row"===t.type&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().removeEventListener("mouseup",t.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,t)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(t,e,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),e?e.getComponent():void 0,t):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),e?e.getComponent():void 0,t)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),e?e.getComponent():void 0,t);this.endMove()},MoveRows.prototype.tableRowDrop=function(t,e){var o=!1,i=!1;switch(console.trace("drop"),t.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:e,success:i})},MoveRows.prototype.receivers={insert:function(t,e,o){return this.table.addRow(t.getData(),void 0,e),!0},add:function(t,e,o){return this.table.addRow(t.getData()),!0},update:function(t,e,o){return!!e&&(e.update(t.getData()),!0)},replace:function(t,e,o){return!!e&&(this.table.addRow(t.getData(),void 0,e),e.delete(),!0)}},MoveRows.prototype.senders={delete:function(t,e,o){t.delete()}},MoveRows.prototype.commsReceived=function(t,e,o){switch(e){case"connect":return this.connect(t,o.row);case"disconnect":return this.disconnect(t);case"dropcomplete":return this.dropComplete(t,o.row,o.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);var Mutator=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(t){var e=this,o=!1,i={};this.allowedTypes.forEach((function(n){var s,a="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));t.definition[a]&&(s=e.lookupMutator(t.definition[a]))&&(o=!0,i[a]={mutator:s,params:t.definition[a+"Params"]||{}})})),o&&(t.modules.mutate=i)},Mutator.prototype.lookupMutator=function(t){var e=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?e=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":e=t}return e},Mutator.prototype.transformRow=function(t,e,o){var i,n="mutator"+(e.charAt(0).toUpperCase()+e.slice(1));return this.enabled&&this.table.columnManager.traverse((function(s){var a,r,l;s.modules.mutate&&(a=s.modules.mutate[n]||s.modules.mutate.mutator||!1)&&(i=s.getFieldValue(void 0!==o?o:t),"data"!=e&&void 0===i||(l=s.getComponent(),r="function"==typeof a.params?a.params(i,t,e,l):a.params,s.setFieldValue(t,a.mutator(i,t,e,r,l))))})),t},Mutator.prototype.transformCell=function(t,e){var o=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,t.row.getData()),t.column.setFieldValue(i,e),o.mutator(e,i,"edit",o.params,t.getComponent())):e},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator);var Page=function(t){this.table=t,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var t;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(t=document.createElement("button")).classList.add("tabulator-page"),t.setAttribute("type","button"),t.setAttribute("role","button"),t.setAttribute("aria-label",""),t.setAttribute("title",""),this.firstBut=t.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=t.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=t.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=t.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var t=this,e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,-1==this.pageSizes.indexOf(this.size)&&e.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){e=[];for(var o=1;o<5;o++)e.push(this.size*o);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach((function(e){var o=document.createElement("option");o.value=e,!0===e?t.table.modules.localize.bind("pagination|all",(function(t){o.innerHTML=t})):o.innerHTML=e,t.pageSizeSelect.appendChild(o)})),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(t){var e,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",(function(t){n.firstBut.innerHTML=t})),n.table.modules.localize.bind("pagination|first_title",(function(t){n.firstBut.setAttribute("aria-label",t),n.firstBut.setAttribute("title",t)})),n.table.modules.localize.bind("pagination|prev",(function(t){n.prevBut.innerHTML=t})),n.table.modules.localize.bind("pagination|prev_title",(function(t){n.prevBut.setAttribute("aria-label",t),n.prevBut.setAttribute("title",t)})),n.table.modules.localize.bind("pagination|next",(function(t){n.nextBut.innerHTML=t})),n.table.modules.localize.bind("pagination|next_title",(function(t){n.nextBut.setAttribute("aria-label",t),n.nextBut.setAttribute("title",t)})),n.table.modules.localize.bind("pagination|last",(function(t){n.lastBut.innerHTML=t})),n.table.modules.localize.bind("pagination|last_title",(function(t){n.lastBut.setAttribute("aria-label",t),n.lastBut.setAttribute("title",t)})),n.firstBut.addEventListener("click",(function(){n.setPage(1).then((function(){})).catch((function(){}))})),n.prevBut.addEventListener("click",(function(){n.previousPage().then((function(){})).catch((function(){}))})),n.nextBut.addEventListener("click",(function(){n.nextPage().then((function(){})).catch((function(){}))})),n.lastBut.addEventListener("click",(function(){n.setPage(n.max).then((function(){})).catch((function(){}))})),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(e=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",(function(t){n.pageSizeSelect.setAttribute("aria-label",t),n.pageSizeSelect.setAttribute("title",t),e.innerHTML=t})),n.element.appendChild(e),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",(function(t){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then((function(){})).catch((function(){}))}))),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||t||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:((o=document.createElement("div")).classList.add("tabulator-row"),o.style.visibility=t,(i=document.createElement("div")).classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(t){this.initialize(!0),this.mode="progressive_"+t,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(t){this.displayIndex=t},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(t){this.max=t?!0===this.size?1:Math.ceil(t/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(t,e){return("local"==this.mode||t)&&(this.page=1),e&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(t){t=parseInt(t),this.max=t||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(t){var e=this,o=this;switch(t){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise((function(i,n){(t=parseInt(t))>0&&t<=e.max?(e.page=t,e.trigger().then((function(){i()})).catch((function(){n()})),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+e.max+":",t),n())}))},Page.prototype.setPageToRow=function(t){var e=this;return new Promise((function(o,i){var n=e.table.rowManager.getDisplayRows(e.displayIndex-1).indexOf(t);if(n>-1){var s=!0===e.size?1:Math.ceil((n+1)/e.size);e.setPage(s).then((function(){o()})).catch((function(){i()}))}else console.warn("Pagination Error - Requested row is not visible"),i()}))},Page.prototype.setPageSize=function(t){!0!==t&&(t=parseInt(t)),t>0&&(this.size=t),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var t=Math.floor((this.count-1)/2),e=Math.ceil((this.count-1)/2),o=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),i=this.page<=e?Math.min(this.count,this.max):Math.min(this.page+e,this.max);this.pagesElement.firstChild;)this.pagesElement.removeChild(this.pagesElement.firstChild);1==this.page?(this.firstBut.disabled=!0,this.prevBut.disabled=!0):(this.firstBut.disabled=!1,this.prevBut.disabled=!1),this.page==this.max?(this.lastBut.disabled=!0,this.nextBut.disabled=!0):(this.lastBut.disabled=!1,this.nextBut.disabled=!1);for(var n=o;n<=i;n++)n>0&&n<=this.max&&this.pagesElement.appendChild(this._generatePageButton(n));this.footerRedraw()},Page.prototype._generatePageButton=function(t){var e=this,o=document.createElement("button");return o.classList.add("tabulator-page"),t==e.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),e.table.modules.localize.bind("pagination|page_title",(function(e){o.setAttribute("aria-label",e+" "+t),o.setAttribute("title",e+" "+t)})),o.setAttribute("data-page",t),o.textContent=t,o.addEventListener("click",(function(o){e.setPage(t).then((function(){})).catch((function(){}))})),o},Page.prototype.previousPage=function(){var t=this;return new Promise((function(e,o){t.page>1?(t.page--,t.trigger().then((function(){e()})).catch((function(){o()})),t.table.options.persistence&&t.table.modExists("persistence",!0)&&t.table.modules.persistence.config.page&&t.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())}))},Page.prototype.nextPage=function(){var t=this;return new Promise((function(e,o){t.page<t.max?(t.page++,t.trigger().then((function(){e()})).catch((function(){o()})),t.table.options.persistence&&t.table.modExists("persistence",!0)&&t.table.modules.persistence.config.page&&t.table.modules.persistence.save("page")):(t.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+t.max+":",t.max+1),o())}))},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(t){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(t){var e,o,i;if("local"==this.mode){e=[],!0===this.size?(o=0,i=t.length):i=(o=this.size*(this.page-1))+parseInt(this.size),this._setPageButtons();for(var n=o;n<i;n++)t[n]&&e.push(t[n]);return e}return this._setPageButtons(),t.slice(0)},Page.prototype.trigger=function(){var t,e=this;return new Promise((function(o,i){switch(e.mode){case"local":t=e.table.rowManager.scrollLeft,e.table.rowManager.refreshActiveData("page"),e.table.rowManager.scrollHorizontal(t),e.table.options.pageLoaded.call(e.table,e.getPage()),o();break;case"remote":case"progressive_load":case"progressive_scroll":e.table.modules.ajax.blockActiveRequest(),e._getRemotePage().then((function(){o()})).catch((function(){i()}));break;default:console.warn("Pagination Error - no such pagination mode:",e.mode),i()}}))},Page.prototype._getRemotePage=function(){var t,e,o=this,i=this;return new Promise((function(n,s){if(i.table.modExists("ajax",!0)||s(),t=Tabulator.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),(e=i.table.modules.ajax.getParams())[o.dataSentNames.page]=i.page,o.size&&(e[o.dataSentNames.size]=o.size),o.table.options.ajaxSorting&&o.table.modExists("sort")){var a=i.table.modules.sort.getSort();a.forEach((function(t){delete t.column})),e[o.dataSentNames.sorters]=a}if(o.table.options.ajaxFiltering&&o.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);e[o.dataSentNames.filters]=r}i.table.modules.ajax.setParams(e),i.table.modules.ajax.sendRequest(o.progressiveLoad).then((function(t){i._parseRemoteData(t),n()})).catch((function(t){s()})),i.table.modules.ajax.setParams(t)}))},Page.prototype._parseRemoteData=function(t){var e,o,i=this;if(void 0===t[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),t[this.dataReceivedNames.data]){if(this.max=parseInt(t[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(t[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(t[this.dataReceivedNames.data]),this.page<this.max&&setTimeout((function(){i.nextPage().then((function(){})).catch((function(){}))}),i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":t=this.table.rowManager.getData().concat(t[this.dataReceivedNames.data]),this.table.rowManager.setData(t,!0,this.initialLoad&&1==this.page),o=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+o&&i.nextPage().then((function(){})).catch((function(){}))}else e=this.table.rowManager.scrollLeft,this.table.rowManager.setData(t[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(e),this.table.columnManager.scrollHorizontal(e),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},Page.prototype.footerRedraw=function(){var t=this.table.footerManager.element;Math.ceil(t.clientWidth)-t.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(t.clientWidth)-t.scrollWidth<0&&(this.pagesElement.style.display="none"))},Page.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},Page.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},Tabulator.prototype.registerModule("page",Page);var Persistence=function(t){this.table=t,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};Persistence.prototype.localStorageTest=function(){var t="_tabulator_test";try{return window.localStorage.setItem(t,t),window.localStorage.removeItem(t),!0}catch(t){return!1}},Persistence.prototype.initialize=function(){var t,e=this.table.options.persistenceMode,o=this.table.options.persistenceID;this.mode=!0!==e?e:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(o||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(t=this.retreiveData("page"))&&(void 0===t.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=t.paginationSize),void 0===t.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=t.paginationInitialPage)),this.config.group&&(t=this.retreiveData("group"))&&(void 0===t.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=t.groupBy),void 0===t.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=t.groupStartOpen),void 0===t.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=t.groupHeader))},Persistence.prototype.initializeColumn=function(t){var e,o=this;this.config.columns&&(this.defWatcherBlock=!0,e=t.getDefinition(),(!0===this.config.columns?Object.keys(e):this.config.columns).forEach((function(t){var i=Object.getOwnPropertyDescriptor(e,t),n=e[t];i&&Object.defineProperty(e,t,{set:function(t){n=t,o.defWatcherBlock||o.save("columns"),i.set&&i.set(t)},get:function(){return i.get&&i.get(),n}})})),this.defWatcherBlock=!1)},Persistence.prototype.load=function(t,e){var o=this.retreiveData(t);return e&&(o=o?this.mergeDefinition(e,o):e),o},Persistence.prototype.retreiveData=function(t){return!!this.readFunc&&this.readFunc(this.id,t)},Persistence.prototype.mergeDefinition=function(t,e){var o=this,i=[];return(e=e||[]).forEach((function(e,n){var s,a=o._findColumn(t,e);a&&(!0===o.config.columns||null==o.config.columns?(s=Object.keys(a)).push("width"):s=o.config.columns,s.forEach((function(t){void 0!==e[t]&&(a[t]=e[t])})),a.columns&&(a.columns=o.mergeDefinition(a.columns,e.columns)),i.push(a))})),t.forEach((function(t,n){o._findColumn(e,t)||(i.length>n?i.splice(n,0,t):i.push(t))})),i},Persistence.prototype._findColumn=function(t,e){var o=e.columns?"group":e.field?"field":"object";return t.find((function(t){switch(o){case"group":return t.title===e.title&&t.columns.length===e.columns.length;case"field":return t.field===e.field;case"object":return t===e}}))},Persistence.prototype.save=function(t){var e={};switch(t){case"columns":e=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":e=this.table.modules.filter.getFilters();break;case"sort":e=this.validateSorters(this.table.modules.sort.getSort());break;case"group":e=this.getGroupConfig();break;case"page":e=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,t,e)},Persistence.prototype.validateSorters=function(t){return t.forEach((function(t){t.column=t.field,delete t.field})),t},Persistence.prototype.getGroupConfig=function(){var t={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(t.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(t.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(t.groupHeader=this.table.options.groupHeader)),t},Persistence.prototype.getPageConfig=function(){var t={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(t.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(t.paginationInitialPage=this.table.modules.page.getPage())),t},Persistence.prototype.parseColumns=function(t){var e=this,o=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return t.forEach((function(t){var n,s={},a=t.getDefinition();t.isGroup?(s.title=a.title,s.columns=e.parseColumns(t.getColumns())):(s.field=t.getField(),!0===e.config.columns||null==e.config.columns?(n=Object.keys(a)).push("width"):n=e.config.columns,n.forEach((function(e){switch(e){case"width":s.width=t.getWidth();break;case"visible":s.visible=t.visible;break;default:"function"!=typeof a[e]&&-1===i.indexOf(e)&&(s[e]=a[e])}}))),o.push(s)})),o},Persistence.prototype.readers={local:function(t,e){var o=localStorage.getItem(t+"-"+e);return!!o&&JSON.parse(o)},cookie:function(t,e){var o,i,n=document.cookie,s=t+"-"+e,a=n.indexOf(s+"=");return a>-1&&(n=n.substr(a),(o=n.indexOf(";"))>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},Persistence.prototype.writers={local:function(t,e,o){localStorage.setItem(t+"-"+e,JSON.stringify(o))},cookie:function(t,e,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=t+"-"+e+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);var Print=function(t){this.table=t,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(t,e,o){var i,n,s=window.scrollX,a=window.scrollY,r=document.createElement("div"),l=document.createElement("div"),u=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==e?e:this.table.options.printStyled,t,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),"string"==typeof(i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?r.innerHTML=i:r.appendChild(i),this.element.appendChild(r)),this.element.appendChild(u),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),"string"==typeof(n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,u),window.print(),this.cleanup(),window.scrollTo(s,a),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print);var ReactiveData=function(t){this.table=t,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(t){var e,o=this;this.currentVersion++,e=this.currentVersion,o.unwatchData(),o.data=t,o.origFuncs.push=t.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||e!==o.currentVersion||i.forEach((function(t){o.table.rowManager.addRowActual(t,!1)})),o.origFuncs.push.apply(t,arguments)}}),o.origFuncs.unshift=t.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||e!==o.currentVersion||i.forEach((function(t){o.table.rowManager.addRowActual(t,!0)})),o.origFuncs.unshift.apply(t,arguments)}}),o.origFuncs.shift=t.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||e!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(t)}}),o.origFuncs.pop=t.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||e!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(t)}}),o.origFuncs.splice=t.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?t.length+n[0]:n[0],a=n[1],r=!!n[2]&&n.slice(2);if(!o.blocked&&e===o.currentVersion){if(r&&((i=!!t[s]&&o.table.rowManager.getRowFromDataObject(t[s]))?r.forEach((function(t){o.table.rowManager.addRowActual(t,!0,i,!0)})):(r=r.slice().reverse()).forEach((function(t){o.table.rowManager.addRowActual(t,!0,!1,!0)}))),0!==a){var l=t.slice(s,void 0===n[1]?n[1]:s+a);l.forEach((function(t,e){var i=o.table.rowManager.getRowFromDataObject(t);i&&i.deleteActual(e!==l.length-1)}))}(r||0!==a)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(t,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var t in this.origFuncs)Object.defineProperty(this.data,t,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(t){var e=t.getData();for(var o in this.blocked=!0,e)this.watchKey(t,e,o);this.table.options.dataTree&&this.watchTreeChildren(t),this.blocked=!1},ReactiveData.prototype.watchTreeChildren=function(t){var e=this,o=t.getData()[this.table.options.dataTreeChildField],i={};function n(){e.table.modules.dataTree.initializeRow(t),e.table.modules.dataTree.layoutRow(t),e.table.rowManager.refreshActiveData("tree",!1,!0)}o&&(i.push=o.push,Object.defineProperty(o,"push",{enumerable:!1,configurable:!0,value:function(){var t=i.push.apply(o,arguments);return n(),t}}),i.unshift=o.unshift,Object.defineProperty(o,"unshift",{enumerable:!1,configurable:!0,value:function(){var t=i.unshift.apply(o,arguments);return n(),t}}),i.shift=o.shift,Object.defineProperty(o,"shift",{enumerable:!1,configurable:!0,value:function(){var t=i.shift.call(o);return n(),t}}),i.pop=o.pop,Object.defineProperty(o,"pop",{enumerable:!1,configurable:!0,value:function(){var t=i.pop.call(o);return n(),t}}),i.splice=o.splice,Object.defineProperty(o,"splice",{enumerable:!1,configurable:!0,value:function(){var t=i.splice.apply(o,arguments);return n(),t}}))},ReactiveData.prototype.watchKey=function(t,e,o){var i=this,n=Object.getOwnPropertyDescriptor(e,o),s=e[o],a=this.currentVersion;Object.defineProperty(e,o,{set:function(e){if(s=e,!i.blocked&&a===i.currentVersion){var r={};r[o]=e,t.updateData(r)}n.set&&n.set(e)},get:function(){return n.get&&n.get(),s}})},ReactiveData.prototype.unwatchRow=function(t){var e=t.getData();for(var o in e)Object.defineProperty(e,o,{value:e[o]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData);var ResizeColumns=function(t){this.table=t,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(t,e,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===t&&(n="textarea"==e.definition.formatter||e.definition.variableHeight,e.modules.resize={variableHeight:n}),!0===s||s==t){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var r=document.createElement("div");r.className="tabulator-col-resize-handle prev",a.addEventListener("click",(function(t){t.stopPropagation()}));var l=function(t){var o=e.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=e,i._mouseDown(t,o,a))};a.addEventListener("mousedown",l),a.addEventListener("touchstart",l,{passive:!0}),a.addEventListener("dblclick",(function(t){var o=e.getLastColumn();o&&i._checkResizability(o)&&(t.stopPropagation(),o.reinitializeWidth(!0))})),r.addEventListener("click",(function(t){t.stopPropagation()}));var u=function(t){var o,n,s;(o=e.getFirstColumn())&&(s=(n=i.table.columnManager.findColumnIndex(o))>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=e,i._mouseDown(t,s,r))};r.addEventListener("mousedown",u),r.addEventListener("touchstart",u,{passive:!0}),r.addEventListener("dblclick",(function(t){var o,n,s;(o=e.getFirstColumn())&&(s=(n=i.table.columnManager.findColumnIndex(o))>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(t.stopPropagation(),s.reinitializeWidth(!0))})),o.appendChild(a),o.appendChild(r)}},ResizeColumns.prototype._checkResizability=function(t){return void 0!==t.definition.resizable?t.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(t,e,o){var i=this;function n(t){i.table.rtl?e.setWidth(i.startWidth-((void 0===t.screenX?t.touches[0].screenX:t.screenX)-i.startX)):e.setWidth(i.startWidth+((void 0===t.screenX?t.touches[0].screenX:t.screenX)-i.startX)),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(!0),!i.table.browserSlow&&e.modules.resize&&e.modules.resize.variableHeight&&e.checkCellHeights()}function s(t){i.startColumn.modules.edit&&(i.startColumn.modules.edit.blocked=!1),i.table.browserSlow&&e.modules.resize&&e.modules.resize.variableHeight&&e.checkCellHeights(),document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mousemove",n),o.removeEventListener("touchmove",n),o.removeEventListener("touchend",s),i.table.element.classList.remove("tabulator-block-select"),i.table.options.persistence&&i.table.modExists("persistence",!0)&&i.table.modules.persistence.config.columns&&i.table.modules.persistence.save("columns"),i.table.options.columnResized.call(i.table,e.getComponent())}i.table.element.classList.add("tabulator-block-select"),t.stopPropagation(),i.startColumn.modules.edit&&(i.startColumn.modules.edit.blocked=!0),i.startX=void 0===t.screenX?t.touches[0].screenX:t.screenX,i.startWidth=e.getWidth(),document.body.addEventListener("mousemove",n),document.body.addEventListener("mouseup",s),o.addEventListener("touchmove",n,{passive:!0}),o.addEventListener("touchend",s)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns);var ResizeRows=function(t){this.table=t,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(t){var e=this,o=t.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",(function(t){t.stopPropagation()}));var s=function(o){e.startRow=t,e._mouseDown(o,t,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",(function(t){t.stopPropagation()}));var a=function(o){var i=e.table.rowManager.prevDisplayRow(t);i&&(e.startRow=i,e._mouseDown(o,i,n))};n.addEventListener("mousedown",a),n.addEventListener("touchstart",a,{passive:!0}),o.appendChild(i),o.appendChild(n)},ResizeRows.prototype._mouseDown=function(t,e,o){var i=this;function n(t){e.setHeight(i.startHeight+((void 0===t.screenY?t.touches[0].screenY:t.screenY)-i.startY))}function s(t){document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",n),o.removeEventListener("touchmove",n),o.removeEventListener("touchend",s),i.table.element.classList.remove("tabulator-block-select"),i.table.options.rowResized.call(this.table,e.getComponent())}i.table.element.classList.add("tabulator-block-select"),t.stopPropagation(),i.startY=void 0===t.screenY?t.touches[0].screenY:t.screenY,i.startHeight=e.getHeight(),document.body.addEventListener("mousemove",n),document.body.addEventListener("mouseup",s),o.addEventListener("touchmove",n,{passive:!0}),o.addEventListener("touchend",s)},Tabulator.prototype.registerModule("resizeRows",ResizeRows);var ResizeTable=function(t){this.table=t,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(t){var e,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((function(t){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var e=Math.floor(t[0].contentRect.height),n=Math.floor(t[0].contentRect.width);o.tableHeight==e&&o.tableWidth==n||(o.tableHeight=e,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())}})),this.observer.observe(i.element),e=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(e.getPropertyValue("max-height")||e.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((function(t){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var e=Math.floor(t[0].contentRect.height),n=Math.floor(t[0].contentRect.width);o.containerHeight==e&&o.containerWidth==n||(o.containerHeight=e,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw()}})),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&(i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(t){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable);var ResponsiveLayout=function(t){this.table=t,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var t=this,e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,e.push(o),o.visible||"collapse"!==t.mode||t.hiddenColumns.push(o))})),e=(e=e.reverse()).sort((function(t,e){return e.modules.responsive.order-t.modules.responsive.order||e.modules.responsive.index-t.modules.responsive.index})),this.columns=e,"collapse"===this.mode&&this.generateCollapsedContent();var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0;for(o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if((n=o.next()).done)break;s=n.value}var a=s;if("responsiveCollapse"==a.definition.formatter){this.collapseHandleColumn=a;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(t){var e=t.getDefinition();t.modules.responsive={order:void 0===e.responsive?1:e.responsive,visible:!1!==e.visible}},ResponsiveLayout.prototype.initializeRow=function(t){var e;"calc"!==t.type&&((e=document.createElement("div")).classList.add("tabulator-responsive-collapse"),t.modules.responsiveLayout={element:e,open:this.collapseStartOpen},this.collapseStartOpen||(e.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(t){var e=t.getElement();t.modules.responsiveLayout&&(e.appendChild(t.modules.responsiveLayout.element),this.generateCollapsedRowContent(t))},ResponsiveLayout.prototype.updateColumnVisibility=function(t,e){t.modules.responsive&&(t.modules.responsive.visible=e,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(t){var e=this.hiddenColumns.length;t.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(t),this.generateCollapsedContent(),this.collapseHandleColumn&&!e&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(t){var e;t.show(!1,!0),t.setWidth(t.getWidth()),"collapse"===this.mode&&((e=this.hiddenColumns.indexOf(t))>-1&&this.hiddenColumns.splice(e,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var t=!0;t;){var e="fitColumns"==this.table.modules.layout.getMode()?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),o=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-e;if(o<0){var i=this.columns[this.index];i?(this.hideColumn(i),this.index++):t=!1}else{var n=this.columns[this.index-1];n&&o>0&&o>=n.getWidth()?(this.showColumn(n),this.index--):t=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var t=this;this.table.rowManager.getDisplayRows().forEach((function(e){t.generateCollapsedRowContent(e)}))},ResponsiveLayout.prototype.generateCollapsedRowContent=function(t){var e,o;if(t.modules.responsiveLayout){for(e=t.modules.responsiveLayout.element;e.firstChild;)e.removeChild(e.firstChild);(o=this.collapseFormatter(this.generateCollapsedRowData(t)))&&e.appendChild(o)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(t){var e,o=this,i=t.getData(),n=[];return this.hiddenColumns.forEach((function(s){var a=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(e={value:!1,data:{},getValue:function(){return a},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return t.getComponent()},getColumn:function(){return s.getComponent()}},n.push({title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,e,s.modules.format.params)})):n.push({title:s.definition.title,value:a}))})),n},ResponsiveLayout.prototype.formatCollapsedData=function(t){var e=document.createElement("table"),o="";return t.forEach((function(t){var e=document.createElement("div");t.value instanceof Node&&(e.appendChild(t.value),t.value=e.innerHTML),o+="<tr><td><strong>"+t.title+"</strong></td><td>"+t.value+"</td></tr>"})),e.innerHTML=o,Object.keys(t).length?e:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);var SelectRow=function(t){this.table=t,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(t){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(t){var e=this,o=t.getElement(),i=function t(){setTimeout((function(){e.selecting=!1}),50),document.body.removeEventListener("mouseup",t)};t.modules.select={selected:!1},e.table.options.selectableCheck.call(this.table,t.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),e.table.options.selectable&&"highlight"!=e.table.options.selectable&&("click"===e.table.options.selectableRangeMode?o.addEventListener("click",(function(o){if(o.shiftKey){e.table._clearSelection(),e.lastClickedRow=e.lastClickedRow||t;var i=e.table.rowManager.getDisplayRowIndex(e.lastClickedRow),n=e.table.rowManager.getDisplayRowIndex(t),s=i<=n?i:n,a=i>=n?i:n,r=e.table.rowManager.getDisplayRows().slice(0).splice(s,a-s+1);o.ctrlKey||o.metaKey?(r.forEach((function(o){o!==e.lastClickedRow&&(!0===e.table.options.selectable||e.isRowSelected(t)||e.selectedRows.length<e.table.options.selectable)&&e.toggleRow(o)})),e.lastClickedRow=t):(e.deselectRows(void 0,!0),!0!==e.table.options.selectable&&r.length>e.table.options.selectable&&(r=r.slice(0,e.table.options.selectable)),e.selectRows(r)),e.table._clearSelection()}else o.ctrlKey||o.metaKey?(e.toggleRow(t),e.lastClickedRow=t):(e.deselectRows(void 0,!0),e.selectRows(t),e.lastClickedRow=t)})):(o.addEventListener("click",(function(o){e.table.modExists("edit")&&e.table.modules.edit.getCurrentCell()||e.table._clearSelection(),e.selecting||e.toggleRow(t)})),o.addEventListener("mousedown",(function(o){if(o.shiftKey)return e.table._clearSelection(),e.selecting=!0,e.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),e.toggleRow(t),!1})),o.addEventListener("mouseenter",(function(o){e.selecting&&(e.table._clearSelection(),e.toggleRow(t),e.selectPrev[1]==t&&e.toggleRow(e.selectPrev[0]))})),o.addEventListener("mouseout",(function(o){e.selecting&&(e.table._clearSelection(),e.selectPrev.unshift(t))}))))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(t){this.table.options.selectableCheck.call(this.table,t.getComponent())&&(t.modules.select&&t.modules.select.selected?this._deselectRow(t):this._selectRow(t))},SelectRow.prototype.selectRows=function(t){var e,o=this;switch(void 0===t?"undefined":_typeof(t)){case"undefined":this.table.rowManager.rows.forEach((function(t){o._selectRow(t,!0,!0)})),this._rowSelectionChanged();break;case"string":(e=this.table.rowManager.findRow(t))?this._selectRow(e,!0,!0):this.table.rowManager.getRows(t).forEach((function(t){o._selectRow(t,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(t)?(t.forEach((function(t){o._selectRow(t,!0,!0)})),this._rowSelectionChanged()):this._selectRow(t,!1,!0)}},SelectRow.prototype._selectRow=function(t,e,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(t);i?-1==this.selectedRows.indexOf(i)&&(i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),i.getElement().classList.add("tabulator-selected"),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),e||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(e)):e||console.warn("Selection Error - No such row found, ignoring selection:"+t)},SelectRow.prototype.isRowSelected=function(t){return-1!==this.selectedRows.indexOf(t)},SelectRow.prototype.deselectRows=function(t,e){var o,i=this;if(void 0===t){o=i.selectedRows.length;for(var n=0;n<o;n++)i._deselectRow(i.selectedRows[0],!0);i._rowSelectionChanged(e)}else Array.isArray(t)?(t.forEach((function(t){i._deselectRow(t,!0)})),i._rowSelectionChanged(e)):i._deselectRow(t,e)},SelectRow.prototype._deselectRow=function(t,e){var o,i=this.table.rowManager.findRow(t);i?(o=this.selectedRows.findIndex((function(t){return t==i})))>-1&&(i.modules.select||(i.modules.select={}),i.modules.select.selected=!1,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!1),i.getElement().classList.remove("tabulator-selected"),this.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!1),e||this.table.options.rowDeselected.call(this.table,i.getComponent()),this._rowSelectionChanged(e)):e||console.warn("Deselection Error - No such row found, ignoring selection:"+t)},SelectRow.prototype.getSelectedData=function(){var t=[];return this.selectedRows.forEach((function(e){t.push(e.getData())})),t},SelectRow.prototype.getSelectedRows=function(){var t=[];return this.selectedRows.forEach((function(e){t.push(e.getComponent())})),t},SelectRow.prototype._rowSelectionChanged=function(t){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),t||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(t,e){t._row.modules.select||(t._row.modules.select={}),t._row.modules.select.checkboxEl=e},SelectRow.prototype.registerHeaderSelectCheckbox=function(t){this.headerCheckboxElement=t},SelectRow.prototype.childRowSelection=function(t,e){var o=this.table.modules.dataTree.getChildren(t);if(e){var i=o,n=Array.isArray(i),s=0;for(i=n?i:i[Symbol.iterator]();;){var a;if(n){if(s>=i.length)break;a=i[s++]}else{if((s=i.next()).done)break;a=s.value}var r=a;this._selectRow(r,!0)}}else{var l=o,u=Array.isArray(l),c=0;for(l=u?l:l[Symbol.iterator]();;){var d;if(u){if(c>=l.length)break;d=l[c++]}else{if((c=l.next()).done)break;d=c.value}var h=d;this._deselectRow(h,!0)}}},Tabulator.prototype.registerModule("selectRow",SelectRow);var Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var o,i,n=this,s=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?s=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":s=t.definition.sorter}t.modules.sort={sorter:s,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&((o=t.getElement()).classList.add("tabulator-sortable"),(i=document.createElement("div")).classList.add("tabulator-col-sorter"),"object"==_typeof(this.table.options.headerSortElement)?i.appendChild(this.table.options.headerSortElement):i.innerHTML=this.table.options.headerSortElement,e.appendChild(i),t.modules.sort.element=i,o.addEventListener("click",(function(e){var o="",i=[],s=!1;if(t.modules.sort){if(t.modules.sort.tristate)o="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?((s=(i=n.getSort()).findIndex((function(e){return e.field===t.getField()})))>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:t,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(t,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}})))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=[];return this.sortList.forEach((function(e){e.column&&t.push({column:e.column.getComponent(),field:e.column.getField(),dir:e.dir})})),t},Sort.prototype.setSort=function(t,e){var o=this,i=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach((function(t){var e;(e=o.table.columnManager.findColumn(t.column))?(t.column=e,i.push(t),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)})),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),t.getField()))switch(void 0===(e=t.getFieldValue(o))?"undefined":_typeof(e)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},Sort.prototype.sort=function(t){var e=this,o=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,i=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?o.forEach((function(t,o){e.setColumnHeader(t.column,t.dir)})):(o.forEach((function(t,o){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,i.push(t)),e.setColumnHeader(t.column,t.dir)})),i.length&&e._sortItems(t,i)),e.table.options.dataSorted&&(t.forEach((function(t){n.push(t.getComponent())})),e.table.options.dataSorted.call(e.table,e.getSort(),n))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach((function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))}))},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItems=function(t,e){var o=this,i=e.length-1;t.sort((function(t,n){for(var s,a=i;a>=0;a--){var r=e[a];if(0!==(s=o._sortRow(t,n,r.column,r.dir,r.params)))break}return s}))},Sort.prototype._sortRow=function(t,e,o,i,n){var s="asc"==i?t:e,a="asc"==i?e:t;return t=void 0!==(t=o.getFieldValue(s.getData()))?t:"",e=void 0!==(e=o.getFieldValue(a.getData()))?e:"",o.modules.sort.sorter.call(this,t,e,void 0,void 0,o.getComponent(),i,n)},Sort.prototype.sorters={number:function(t,e,o,i,n,s,a){var r=a.alignEmptyValues,l=a.decimalSeparator,u=a.thousandSeparator,c=0;if(t=String(t),e=String(e),u&&(t=t.split(u).join(""),e=e.split(u).join("")),l&&(t=t.split(l).join("."),e=e.split(l).join(".")),t=parseFloat(t),e=parseFloat(e),isNaN(t))c=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;c=1}return("top"===r&&"desc"===s||"bottom"===r&&"asc"===s)&&(c*=-1),c},string:function(t,e,o,i,n,s,a){var r,l=a.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(a.locale)){case"boolean":a.locale&&(r=this.table.modules.localize.getLocale());break;case"string":r=a.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),r)}u=1}else u=e?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u},date:function(t,e,o,i,n,s,a){return a.format||(a.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,o,i,n,s,a)},time:function(t,e,o,i,n,s,a){return a.format||(a.format="HH:mm"),this.sorters.datetime.call(this,t,e,o,i,n,s,a)},datetime:function(t,e,o,i,n,s,a){var r=a.format||"DD/MM/YYYY HH:mm:ss",l=a.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,r),e=moment(e,r),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,o,i,n,s,a){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,o,i,n,s,a){var r=a.type||"length",l=a.alignEmptyValues,u=0;function c(t){switch(r){case"length":return t.length;case"sum":return t.reduce((function(t,e){return t+e}));case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce((function(t,e){return t+e}))/t.length}}if(Array.isArray(t)){if(Array.isArray(e))return(t?c(t):0)-(e?c(e):0);l=1}else l=Array.isArray(e)?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u},exists:function(t,e,o,i,n,s,a){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,o,i,n,s,a){var r,l,u,c,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=a.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if((r=String(t).toLowerCase())===(l=String(e).toLowerCase()))return 0;if(!m.test(r)||!m.test(l))return r>l?1:-1;for(r=r.match(p),l=l.match(p),d=r.length>l.length?l.length:r.length;h<d;)if((u=r[h])!==(c=l[h++]))return isFinite(u)&&isFinite(c)?("0"===u.charAt(0)&&(u="."+u),"0"===c.charAt(0)&&(c="."+c),u-c):u>c?1:-1;return r.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},Tabulator.prototype.registerModule("sort",Sort);var Validate=function(t){this.table=t,this.invalidCells=[]};Validate.prototype.initializeColumn=function(t){var e,o=this,i=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach((function(t){(e=o._extractValidator(t))&&i.push(e)})):(e=this._extractValidator(t.definition.validator))&&i.push(e),t.modules.validate=!!i.length&&i)},Validate.prototype._extractValidator=function(t){var e,o,i;switch(void 0===t?"undefined":_typeof(t)){case"string":return(i=t.indexOf(":"))>-1?(e=t.substring(0,i),o=t.substring(i+1)):e=t,this._buildValidator(e,o);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,e){var o="function"==typeof t?t:this.validators[t];return o?{type:"function"==typeof t?"function":t,func:o,params:e}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,e,o){var i=this,n=[],s=this.invalidCells.indexOf(e);return t&&t.forEach((function(t){t.func.call(i,e.getComponent(),o,t.params)||n.push({type:t.type,parameters:t.params})})),n=!n.length||n,e.modules.validate||(e.modules.validate={}),!0===n?(e.modules.validate.invalid=!1,e.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(e.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&e.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(e)),n},Validate.prototype.getInvalidCells=function(){var t=[];return this.invalidCells.forEach((function(e){t.push(e.getComponent())})),t},Validate.prototype.clearValidation=function(t){var e;t.modules.validate&&t.modules.validate.invalid&&(t.getElement().classList.remove("tabulator-validation-fail"),t.modules.validate.invalid=!1,(e=this.invalidCells.indexOf(t))>-1&&this.invalidCells.splice(e,1))},Validate.prototype.validators={integer:function(t,e,o){return""===e||null==e||"number"==typeof(e=Number(e))&&isFinite(e)&&Math.floor(e)===e},float:function(t,e,o){return""===e||null==e||"number"==typeof(e=Number(e))&&isFinite(e)&&e%1!=0},numeric:function(t,e,o){return""===e||null==e||!isNaN(e)},string:function(t,e,o){return""===e||null==e||isNaN(e)},max:function(t,e,o){return""===e||null==e||parseFloat(e)<=o},min:function(t,e,o){return""===e||null==e||parseFloat(e)>=o},starts:function(t,e,o){return""===e||null==e||String(e).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(t,e,o){return""===e||null==e||String(e).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(t,e,o){return""===e||null==e||String(e).length>=o},maxLength:function(t,e,o){return""===e||null==e||String(e).length<=o},in:function(t,e,o){return""===e||null==e||("string"==typeof o&&(o=o.split("|")),""===e||o.indexOf(e)>-1)},regex:function(t,e,o){return""===e||null==e||new RegExp(o).test(e)},unique:function(t,e,o){if(""===e||null==e)return!0;var i=!0,n=t.getData(),s=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(t){var o=t.getData();o!==n&&e==s.getFieldValue(o)&&(i=!1)})),i},required:function(t,e,o){return""!==e&&null!=e}},Tabulator.prototype.registerModule("validate",Validate);export default Tabulator;
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=e[n];if(t.call(i,s,n,e))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=e[n];if(t.call(i,s,n,e))return s;n++}}}),String.prototype.includes||(String.prototype.includes=function(t,e){if(t instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===e&&(e=0),-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;var n,s,a=0|e,r=Math.max(a>=0?a:i-Math.abs(a),0);for(;r<i;){if((n=o[r])===(s=t)||"number"==typeof n&&"number"==typeof s&&isNaN(n)&&isNaN(s))return!0;r++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}return o},writable:!0,configurable:!0});var ColumnManager=function(t){this.table=t,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};ColumnManager.prototype.createHeadersElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-headers"),t},ColumnManager.prototype.createHeaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-header"),this.table.options.headerVisible||t.classList.add("tabulator-header-hidden"),t},ColumnManager.prototype.initialize=function(){},ColumnManager.prototype.setRowManager=function(t){this.rowManager=t},ColumnManager.prototype.getElement=function(){return this.element},ColumnManager.prototype.getHeadersElement=function(){return this.headersElement},ColumnManager.prototype.scrollHorizontal=function(t){var e=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=t,t>o?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(t){var e,o,i=[],n=this.table.options.autoColumnsDefinitions;if(t&&t.length){for(var s in e=t[0]){var a={field:s,title:s},r=e[s];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}a.sorter=o,i.push(a)}if(n)switch(void 0===n?"undefined":_typeof(n)){case"function":this.table.options.columns=n.call(this.table,i);break;case"object":Array.isArray(n)?i.forEach((function(t){var e=n.find((function(e){return e.field===t.field}));e&&Object.assign(t,e)})):i.forEach((function(t){n[t.field]&&Object.assign(t,n[t.field])})),this.table.options.columns=i}else this.table.options.columns=i;this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach((function(t,e){o._addColumn(t)})),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),s=o?this.findColumnIndex(o):o;if(o&&s>-1){var a=this.columns.indexOf(o.getTopColumn()),r=o.getElement();e?(this.columns.splice(a,0,i),r.parentNode.insertBefore(n,r)):(this.columns.splice(a+1,0,i),r.parentNode.insertBefore(n,r.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach((function(t){t.reRegisterPosition()}))},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach((function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)})),t.columns.forEach((function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)})),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){return"object"!=(void 0===t?"undefined":_typeof(t))?this.columnsByField[t]||!1:t instanceof Column?t:t instanceof ColumnComponent?t._getSelf()||!1:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&this.columns.find((function(e){return e.element===t}))||!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach((function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])})),o},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getFirstVisibileColumn=function(t){return(t=this.columnsByIndex.findIndex((function(t){return t.visible})))>-1&&this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex((function(e){return t===e}))},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach((function(e,o){t(e,o)}))},ColumnManager.prototype.getDefinitions=function(t){var e=[];return this.columnsByIndex.forEach((function(o){(!t||t&&o.visible)&&e.push(o.getDefinition())})),e},ColumnManager.prototype.getDefinitionTree=function(){var t=[];return this.columns.forEach((function(e){t.push(e.getDefinition(!0))})),t},ColumnManager.prototype.getComponents=function(t){var e=[];return(t?this.columns:this.columnsByIndex).forEach((function(t){e.push(t.getComponent())})),e},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach((function(e){e.visible&&(t+=e.getWidth())})),t},ColumnManager.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var s,a=this,r=t.indexOf(e),l=[];r>-1&&(t.splice(r,1),(s=t.indexOf(o))>-1?i&&(s+=1):s=r,t.splice(s,0,e),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach((function(t){l=l.concat(a.table.modules.dataTree.getTreeChildren(t,!1,!0))})),(l=l.concat(this.table.rowManager.rows)).forEach((function(t){if(t.cells.length){var e=t.cells.splice(r,1)[0];t.cells.splice(s,0,e)}}))))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,s=0,a=0,r=t.getElement();return new Promise((function(l,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":a=-i.element.clientWidth/2;break;case"right":a=r.clientWidth-i.headersElement.clientWidth}if(!o&&(s=r.offsetLeft)>0&&s+r.offsetWidth<i.element.clientWidth)return!1;n=r.offsetLeft+a,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),l()}else console.warn("Scroll Error - Column not visible"),u("Scroll Error - Column not visible")}))},ColumnManager.prototype.generateCells=function(t){var e=[];return this.columnsByIndex.forEach((function(o){e.push(o.generateCell(t))})),e},ColumnManager.prototype.getFlexBaseWidth=function(){var t=this,e=t.table.element.clientWidth,o=0;return t.rowManager.element.scrollHeight>t.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach((function(i){var n,s,a;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),a="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=a>s?a:s)})),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise((function(n,s){var a=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(!0),"fitColumns"!=i.table.modules.layout.getMode()&&a.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(),n(a)}))},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],(e=this.columnsByIndex.indexOf(t))>-1&&this.columnsByIndex.splice(e,1),(e=this.columns.indexOf(t))>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1||t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach((function(e){t.push(e.getComponent())})),t},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach((function(t){t.show()})):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach((function(t){t.hide()})):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach((function(e){t.push(e.getComponent())})),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},ColumnComponent.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},ColumnComponent.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(t){var e;return e=!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),e},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach((function(e,o){var n=new t(e,i);i.attachColumn(n)})),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach((function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)}))},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach((function(t){t.reRegisterPosition()})):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,(function(o){t.element.setAttribute("title",o||e.title)})):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",(function(e){t.setTooltip()}))},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",(function(t){n.headerClick(t,i.getComponent())})),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",(function(t){n.headerDblClick(t,i.getComponent())})),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",(function(t){n.headerContext(t,i.getComponent())})),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",(function(t){o=!0}),{passive:!0}),i.element.addEventListener("touchend",(function(t){o&&n.headerTap(t,i.getComponent()),o=!1}))),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",(function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout((function(){clearTimeout(t),t=null}),300)}))),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",(function(t){clearTimeout(e),e=setTimeout((function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())}),1e3)}),{passive:!0}),i.element.addEventListener("touchend",(function(t){clearTimeout(e),e=null}))),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=this.definition,o=this.table;(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(e.headerContextMenu||e.headerClickMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass)&&e.cssClass.split(" ").forEach((function(e){t.element.classList.add(e)}));e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(void 0===e.minWidth?this.table.options.columnMinWidth:parseInt(e.minWidth)),(e.maxWidth||this.table.options.columnMaxWidth)&&!1!==e.maxWidth&&this.setMaxWidth(void 0===e.maxWidth?this.table.options.columnMaxWidth:parseInt(e.maxWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign},Column.prototype._buildColumnHeaderContent=function(){this.definition,this.table;var t=document.createElement("div");return t.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),t.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),t},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",(function(t){t.stopPropagation(),n.focus()})),n.addEventListener("change",(function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())})),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,(function(t){n.value=t||e.title||"&nbsp;"})):n.value=e.title||"&nbsp;"}else e.field?o.modules.localize.bind("columns|"+e.field,(function(o){t._formatColumnHeaderTitle(i,o||e.title||"&nbsp;")})):t._formatColumnHeaderTitle(i,e.title||"&nbsp;");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,s,a,r=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),a=function(t){r.titleFormatterRendered=t},s={getValue:function(){return e},getElement:function(){return t}},n="function"==typeof(n=this.definition.titleFormatterParams||{})?n():n,void 0===(i=o.call(this.table.modules.format,s,n,a))?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){var t=this;(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass)&&this.definition.cssClass.split(" ").forEach((function(e){t.element.classList.add(e)}));(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign,this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,s=0;s<n&&(e=o=o[i[s]],o);s++);return e},Column.prototype._setFlatData=function(t,e){this.field&&(t[this.field]=e)},Column.prototype._setNestedData=function(t,e){for(var o=t,i=this.fieldStructure,n=i.length,s=0;s<n;s++)if(s==n-1)o[i[s]]=e;else{if(!o[i[s]]){if(void 0===e)break;o[i[s]]={}}o=o[i[s]]}},Column.prototype.attachColumn=function(t){this.groupElement?(this.columns.push(t),this.groupElement.appendChild(t.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},Column.prototype.verticalAlign=function(t,e){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:e||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===t||(this.element.style.paddingTop="bottom"===t?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach((function(e){e.verticalAlign(t)}))},Column.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach((function(t){t.clearVerticalAlign()}))},Column.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},Column.prototype.getElement=function(){return this.element},Column.prototype.getGroupElement=function(){return this.groupElement},Column.prototype.getField=function(){return this.field},Column.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},Column.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},Column.prototype.getColumns=function(){return this.columns},Column.prototype.getCells=function(){return this.cells},Column.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},Column.prototype.getDefinition=function(t){var e=[];return this.isGroup&&t&&(this.columns.forEach((function(t){e.push(t.getDefinition(!0))})),this.definition.columns=e),this.definition},Column.prototype.checkColumnVisibility=function(){var t=!1;this.columns.forEach((function(e){e.visible&&(t=!0)})),t?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},Column.prototype.show=function(t,e){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(t){t.show()})),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},Column.prototype.hide=function(t,e){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach((function(t){t.hide()})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},Column.prototype.matchChildWidths=function(){var t=0;this.contentElement&&this.columns.length&&(this.columns.forEach((function(e){e.visible&&(t+=e.getWidth())})),this.contentElement.style.maxWidth=t-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.removeChild=function(t){var e=this.columns.indexOf(t);e>-1&&this.columns.splice(e,1),this.columns.length||this.delete()},Column.prototype.setWidth=function(t){this.widthFixed=!0,this.setWidthActual(t)},Column.prototype.setWidthActual=function(t){isNaN(t)&&(t=Math.floor(this.table.element.clientWidth/100*parseInt(t))),t=Math.max(this.minWidth,t),this.maxWidth&&(t=Math.min(this.maxWidth,t)),this.width=t,this.widthStyled=t?t+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach((function(t){t.setWidth()})),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},Column.prototype.checkCellHeights=function(){var t=[];this.cells.forEach((function(e){e.row.heightInitialized&&(null!==e.row.getElement().offsetParent?(t.push(e.row),e.row.clearCellHeight()):e.row.heightInitialized=!1)})),t.forEach((function(t){t.calcHeight()})),t.forEach((function(t){t.setCellHeight()}))},Column.prototype.getWidth=function(){var t=0;return this.isGroup?this.columns.forEach((function(e){e.visible&&(t+=e.getWidth())})):t=this.width,t},Column.prototype.getHeight=function(){return this.element.offsetHeight},Column.prototype.setMinWidth=function(t){this.minWidth=t,this.minWidthStyled=t?t+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach((function(t){t.setMinWidth()}))},Column.prototype.setMaxWidth=function(t){this.maxWidth=t,this.maxWidthStyled=t?t+"px":"",this.element.style.maxWidth=this.maxWidthStyled,this.cells.forEach((function(t){t.setMaxWidth()}))},Column.prototype.delete=function(){var t=this;return new Promise((function(e,o){t.isGroup&&t.columns.forEach((function(t){t.delete()})),t.table.modExists("edit")&&t.table.modules.edit.currentCell.column===t&&t.table.modules.edit.cancelEdit();for(var i=t.cells.length,n=0;n<i;n++)t.cells[0].delete();t.element.parentNode&&t.element.parentNode.removeChild(t.element),t.element=!1,t.contentElement=!1,t.titleElement=!1,t.groupElement=!1,t.parent.isGroup&&t.parent.removeChild(t),t.table.columnManager.deregisterColumn(t),t.table.options.virtualDomHoz&&t.table.vdomHoz.reinitialize(!0),e()}))},Column.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},Column.prototype.validate=function(){var t=[];return this.cells.forEach((function(e){e.validate()||t.push(e.getComponent())})),!t.length||t},Column.prototype.generateCell=function(t){var e=new Cell(this,t);return this.cells.push(e),e},Column.prototype.nextColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._nextVisibleColumn(t+1)},Column.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},Column.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},Column.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},Column.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){this.widthFixed||(this.element.style.width="",this.cells.forEach((function(t){t.clearWidth()})));var t=this.element.offsetWidth;this.width&&this.widthFixed||(this.cells.forEach((function(e){var o=e.getWidth();o>t&&(t=o)})),t&&this.setWidthActual(t+1))},Column.prototype.updateDefinition=function(t){var e=this;return new Promise((function(o,i){var n;e.isGroup||e.parent.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then((function(t){n.field==e.field&&(e.field=!1),e.delete().then((function(){o(t.getComponent())})).catch((function(t){i(t)}))})).catch((function(t){i(t)})))}))},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","maxWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",(function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e})),"virtual"===this.renderMode&&t.element.addEventListener("scroll",(function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e}))},RowManager.prototype.findRow=function(t){var e=this;return"object"!=(void 0===t?"undefined":_typeof(t))?null!=t&&(e.rows.find((function(o){return o.data[e.table.options.index]==t}))||!1):t instanceof Row?t:t instanceof RowComponent?t._getSelf()||!1:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&e.rows.find((function(e){return e.getElement()===t}))||!1},RowManager.prototype.getRowFromDataObject=function(t){return this.rows.find((function(e){return e.data===t}))||!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,s=this.getDisplayRows().indexOf(t),a=t.getElement(),r=0;return new Promise((function(t,l){if(s>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(a).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(a)&&(r=Tabulator.prototype.helpers.elOffset(a).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&r<n.element.clientHeight-a.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=Tabulator.prototype.helpers.elOffset(a).top-Tabulator.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(s,!0)}switch(e){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(a.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-a.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-a.offsetTop)+a.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+a.offsetHeight}t()}else console.warn("Scroll Error - Row not visible"),l("Scroll Error - Row not visible")}))},RowManager.prototype.setData=function(t,e,o){var i=this,n=this;return new Promise((function(s,a){e&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(t,!0):i.reRenderInPosition((function(){n._setDataActual(t)})):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(t),i.resetScroll(),i._setDataActual(t)),s()}))},RowManager.prototype._setDataActual=function(t,e){var o=this;o.table.options.dataLoading.call(this.table,t),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(t)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(t),t.forEach((function(t,e){if(t&&"object"===(void 0===t?"undefined":_typeof(t))){var i=new Row(t,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",t)})),o.refreshActiveData(!1,!1,e),o.table.options.dataLoaded.call(this.table,t)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===t?"undefined":_typeof(t),"\nData:     ",t)},RowManager.prototype._wipeElements=function(){this.rows.forEach((function(t){t.wipe()})),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()},RowManager.prototype.deleteRow=function(t,e){var o=this.rows.indexOf(t),i=this.activeRows.indexOf(t);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator((function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)})),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,s=[];return new Promise((function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach((function(t,i){var a=n.addRow(t,e,o,!0);s.push(a)})),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(s)}))},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,s,a=t instanceof Row?t:new Row(t||{},this),r=this.findAddRowPos(e),l=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),r?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],r=!1):s.length&&(o=s[s.length-1],r=!(s.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(a);var u=a.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?r?u[0]!==a&&(o=u[0],this._moveRowInArray(a.getGroup().rows,a,o,!r)):u[u.length-1]!==a&&(o=u[u.length-1],this._moveRowInArray(a.getGroup().rows,a,o,!r)):this._moveRowInArray(a.getGroup().rows,a,o,!r))}return o&&(l=this.rows.indexOf(o)),o&&l>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator((function(t){var e=t.indexOf(o);e>-1&&t.splice(r?e:e+1,0,a)})),n>-1&&this.activeRows.splice(r?n:n+1,0,a),this.rows.splice(r?l:l+1,0,a)):r?(this.displayRowIterator((function(t){t.unshift(a)})),this.activeRows.unshift(a),this.rows.unshift(a)):(this.displayRowIterator((function(t){t.push(a)})),this.activeRows.push(a),this.rows.push(a)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,a.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),i||this.reRenderInPosition(),a},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator((function(n){i._moveRowInArray(n,t,e,o)})),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof Group&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),s=t.getGroup();n===s?this._moveRowInArray(n.rows,t,e,o):(s&&s.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,s,a;if(e!==o&&((n=t.indexOf(e))>-1&&(t.splice(n,1),(s=t.indexOf(o))>-1?i?t.splice(s+1,0,e):t.splice(s,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){a=s>n?s:n+1;for(var r=n<s?n:s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof Row&&"row"==i.type?i:this.nextDisplayRow(i,e)},RowManager.prototype.prevDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!e||!i||i instanceof Row&&"row"==i.type?i:this.prevDisplayRow(i,e)},RowManager.prototype.findRowIndex=function(t,e){var o;return!!((t=this.findRow(t))&&(o=e.indexOf(t))>-1)&&o},RowManager.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach((function(t){"row"==t.type&&o.push(t.getData(e||"data"))})),o},RowManager.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach((function(t){e.push(t.getComponent())})),e},RowManager.prototype.getDataCount=function(t){return this.getRows(t).length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach((function(t){delete t.column})),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then((function(e){t._setDataActual(e,!0)})).catch((function(t){}))},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then((function(){})).catch((function(){}))):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then((function(){})).catch((function(){}))):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then((function(){})).catch((function(){})):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this.table,s=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)(!this.redrawBlockRestoreConfig||s.indexOf(t)<s.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:t,skipStage:e,renderInPosition:o});else{switch(this.table.modExists("edit")&&this.table.modules.edit.cancelEdit(),t||(t="all"),n.options.selectable&&!n.options.selectablePersistence&&n.modExists("selectRow")&&n.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:n.modExists("filter")?this.setActiveRows(n.modules.filter.filter(this.rows)):this.setActiveRows(this.rows.slice(0));case"sort":e?e=!1:n.modExists("sort")&&n.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&n.modules.frozenRows.isFrozen()&&(n.modules.frozenRows.getDisplayIndex()||n.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=n.modules.frozenRows.getDisplayIndex(),!0!==(i=this.setDisplayRows(n.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&n.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:n.options.groupBy&&n.modExists("groupRows")&&(n.modules.groupRows.getDisplayIndex()||n.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=n.modules.groupRows.getDisplayIndex(),!0!==(i=this.setDisplayRows(n.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&n.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:n.options.dataTree&&n.modExists("dataTree")&&(n.modules.dataTree.getDisplayIndex()||n.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=n.modules.dataTree.getDisplayIndex(),!0!==(i=this.setDisplayRows(n.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&n.modules.dataTree.setDisplayIndex(i)),n.options.pagination&&n.modExists("page")&&!o&&"local"==n.modules.page.getMode()&&n.modules.page.reset();case"page":e?e=!1:n.options.pagination&&n.modExists("page")&&(n.modules.page.getDisplayIndex()||n.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=n.modules.page.getDisplayIndex(),"local"==n.modules.page.getMode()&&n.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=this.setDisplayRows(n.modules.page.getRows(this.getDisplayRows(i-1)),i))&&n.modules.page.setDisplayIndex(i))}Tabulator.prototype.helpers.elVisible(this.element)&&(o?this.reRenderInPosition():("all"===t&&this.table.options.virtualDomHoz&&this.table.vdomHoz.dataChange(),this.renderTable(),n.options.layoutColumnsOnNewData&&this.table.columnManager.redraw(!0))),n.modExists("columnCalcs")&&n.modules.columnCalcs.recalc(this.activeRows)}},RowManager.prototype.regenerateRowNumbers=function(){var t=this;this.rowNumColumn&&this.activeRows.forEach((function(e){var o=e.getCell(t.rowNumColumn);o&&o._generateContents()}))},RowManager.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},RowManager.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},RowManager.prototype.getNextDisplayIndex=function(){return this.displayRows.length},RowManager.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},RowManager.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},RowManager.prototype.getVisibleRows=function(t){var e=this.element.scrollTop,o=this.element.clientHeight+e,i=!1,n=0,s=0,a=this.getDisplayRows();if(t){this.getDisplayRows();for(var r=this.vDomTop;r<=this.vDomBottom;r++)if(a[r])if(i){if(!(o-a[r].getElement().offsetTop>=0))break;s=r}else if(e-a[r].getElement().offsetTop>=0)n=r;else{if(i=!0,!(o-a[r].getElement().offsetTop>=0))break;s=r}}else n=this.vDomTop,s=this.vDomBottom;return a.slice(n,s+1)},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;case"selected":e=this.table.modules.selectRow.selectedRows;break;default:e=this.rows}return e},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a]){var r=e-s[a].getElement().offsetTop;if(!(!1===i||Math.abs(r)<i))break;i=r,o=a}t&&t(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),t&&t()},RowManager.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},RowManager.prototype.getRenderMode=function(){return this.renderMode},RowManager.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},RowManager.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},RowManager.prototype.checkClassicModeGroupHeaderWidth=function(){var t=this,e=this.tableElement,o=!0;t.getDisplayRows().forEach((function(i,n){t.styleRow(i,n),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)})),e.style.minWidth=o?t.table.columnManager.getWidth()+"px":""},RowManager.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"},RowManager.prototype._clearVirtualDom=function(){var t=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);t.firstChild;)t.removeChild(t.firstChild);t.style.paddingTop="",t.style.paddingBottom="",t.style.minWidth="",t.style.minHeight="",t.style.display="",t.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},RowManager.prototype.styleRow=function(t,e){var o=t.getElement();e%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},RowManager.prototype._virtualRenderFill=function(t,e,o){var i=this.tableElement,n=this.element,s=0,a=0,r=0,l=0,u=!0,c=this.getDisplayRows();if(o=o||0,t=t||0){for(;i.firstChild;)i.removeChild(i.firstChild);var d=(this.displayRowsCount-t+1)*this.vDomRowHeight;d<this.height&&(t-=Math.ceil((this.height-d)/this.vDomRowHeight))<0&&(t=0),t-=s=Math.min(Math.max(Math.floor(this.vDomWindowBuffer/this.vDomRowHeight),this.vDomWindowMinMarginRows),t)}else this._clearVirtualDom();if(this.displayRowsCount&&Tabulator.prototype.helpers.elVisible(this.element)){for(this.vDomTop=t,this.vDomBottom=t-1;(a<=this.height+this.vDomWindowBuffer||l<this.vDomWindowMinTotalRows)&&this.vDomBottom<this.displayRowsCount-1;){var h,p=this.vDomBottom+1,m=c[p];this.styleRow(m,p),i.appendChild(m.getElement()),m.initialize(),m.heightInitialized||m.normalizeHeight(!0),h=m.getHeight(),l<s?r+=h:a+=h,h>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*h),"group"!==m.type&&(u=!1),this.vDomBottom++,l++}t?(this.vDomTopPad=e?this.vDomRowHeight*this.vDomTop+o:this.scrollTop-r,this.vDomBottomPad=this.vDomBottom==this.displayRowsCount-1?0:Math.max(this.vDomScrollHeight-this.vDomTopPad-a-r,0)):(this.vDomTopPad=0,this.vDomRowHeight=Math.floor((a+r)/l),this.vDomBottomPad=this.vDomRowHeight*(this.displayRowsCount-this.vDomBottom-1),this.vDomScrollHeight=r+a+this.vDomBottomPad-this.height),i.style.paddingTop=this.vDomTopPad+"px",i.style.paddingBottom=this.vDomBottomPad+"px",e&&(this.scrollTop=this.vDomTopPad+r+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,n.scrollTop=this.scrollTop,i.style.minWidth=u?this.table.columnManager.getWidth()+"px":"",this.table.options.groupBy&&"fitDataFill"!=this.table.modules.layout.getMode()&&this.displayRowsCount==this.table.modules.groupRows.countGroups()&&(this.tableElement.style.minWidth=this.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],a=s.getHeight()||this.vDomRowHeight;t>=a&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=a,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=a,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),e<this.vDomMaxRenderChain&&this.vDomTop&&t>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,s=i[n],a=s.getHeight()||this.vDomRowHeight;t>=a&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=a,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=a,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),e<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&t>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach((function(t){t.calcHeight()})),t.forEach((function(t){t.setCellHeight()})),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach((function(t){t.normalizeHeight()}))},RowManager.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=Math.floor(this.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||e==this.element.clientHeight||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach((function(t){t.reinitialize(!0)}))},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var VDomHoz=function(t){this.table=t,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()};VDomHoz.prototype.compatabilityCheck=function(){var t=this.table.options,e=!0;return"fitDataTable"==t.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),e=!1),t.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),e=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),e=!1),t.columns&&t.columns.find((function(t){return t.frozen}))&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),e=!1),e||(t.virtualDomHoz=!1),e},VDomHoz.prototype.initialize=function(){var t=this;this.holderEl.addEventListener("scroll",(function(){var e=t.holderEl.scrollLeft;t.scrollLeft!=e&&(t.scrollLeft=e,t.scroll(e-(t.vDomScrollPosLeft+t.window)))}))},VDomHoz.prototype.deinitialize=function(){this.initialized=!1},VDomHoz.prototype.clear=function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0},VDomHoz.prototype.dataChange=function(){var t,e,o=!1,i=0,n=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach((function(t){!t.definition.width&&t.visible&&(o=!0)})),o&&o&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,t=this.table.options.groupBy?this.table.modules.groupRows.getGroups(!1)[0].getRows(!1)[0]:this.table.rowManager.getDisplayRows()[0])){e=t.getElement(),t.generateCells(),this.element.appendChild(e);for(n=0;n<t.cells.length;n++){var s=t.cells[n];if(e.appendChild(s.getElement()),s.column.reinitializeWidth(),(i+=s.column.getWidth())>this.vDomScrollPosRight)break}for(e.parentNode.removeChild(e),this.fitDataColAvg=Math.floor(i/(n+1));n<this.table.columnManager.columnsByIndex.length;n++)this.table.columnManager.columnsByIndex[n].setWidth(this.fitDataColAvg);this.reinitialize(!1,!0)}}else"fitColumns"===this.table.options.layout&&(this.table.modules.layout.layout(),this.table.vdomHoz.reinitialize(!1,!0))},VDomHoz.prototype.fitDataLayoutOverride=function(){for(var t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()},VDomHoz.prototype.reinitialize=function(t,e){var o=this,i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!t||this.initialized){this.clear(),this.scrollLeft=this.holderEl.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window;var n=0;this.table.columnManager.columnsByIndex.forEach((function(t){var e={};if(t.visible){var i=t.getWidth();e.leftPos=n,e.rightPos=n+i,n+i>o.vDomScrollPosLeft&&n<o.vDomScrollPosRight?(-1==o.leftCol&&(o.leftCol=o.columns.length,o.vDomPadLeft=n),o.rightCol=o.columns.length):-1!==o.leftCol&&(o.vDomPadRight+=i),o.columns.push(t),t.modules.vdomHoz=e,n+=i}})),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.element.style.paddingRight=this.vDomPadRight+"px",this.initialized=!0,e||t&&!this.reinitChanged(i)||this.renitializeRows(),this.holderEl.scrollLeft=this.scrollLeft}},VDomHoz.prototype.reinitChanged=function(t){var e=this,o=!0;return t.cols.length!==this.columns.length||t.leftCol!==this.leftCol||t.rightCol!==this.rightCol||(t.cols.forEach((function(t,i){t!==e.columns[i]&&(o=!1)})),!o)},VDomHoz.prototype.renitializeRows=function(){var t=this;this.table.rowManager.getVisibleRows().forEach((function(e){t.reinitializeRow(e,!0)}))},VDomHoz.prototype.scroll=function(t){this.vDomScrollPosLeft+=t,this.vDomScrollPosRight+=t,t>.8*this.holderEl.clientWidth?this.reinitialize():t>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())},VDomHoz.prototype.colPositionAdjust=function(t,e,o){for(var i=t;i<e;i++){var n=this.columns[i];n.modules.vdomHoz.leftPos-=o,n.modules.vdomHoz.rightPos-=o}},VDomHoz.prototype.addColRight=function(){var t,e,o=this.columns[this.rightCol+1];o&&o.modules.vdomHoz.leftPos<=this.vDomScrollPosRight&&(this.table.rowManager.getVisibleRows().forEach((function(t){if("group"!==t.type){var e=t.getCell(o);t.getElement().appendChild(e.getElement()),e.cellRendered()}})),this.fitDataColAvg&&(t=o.getWidth())===this.fitDataColAvg&&(o.reinitializeWidth(),(e=t-o.getWidth())&&(o.modules.vdomHoz.rightPos-=e,this.colPositionAdjust(this.rightCol+1,this.columns.length,e))),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=o.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())},VDomHoz.prototype.addColLeft=function(){var t=this.columns[this.leftCol-1];t&&t.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft&&(this.table.rowManager.getVisibleRows().forEach((function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().prepend(o.getElement()),o.cellRendered()}})),this.leftCol?this.vDomPadLeft-=t.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft())},VDomHoz.prototype.removeColRight=function(t){var e;(t=this.columns[this.rightCol])&&t.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(e=this.table.rowManager.getVisibleRows(),t.modules.vdomHoz.visible=!1,e.forEach((function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}})),this.vDomPadRight+=t.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())},VDomHoz.prototype.removeColLeft=function(){var t=this.columns[this.leftCol];t&&t.modules.vdomHoz.rightPos<this.vDomScrollPosLeft&&(this.table.rowManager.getVisibleRows().forEach((function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}})),this.vDomPadLeft+=t.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())},VDomHoz.prototype.initializeRow=function(t){if("group"!==t.type){t.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(var e=this.leftCol;e<=this.rightCol;e++){var o=this.columns[e];if(o&&o.visible){var i=t.getCell(o);t.getElement().appendChild(i.getElement()),i.cellRendered()}}}},VDomHoz.prototype.reinitializeRow=function(t,e){if("group"!==t.type&&(e||!t.modules.vdomHoz||t.modules.vdomHoz.leftCol!==this.leftCol||t.modules.vdomHoz.rightCol!==this.rightCol)){for(var o=t.getElement();o.firstChild;)o.removeChild(o.firstChild);this.initializeRow(t)}};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach((function(e){t.push(e.getComponent())})),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(t,e){this._row.moveToRow(t,e)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){return!!this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)},RowComponent.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},RowComponent.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var Row=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(t)};Row.prototype.create=function(){this.created||(this.created=!0,this.generateElement())},Row.prototype.createElement=function(){var t=document.createElement("div");t.classList.add("tabulator-row"),t.setAttribute("role","row"),this.element=t},Row.prototype.getElement=function(){return this.create(),this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var t,e,o,i=this;this.createElement(),!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),(i.table.options.rowContextMenu||i.table.options.rowClickMenu)&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",(function(t){i.table.options.rowClick(t,i.getComponent())})),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",(function(t){i.table.options.rowDblClick(t,i.getComponent())})),i.table.options.rowContext&&i.element.addEventListener("contextmenu",(function(t){i.table.options.rowContext(t,i.getComponent())})),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",(function(t){i.table.options.rowMouseEnter(t,i.getComponent())})),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",(function(t){i.table.options.rowMouseLeave(t,i.getComponent())})),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",(function(t){i.table.options.rowMouseOver(t,i.getComponent())})),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",(function(t){i.table.options.rowMouseOut(t,i.getComponent())})),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",(function(t){i.table.options.rowMouseMove(t,i.getComponent())})),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",(function(t){o=!0}),{passive:!0}),i.element.addEventListener("touchend",(function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1}))),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",(function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout((function(){clearTimeout(t),t=null}),300)}))),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",(function(t){clearTimeout(e),e=setTimeout((function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())}),1e3)}),{passive:!0}),i.element.addEventListener("touchend",(function(t){clearTimeout(e),e=null})))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(this.create(),!this.initialized||t){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach((function(t){e.element.appendChild(t.getElement()),t.cellRendered()})),t&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(t){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach((function(t){t.reinitialize(!0)}))},Row.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach((function(t){var o=t.getHeight();o>e&&(e=o)})),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach((function(t){t.setHeight()})),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach((function(t){t.clearHeight()}))},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(t){var e,o=this,i=this.element&&Tabulator.prototype.helpers.elVisible(this.element),n={};return new Promise((function(s,a){for(var r in"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t,e)o.data[r]=e[r];for(var r in o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock(),t){o.table.columnManager.getColumnsByFieldRoot(r).forEach((function(t){var n=o.getCell(t.getField());if(n){var s=t.getFieldValue(e);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}}))}o.table.options.groupUpdateOnCellEdit&&o.table.options.groupBy&&o.table.modExists("groupRows")&&o.table.modules.groupRows.reassignRowToGroup(o.row),i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),i&&(o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0))),o.table.options.rowUpdated.call(o.table,o.getComponent()),o.table.options.dataChanged&&o.table.options.dataChanged.call(o.table,o.table.rowManager.getData()),s()}))},Row.prototype.getData=function(t){return t&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,t):this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find((function(e){return e.column===t}))},Row.prototype.getCellIndex=function(t){return this.cells.findIndex((function(e){return e===t}))},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t<this.cells.length-1)for(var o=t+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){e=i;break}}}return e},Row.prototype.findPrevEditableCell=function(t){var e=!1;if(t>0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},Row.prototype.validate=function(){var t=[];return this.cells.forEach((function(e){e.validate()||t.push(e.getComponent())})),!t.length||t},Row.prototype.delete=function(){var t=this;return new Promise((function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(i=(n=t.getGroup().rows).indexOf(t))&&(i=n[i-1]):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()}))},Row.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.detatchModules=function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e<t;e++)this.cells[0].delete()},Row.prototype.wipe=function(){if(this.detatchModules(),this.deleteCells(),this.element){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.parentNode&&this.element.parentNode.removeChild(this.element)}this.element=!1,this.modules={}},Row.prototype.getGroup=function(){return this.modules.group||!1},Row.prototype.getComponent=function(){return this.component||(this.component=new RowComponent(this)),this.component};var CellComponent=function(t){this._cell=t};CellComponent.prototype.getValue=function(){return this._cell.getValue()},CellComponent.prototype.getOldValue=function(){return this._cell.getOldValue()},CellComponent.prototype.getInitialValue=function(){return this._cell.initialValue},CellComponent.prototype.getElement=function(){return this._cell.getElement()},CellComponent.prototype.getRow=function(){return this._cell.row.getComponent()},CellComponent.prototype.getData=function(){return this._cell.row.getData()},CellComponent.prototype.getField=function(){return this._cell.column.getField()},CellComponent.prototype.getColumn=function(){return this._cell.column.getComponent()},CellComponent.prototype.setValue=function(t,e){void 0===e&&(e=!0),this._cell.setValue(t,e)},CellComponent.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},CellComponent.prototype.restoreInitialValue=function(){this._cell.setValueActual(this._cell.initialValue)},CellComponent.prototype.edit=function(t){return this._cell.edit(t)},CellComponent.prototype.cancelEdit=function(){this._cell.cancelEdit()},CellComponent.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},CellComponent.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},CellComponent.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},CellComponent.prototype.validate=function(){return this._cell.validate()},CellComponent.prototype.clearValidation=function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},CellComponent.prototype.nav=function(){return this._cell.nav()},CellComponent.prototype.checkHeight=function(){this._cell.checkHeight()},CellComponent.prototype.getTable=function(){return this._cell.table},CellComponent.prototype._getSelf=function(){return this._cell};var Cell=function(t,e){this.table=t.table,this.column=t,this.row=e,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()};Cell.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value},Cell.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},Cell.prototype._configureCell=function(){var t=this,e=t.column.cellEvents,o=t.element,i=this.column.getField();(o.style.textAlign=t.column.hozAlign,t.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems={top:"flex-start",bottom:"flex-end",middle:"center"}[t.column.vertAlign]||"",t.column.hozAlign&&(o.style.justifyContent={left:"flex-start",right:"flex-end",center:"center"}[t.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),t.column.definition.cssClass)&&t.column.definition.cssClass.split(" ").forEach((function(t){o.classList.add(t)}));"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",(function(e){t._generateTooltip()})),t._bindClickEvents(e),t._bindTouchEvents(e),t._bindMouseEvents(e),t.column.modules.edit&&t.table.modules.edit.bindEditor(t),t.column.definition.rowHandle&&!1!==t.table.options.movableRows&&t.table.modExists("moveRow")&&t.table.modules.moveRow.initializeCell(t),t.column.visible||t.hide()},Cell.prototype._bindClickEvents=function(t){var e=this,o=e.element;(t.cellClick||e.table.options.cellClick)&&o.addEventListener("click",(function(o){var i=e.getComponent();t.cellClick&&t.cellClick.call(e.table,o,i),e.table.options.cellClick&&e.table.options.cellClick.call(e.table,o,i)})),t.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",(function(o){var i=e.getComponent();t.cellDblClick&&t.cellDblClick.call(e.table,o,i),e.table.options.cellDblClick&&e.table.options.cellDblClick.call(e.table,o,i)})):o.addEventListener("dblclick",(function(t){if(!e.table.modExists("edit")||e.table.modules.edit.currentCell!==e){t.preventDefault();try{if(document.selection)(o=document.body.createTextRange()).moveToElementText(e.element),o.select();else if(window.getSelection){var o;(o=document.createRange()).selectNode(e.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(t){}}})),(t.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",(function(o){var i=e.getComponent();t.cellContext&&t.cellContext.call(e.table,o,i),e.table.options.cellContext&&e.table.options.cellContext.call(e.table,o,i)}))},Cell.prototype._bindMouseEvents=function(t){var e=this,o=e.element;(t.cellMouseEnter||e.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",(function(o){var i=e.getComponent();t.cellMouseEnter&&t.cellMouseEnter.call(e.table,o,i),e.table.options.cellMouseEnter&&e.table.options.cellMouseEnter.call(e.table,o,i)})),(t.cellMouseLeave||e.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",(function(o){var i=e.getComponent();t.cellMouseLeave&&t.cellMouseLeave.call(e.table,o,i),e.table.options.cellMouseLeave&&e.table.options.cellMouseLeave.call(e.table,o,i)})),(t.cellMouseOver||e.table.options.cellMouseOver)&&o.addEventListener("mouseover",(function(o){var i=e.getComponent();t.cellMouseOver&&t.cellMouseOver.call(e.table,o,i),e.table.options.cellMouseOver&&e.table.options.cellMouseOver.call(e.table,o,i)})),(t.cellMouseOut||e.table.options.cellMouseOut)&&o.addEventListener("mouseout",(function(o){var i=e.getComponent();t.cellMouseOut&&t.cellMouseOut.call(e.table,o,i),e.table.options.cellMouseOut&&e.table.options.cellMouseOut.call(e.table,o,i)})),(t.cellMouseMove||e.table.options.cellMouseMove)&&o.addEventListener("mousemove",(function(o){var i=e.getComponent();t.cellMouseMove&&t.cellMouseMove.call(e.table,o,i),e.table.options.cellMouseMove&&e.table.options.cellMouseMove.call(e.table,o,i)}))},Cell.prototype._bindTouchEvents=function(t){var e,o,i,n=this,s=n.element;(t.cellTap||this.table.options.cellTap)&&(i=!1,s.addEventListener("touchstart",(function(t){i=!0}),{passive:!0}),s.addEventListener("touchend",(function(e){if(i){var o=n.getComponent();t.cellTap&&t.cellTap.call(n.table,e,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,e,o)}i=!1}))),(t.cellDblTap||this.table.options.cellDblTap)&&(e=null,s.addEventListener("touchend",(function(o){if(e){clearTimeout(e),e=null;var i=n.getComponent();t.cellDblTap&&t.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else e=setTimeout((function(){clearTimeout(e),e=null}),300)}))),(t.cellTapHold||this.table.options.cellTapHold)&&(o=null,s.addEventListener("touchstart",(function(e){clearTimeout(o),o=setTimeout((function(){clearTimeout(o),o=null,i=!1;var s=n.getComponent();t.cellTapHold&&t.cellTapHold.call(n.table,e,s),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,e,s)}),1e3)}),{passive:!0}),s.addEventListener("touchend",(function(t){clearTimeout(o),o=null})))},Cell.prototype._generateContents=function(){var t;switch(void 0===(t=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value)?"undefined":_typeof(t)){case"object":if(t instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(t)}else this.element.innerHTML="",null!=t&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",t);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=t}},Cell.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},Cell.prototype._generateTooltip=function(){var t=this.column.tooltip;t?(!0===t?t=this.value:"function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),void 0===t&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")},Cell.prototype.getElement=function(t){return this.loaded||(this.loaded=!0,t||this.layoutElement()),this.element},Cell.prototype.getValue=function(){return this.value},Cell.prototype.getOldValue=function(){return this.oldValue},Cell.prototype.setValue=function(t,e){var o;this.setValueProcessData(t,e)&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))},Cell.prototype.setValueProcessData=function(t,e){var o=!1;return this.value!=t&&(o=!0,e&&this.column.modules.mutate&&(t=this.table.modules.mutator.transformCell(this,t))),this.setValueActual(t),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},Cell.prototype.setValueActual=function(t){this.oldValue=this.value,this.value=t,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,t),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()},Cell.prototype.layoutElement=function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},Cell.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},Cell.prototype.clearWidth=function(){this.width="",this.element.style.width=""},Cell.prototype.getWidth=function(){return this.width||this.element.offsetWidth},Cell.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},Cell.prototype.setMaxWidth=function(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled},Cell.prototype.checkHeight=function(){this.row.reinitializeHeight()},Cell.prototype.clearHeight=function(){this.element.style.height="",this.height=null},Cell.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},Cell.prototype.getHeight=function(){return this.height||this.element.offsetHeight},Cell.prototype.show=function(){this.element.style.display=this.column.vertAlign?"inline-flex":""},Cell.prototype.hide=function(){this.element.style.display="none"},Cell.prototype.edit=function(t){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,t)},Cell.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var t=this.table.modules.edit.getCurrentCell();t&&t._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},Cell.prototype.validate=function(){return!this.column.modules.validate||!this.table.modExists("validate",!0)||!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())},Cell.prototype.delete=function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},Cell.prototype.nav=function(){var t=this,e=!1,o=this.row.getCellIndex(this);return{next:function(){var e,o=this.right();return!!o||!(!(e=t.table.rowManager.nextDisplayRow(t.row,!0))||!(o=e.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var e,o=this.left();return!!o||!(!(e=t.table.rowManager.prevDisplayRow(t.row,!0))||!(o=e.findPrevEditableCell(e.cells.length)))&&(o.edit(),!0)},left:function(){return!!(e=t.row.findPrevEditableCell(o))&&(e.edit(),!0)},right:function(){return!!(e=t.row.findNextEditableCell(o))&&(e.edit(),!0)},up:function(){var e=t.table.rowManager.prevDisplayRow(t.row,!0);e&&e.cells[o].edit()},down:function(){var e=t.table.rowManager.nextDisplayRow(t.row,!0);e&&e.cells[o].edit()}}},Cell.prototype.getIndex=function(){this.row.getCellIndex(this)},Cell.prototype.getComponent=function(){return this.component||(this.component=new CellComponent(this)),this.component};var FooterManager=function(t){this.table=t,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};FooterManager.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-footer"),t},FooterManager.prototype._initialize=function(t){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},FooterManager.prototype.getElement=function(){return this.element},FooterManager.prototype.append=function(t,e){this.activate(e),this.element.appendChild(t),this.table.rowManager.adjustTableSize()},FooterManager.prototype.prepend=function(t,e){this.activate(e),this.element.insertBefore(t,this.element.firstChild),this.table.rowManager.adjustTableSize()},FooterManager.prototype.remove=function(t){t.parentNode.removeChild(t),this.deactivate()},FooterManager.prototype.deactivate=function(t){this.element.firstChild&&!t||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},FooterManager.prototype.activate=function(t){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),t&&this.links.push(t)},FooterManager.prototype.redraw=function(){this.links.forEach((function(t){t.footerRedraw()}))};var Tabulator=function t(e,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(e)&&(this.initializeOptions(o||{}),this._create()),t.prototype.comms.register(this)};Tabulator.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnMaxWidth:!1,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"<div class='tabulator-arrow'></div>",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(t,e){return e},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(t,e){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:!1,dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},Tabulator.prototype.initializeOptions=function(t){if(!1!==t.invalidOptionWarnings)for(var e in t)void 0===this.defaultOptions[e]&&console.warn("Invalid table constructor option:",e);for(var e in this.defaultOptions)e in t?this.options[e]=t[e]:Array.isArray(this.defaultOptions[e])?this.options[e]=Object.assign([],this.defaultOptions[e]):"object"===_typeof(this.defaultOptions[e])&&null!==this.defaultOptions[e]?this.options[e]=Object.assign({},this.defaultOptions[e]):this.options[e]=this.defaultOptions[e]},Tabulator.prototype.initializeElement=function(t){return"undefined"!=typeof HTMLElement&&t instanceof HTMLElement?(this.element=t,!0):"string"==typeof t?(this.element=document.querySelector(t),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",t),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",t),!1)},Tabulator.prototype.rtlCheck=function(){var t=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==t.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}},Tabulator.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.dataEdited&&(console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"),this.options.dataChanged=this.options.dataEdited),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},Tabulator.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},Tabulator.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new ColumnManager(this),this.rowManager=new RowManager(this),this.footerManager=new FooterManager(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new VDomHoz(this)),this._buildElement(),this._loadInitialData()},Tabulator.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},Tabulator.prototype._buildElement=function(){var t=this,e=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);for(var n in i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",e.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",e.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",e.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),o.localize.initialize(),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder),i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var s=document.createElement("div");s.classList.add("tabulator-placeholder");var a=document.createElement("span");a.innerHTML=i.placeholder,s.appendChild(a),i.placeholder=s}if(e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(r=o.persistence.load("sort"))&&i.initialSort&&(r=i.initialSort):i.initialSort&&(r=i.initialSort),o.sort.setSort(r)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var l=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(l=o.persistence.load("filter"))&&i.initialFilter&&(l=i.initialFilter):i.initialFilter&&(l=i.initialFilter),o.filter.setFilter(l)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach((function(e){var i=t.columnManager.findColumn(e.field);if(!i)return console.warn("Column Filter Error - No matching column found:",e.field),!1;o.filter.setHeaderFilterValue(i,e.value)})),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},Tabulator.prototype._loadInitialData=function(){var t=this;if(t.options.pagination&&t.modExists("page"))if(t.modules.page.reset(!0,!0),"local"==t.options.pagination){if(t.options.data.length)t.rowManager.setData(t.options.data,!1,!0);else{if((t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax"))return void t.modules.ajax.loadData(!1,!0).then((function(){})).catch((function(){t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}));t.rowManager.setData(t.options.data,!1,!0)}t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}else t.options.ajaxURL?t.modules.page.setPage(t.options.paginationInitialPage).then((function(){})).catch((function(){})):t.rowManager.setData([],!1,!0);else t.options.data.length?t.rowManager.setData(t.options.data):(t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax")?t.modules.ajax.loadData(!1,!0).then((function(){})).catch((function(){})):t.rowManager.setData(t.options.data,!1,!0)},Tabulator.prototype.destroy=function(){var t=this.element;for(Tabulator.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach((function(t){t.wipe()})),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();t.firstChild;)t.removeChild(t.firstChild);t.classList.remove("tabulator")},Tabulator.prototype._detectBrowser=function(){var t=navigator.userAgent||navigator.vendor||window.opera;t.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise((function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",(function(t){var s,a=n.files[0],r=new FileReader;r.readAsText(a),r.onload=function(t){try{s=JSON.parse(r.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e.setData(s).then((function(t){o(t)})).catch((function(t){o(t)}))},r.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}})),n.click()}))},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},Tabulator.prototype._setData=function(t,e,o,i,n){return"string"!=typeof t?t?this.rowManager.setData(t,i,n):this.modExists("ajax")&&(this.modules.ajax.getUrl||this.options.ajaxURLGenerator)?"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(i,n):this.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?this.rowManager.setData(JSON.parse(t),i,n):this.modExists("ajax",!0)?(e&&this.modules.ajax.setParams(e),o&&this.modules.ajax.setConfig(o),this.modules.ajax.setUrl(t),"remote"==this.options.pagination&&this.modExists("page",!0)?(this.modules.page.reset(!0,!0),this.modules.page.setPage(1)):this.modules.ajax.loadData(i,n)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},Tabulator.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise((function(n,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach((function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then((function(){--i||n()})))})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise((function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then((function(t){var e=[];t.forEach((function(t){e.push(t.getComponent())})),n(e)})):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))}))},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise((function(s,a){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach((function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then((function(){n--,i.push(e.getComponent()),n||s(i)})):o.rowManager.addRows(t).then((function(t){n--,i.push(t[0].getComponent()),n||s(i)}))})):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))}))},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise((function(o,i){var n=e,s=0,a=0,r=[];function l(){++s==t.length&&a&&(n.rowManager.reRenderInPosition(),o())}Array.isArray(t)||(t=[t]),t.forEach((function(t){var o=e.rowManager.findRow(t,!0);o?r.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),l())})),r.sort((function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1})),r.forEach((function(t){t.delete().then((function(){a++,l()})).catch((function(t){l(),i(t)}))}))}))},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise((function(n,s){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then((function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())}))}))},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise((function(i,n){var s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then((function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())})).catch((function(t){n(t)})):s=o.rowManager.addRows(e).then((function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())})).catch((function(t){n(t)}))}))},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise((function(i,n){var s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then((function(){i(s.getComponent())})).catch((function(t){n(t)})):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))}))},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise((function(n,s){var a=i.rowManager.findRow(t);a?i.rowManager.scrollToRow(a,e,o).then((function(){n()})).catch((function(t){s(t)})):(console.warn("Scroll Error - No matching row found:",t),s("Scroll Error - No matching row found"))}))},Tabulator.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},Tabulator.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this;return new Promise((function(n,s){var a=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,a).then((function(t){n(t.getComponent())})).catch((function(t){s(t)}))}))},Tabulator.prototype.deleteColumn=function(t){var e=this;return new Promise((function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then((function(){o()})).catch((function(t){i(t)})):(console.warn("Column Delete Error - No matching column found:",t),i())}))},Tabulator.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise((function(i,n){var s=o.columnManager.findColumn(t);s?s.updateDefinition(e).then((function(t){i(t)})).catch((function(t){n(t)})):(console.warn("Column Update Error - No matching column found:",t),n())}))},Tabulator.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise((function(n,s){var a=i.columnManager.findColumn(t);a?i.columnManager.scrollToColumn(a,e,o).then((function(){n()})).catch((function(t){s(t)})):(console.warn("Scroll Error - No matching column found:",t),s("Scroll Error - No matching column found"))}))},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.refreshFilter=function(){this.modExists("filter",!0)&&this.rowManager.filterRefresh()},Tabulator.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach((function(t){e.modules.validate.clearValidation(t._getSelf())})))},Tabulator.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach((function(t){var o=t.validate();!0!==o&&(e=e.concat(o))})),!e.length||e},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise((function(t,e){e()}))},Tabulator.prototype.setPageToRow=function(t){var e=this;return new Promise((function(o,i){e.options.pagination&&e.modExists("page")&&(t=e.rowManager.findRow(t))?e.modules.page.setPageToRow(t).then((function(){o()})).catch((function(){i()})):i()}))},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then((function(){})).catch((function(){}))},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupValues=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach((function(t){e.modules.edit.clearEdited(t._getSelf())})))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.clearHistory=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.clear()},Tabulator.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},Tabulator.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){for(var t in this.modules={},Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Object.assign(Array.isArray(t)?[]:{},t);for(var o in t)null!=t[o]&&"object"===_typeof(t[o])&&(t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]));return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if((o=document.querySelectorAll(t)).length)for(var s=0;s<o.length;s++)(i=Tabulator.prototype.comms.matchElement(o[s]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&t instanceof HTMLElement||t instanceof Tabulator?(i=Tabulator.prototype.comms.matchElement(t))&&n.push(i):Array.isArray(t)?t.forEach((function(t){n=n.concat(Tabulator.prototype.comms.lookupTable(t))})):e||console.warn("Table Connection Error - Invalid Selector",t);return n},matchElement:function(t){return Tabulator.prototype.comms.tables.find((function(e){return t instanceof Tabulator?e===t:e.element===t}))}},Tabulator.prototype.findTable=function(t){var e=Tabulator.prototype.comms.lookupTable(t,!0);return!(Array.isArray(e)&&!e.length)&&e};var Layout=function(t){this.table=t,this.mode=null};Layout.prototype.initialize=function(t){this.modes[t]?this.mode=t:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+t),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},Layout.prototype.getMode=function(){return this.mode},Layout.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex),0===this.mode.indexOf("fitData")&&this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},Layout.prototype.modes={fitData:function(t){this.table.options.virtualDomHoz?this.table.vdomHoz.fitDataLayoutOverride():t.forEach((function(t){t.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(t){t.forEach((function(t){t.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(t){t.forEach((function(t){t.reinitializeWidth()})),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(t){var e=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,s=!1;t.forEach((function(t,i){t.widthFixed||t.reinitializeWidth(),(e.table.options.responsiveLayout?t.modules.responsive.visible:t.visible)&&(s=t),t.visible&&(o+=t.getWidth())})),s?(n=i-o+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){var e,o,i=this.table.element.clientWidth,n=0,s=0,a=0,r=[],l=[],u=0,c=0;function d(t){return"string"==typeof t?t.indexOf("%")>-1?i/100*parseInt(t):parseInt(t):t}function h(t,e,o,i){var n=[],s=0,r=0,l=0,u=a,c=0,p=0,m=[];function f(t){return o*(t.column.definition.widthGrow||1)}function g(t){return d(t.width)-o*(t.column.definition.widthShrink||0)}return t.forEach((function(t,s){var a=i?g(t):f(t);t.column.minWidth>=a?n.push(t):t.column.maxWidth&&t.column.maxWidth<a?(t.width=t.column.maxWidth,e-=t.column.maxWidth,(u-=i?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)&&(o=Math.floor(e/u))):(m.push(t),p+=i?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)})),n.length?(n.forEach((function(t){s+=i?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth})),c=(r=e-s)-(l=p?Math.floor(r/p):r)*p,c+=h(m,r,l,i)):(c=p?e-Math.floor(e/p)*p:e,m.forEach((function(t){t.width=i?g(t):f(t)}))),c}this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(i-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach((function(t){var e,o,i;t.visible&&(e=t.definition.width,o=parseInt(t.minWidth),e?(i=d(e),n+=i>o?i:o,t.definition.widthShrink&&(l.push({column:t,width:i>o?i:o}),u+=t.definition.widthShrink)):(r.push({column:t,width:0}),a+=t.definition.widthGrow||1))})),s=i-n,e=Math.floor(s/a);c=h(r,s,e,!1);r.length&&c>0&&(r[r.length-1].width+=+c),r.forEach((function(t){s-=t.width})),(o=Math.abs(c)+s)>0&&u&&(c=h(l,o,Math.floor(o/u),!0)),l.length&&(l[l.length-1].width-=c),r.forEach((function(t){t.column.setWidth(t.width)})),l.forEach((function(t){t.column.setWidth(t.width)}))}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={},this.langList={}};Localize.prototype.initialize=function(){this.langList=Tabulator.prototype.helpers.deepClone(this.langs)},Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langList.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langList.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langList[t]?this._setLangProp(this.langList[t],e):this.langList[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){if(!0===(t=t||"default")&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!this.langList[t]){var e=t.split("-")[0];this.langList[e]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,e),t=e):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}this.locale=t,this.lang=Tabulator.prototype.helpers.deepClone(this.langList.default||{}),"default"!=t&&function t(e,o){for(var i in e)"object"==_typeof(e[i])?(o[i]||(o[i]={}),t(e[i],o[i])):o[i]=e[i]}(this.langList[t],this.lang),this.table.options.localized.call(this.table,this.locale,this.lang),this._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langList[t]:this.lang},Localize.prototype.getText=function(t,e){var o=(t=e?t+"|"+e:t).split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this.lang;return t.forEach((function(t){var e;o&&(e=o[t],o=void 0!==e&&e)})),o},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this,e=function(e){t.bindings[e].forEach((function(o){o(t.getText(e),t.lang)}))};for(var o in t.bindings)e(o)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e=this,o=[];return Tabulator.prototype.comms.lookupTable(t).forEach((function(t){e.table!==t&&o.push(t)})),o},Comms.prototype.send=function(t,e,o,i){var n=this,s=this.getConnections(t);s.forEach((function(t){t.tableComms(n.table.element,e,o,i)})),!s.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms);var Accessor=function(t){this.table=t,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};Accessor.prototype.initializeColumn=function(t){var e=this,o=!1,i={};this.allowedTypes.forEach((function(n){var s,a="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));t.definition[a]&&(s=e.lookupAccessor(t.definition[a]))&&(o=!0,i[a]={accessor:s,params:t.definition[a+"Params"]||{}})})),o&&(t.modules.accessor=i)},Accessor.prototype.lookupAccessor=function(t){var e=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.accessors[t]?e=this.accessors[t]:console.warn("Accessor Error - No such accessor found, ignoring: ",t);break;case"function":e=t}return e},Accessor.prototype.transformRow=function(t,e){var o="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),i=t.getComponent(),n=Tabulator.prototype.helpers.deepClone(t.data||{});return this.table.columnManager.traverse((function(t){var s,a,r,l;t.modules.accessor&&(a=t.modules.accessor[o]||t.modules.accessor.accessor||!1)&&"undefined"!=(s=t.getFieldValue(n))&&(l=t.getComponent(),r="function"==typeof a.params?a.params(s,n,e,l,i):a.params,t.setFieldValue(n,a.accessor(s,n,e,r,l,i)))})),n},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor);var Ajax=function(t){this.table=t,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){var t;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?((t=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=t.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?((t=document.createElement("template")).innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=t.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-loader"),t},Ajax.prototype.createMsgElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-loader-msg"),t.setAttribute("role","alert"),t},Ajax.prototype.setParams=function(t,e){if(e)for(var o in this.params=this.params||{},t)this.params[o]=t[o];else this.params=t},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(t){if(this._loadDefaultConfig(),"string"==typeof t)this.config.method=t;else for(var e in t)this.config[e]=t[e]},Ajax.prototype._loadDefaultConfig=function(t){if(!this.config||t)for(var e in this.config={},this.defaultConfig)this.config[e]=this.defaultConfig[e]},Ajax.prototype.setUrl=function(t){this.url=t},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(t,e){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(t,e)},Ajax.prototype.nextPage=function(t){this.loading||t<(this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight)&&this.table.modules.page.nextPage().then((function(){})).catch((function(){}))},Ajax.prototype.blockActiveRequest=function(){this.requestOrder++},Ajax.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},Ajax.prototype._loadDataStandard=function(t,e){var o=this;return new Promise((function(i,n){o.sendRequest(t).then((function(s){o.table.rowManager.setData(s,t,e).then((function(){i()})).catch((function(t){n(t)}))})).catch((function(t){n(t)}))}))},Ajax.prototype.generateParamsList=function(t,e){var o=this,i=[];if(e=e||"",Array.isArray(t))t.forEach((function(t,n){i=i.concat(o.generateParamsList(t,e?e+"["+n+"]":n))}));else if("object"===(void 0===t?"undefined":_typeof(t)))for(var n in t)i=i.concat(o.generateParamsList(t[n],e?e+"["+n+"]":n));else i.push({key:e,value:t});return i},Ajax.prototype.serializeParams=function(t){var e=this.generateParamsList(t),o=[];return e.forEach((function(t){o.push(encodeURIComponent(t.key)+"="+encodeURIComponent(t.value))})),o.join("&")},Ajax.prototype.sendRequest=function(t){var e,o=this,i=this,n=i.url;return i.requestOrder++,e=i.requestOrder,i._loadDefaultConfig(),new Promise((function(s,a){!1!==i.table.options.ajaxRequesting.call(o.table,i.url,i.params)?(i.loading=!0,t||i.showLoader(),o.loaderPromise(n,i.config,i.params).then((function(t){e===i.requestOrder?(i.table.options.ajaxResponse&&(t=i.table.options.ajaxResponse.call(i.table,i.url,i.params,t)),s(t),i.hideLoader(),i.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")})).catch((function(t){console.error("Ajax Load Error: ",t),i.table.options.ajaxError.call(i.table,t),i.showError(),setTimeout((function(){i.hideLoader()}),3e3),i.loading=!1,a(t)}))):a()}))},Ajax.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},Ajax.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},Ajax.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},Ajax.prototype.defaultConfig={method:"GET"},Ajax.prototype.defaultURLGenerator=function(t,e,o){return t&&o&&Object.keys(o).length&&(e.method&&"get"!=e.method.toLowerCase()||(e.method="get",t+=(t.includes("?")?"&":"?")+this.modules.ajax.serializeParams(o))),t},Ajax.prototype.defaultLoaderPromise=function(t,e,o){var i,n=this;return new Promise((function(s,a){if(t=n.urlGenerator.call(n.table,t,e,o),"GET"!=e.method.toUpperCase())if(i="object"===_typeof(n.table.options.ajaxContentType)?n.table.options.ajaxContentType:n.contentTypeFormatters[n.table.options.ajaxContentType]){for(var r in i.headers)e.headers||(e.headers={}),void 0===e.headers[r]&&(e.headers[r]=i.headers[r]);e.body=i.body.call(n,t,e,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",n.table.options.ajaxContentType);t?(void 0===e.headers&&(e.headers={}),void 0===e.headers.Accept&&(e.headers.Accept="application/json"),void 0===e.headers["X-Requested-With"]&&(e.headers["X-Requested-With"]="XMLHttpRequest"),void 0===e.mode&&(e.mode="cors"),"cors"==e.mode?(void 0===e.headers["Access-Control-Allow-Origin"]&&(e.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===e.credentials&&(e.credentials="same-origin")):void 0===e.credentials&&(e.credentials="include"),fetch(t,e).then((function(t){t.ok?t.json().then((function(t){s(t)})).catch((function(t){a(t),console.warn("Ajax Load Error - Invalid JSON returned",t)})):(console.error("Ajax Load Error - Connection Error: "+t.status,t.statusText),a(t))})).catch((function(t){console.error("Ajax Load Error - Connection Error: ",t),a(t)}))):(console.warn("Ajax Load Error - No URL Set"),s([]))}))},Ajax.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(t,e,o){return JSON.stringify(o)}},form:{headers:{},body:function(t,e,o){var i=this.generateParamsList(o),n=new FormData;return i.forEach((function(t){n.append(t.key,t.value)})),n}}},Tabulator.prototype.registerModule("ajax",Ajax);var CalcComponent=function(t){this._row=t};CalcComponent.prototype.getData=function(t){return this._row.getData(t)},CalcComponent.prototype.getElement=function(){return this._row.getElement()},CalcComponent.prototype.getTable=function(){return this._row.table},CalcComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach((function(e){t.push(e.getComponent())})),t},CalcComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},CalcComponent.prototype._getSelf=function(){return this._row};var ColumnCalcs=function(t){this.table=t,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(t){var e=t.definition,o={topCalcParams:e.topCalcParams||{},botCalcParams:e.bottomCalcParams||{}};if(e.topCalc){switch(_typeof(e.topCalc)){case"string":this.calculations[e.topCalc]?o.topCalc=this.calculations[e.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",e.topCalc);break;case"function":o.topCalc=e.topCalc}o.topCalc&&(t.modules.columnCalcs=o,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(e.bottomCalc){switch(_typeof(e.bottomCalc)){case"string":this.calculations[e.bottomCalc]?o.botCalc=this.calculations[e.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",e.bottomCalc);break;case"function":o.botCalc=e.bottomCalc}o.botCalc&&(t.modules.columnCalcs=o,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(t){this.botInitialized&&this.botRow&&(this.botRow.getElement().style.marginLeft=-t+"px")},ColumnCalcs.prototype.recalc=function(t){var e;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),e=this.generateRow("top",this.rowsToData(t)),this.topRow=e;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(e.getElement()),e.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),e=this.generateRow("bottom",this.rowsToData(t)),this.botRow=e;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(e.getElement()),e.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},ColumnCalcs.prototype.recalcAll=function(){var t=this;(this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs&&table.modules.groupRows.getChildGroups().forEach((function(e){t.recalcGroup(e)})))},ColumnCalcs.prototype.recalcGroup=function(t){var e,o;t&&t.calcs&&(t.calcs.bottom&&(e=this.rowsToData(t.rows),o=this.generateRowData("bottom",e),t.calcs.bottom.updateData(o),t.calcs.bottom.reinitialize()),t.calcs.top&&(e=this.rowsToData(t.rows),o=this.generateRowData("top",e),t.calcs.top.updateData(o),t.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},ColumnCalcs.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},ColumnCalcs.prototype.rowsToData=function(t){var e=this,o=[];return t.forEach((function(t){if(o.push(t.getData()),e.table.options.dataTree&&e.table.options.dataTreeChildColumnCalcs&&t.modules.dataTree.open){var i=e.rowsToData(e.table.modules.dataTree.getFilteredTreeChildren(t));o=o.concat(i)}})),o},ColumnCalcs.prototype.generateRow=function(t,e){var o,i=this,n=this.generateRowData(t,e);return i.table.modExists("mutator")&&i.table.modules.mutator.disable(),o=new Row(n,this,"calc"),i.table.modExists("mutator")&&i.table.modules.mutator.enable(),o.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),o.component=!1,o.getComponent=function(){return this.component||(this.component=new CalcComponent(this)),this.component},o.generateCells=function(){var e=[];i.table.columnManager.columnsByIndex.forEach((function(n){i.genColumn.setField(n.getField()),i.genColumn.hozAlign=n.hozAlign,n.definition[t+"CalcFormatter"]&&i.table.modExists("format")?i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter(n.definition[t+"CalcFormatter"]),params:n.definition[t+"CalcFormatterParams"]||{}}:i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter("plaintext"),params:{}},i.genColumn.definition.cssClass=n.definition.cssClass;var s=new Cell(i.genColumn,o);s.getElement(),s.column=n,s.setWidth(),n.cells.push(s),e.push(s),n.visible||s.hide()})),this.cells=e},o},ColumnCalcs.prototype.generateRowData=function(t,e){var o,i,n={},s="top"==t?this.topCalcs:this.botCalcs,a="top"==t?"topCalc":"botCalc";return s.forEach((function(t){var s=[];t.modules.columnCalcs&&t.modules.columnCalcs[a]&&(e.forEach((function(e){s.push(t.getFieldValue(e))})),i=a+"Params",o="function"==typeof t.modules.columnCalcs[i]?t.modules.columnCalcs[i](s,e):t.modules.columnCalcs[i],t.setFieldValue(n,t.modules.columnCalcs[a](s,e,o)))})),n},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var t=this,e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.getGroups(!0).forEach((function(o){e[o.getKey()]=t.getGroupResults(o)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e},ColumnCalcs.prototype.getGroupResults=function(t){var e=this,o=t._getSelf(),i=t.getSubGroups(),n={};return i.forEach((function(t){n[t.getKey()]=e.getGroupResults(t)})),{top:o.calcs.top?o.calcs.top.getData():{},bottom:o.calcs.bottom?o.calcs.bottom.getData():{},groups:n}},ColumnCalcs.prototype.calculations={avg:function(t,e,o){var i=0,n=void 0!==o.precision?o.precision:2;return t.length&&(i=t.reduce((function(t,e){return Number(t)+Number(e)})),i/=t.length,i=!1!==n?i.toFixed(n):i),parseFloat(i).toString()},max:function(t,e,o){var i=null,n=void 0!==o.precision&&o.precision;return t.forEach((function(t){((t=Number(t))>i||null===i)&&(i=t)})),null!==i?!1!==n?i.toFixed(n):i:""},min:function(t,e,o){var i=null,n=void 0!==o.precision&&o.precision;return t.forEach((function(t){((t=Number(t))<i||null===i)&&(i=t)})),null!==i?!1!==n?i.toFixed(n):i:""},sum:function(t,e,o){var i=0,n=void 0!==o.precision&&o.precision;return t.length&&t.forEach((function(t){t=Number(t),i+=isNaN(t)?0:Number(t)})),!1!==n?i.toFixed(n):i},concat:function(t,e,o){var i=0;return t.length&&(i=t.reduce((function(t,e){return String(t)+String(e)}))),i},count:function(t,e,o){var i=0;return t.length&&t.forEach((function(t){t&&i++})),i}},Tabulator.prototype.registerModule("columnCalcs",ColumnCalcs);var Clipboard=function(t){this.table=t,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};Clipboard.prototype.initialize=function(){var t=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",(function(e){var o,i;if(!t.blocked){if(e.preventDefault(),t.customSelection)o=t.customSelection,t.table.options.clipboardCopyFormatter&&(o=t.table.options.clipboardCopyFormatter("plain",o));else{var n=t.table.modules.export.generateExportList(t.table.options.clipboardCopyConfig,t.table.options.clipboardCopyStyled,t.rowRange,"clipboard");o=(i=t.table.modules.export.genereateHTMLTable(n))?t.generatePlainContent(n):"",t.table.options.clipboardCopyFormatter&&(o=t.table.options.clipboardCopyFormatter("plain",o),i=t.table.options.clipboardCopyFormatter("html",i))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",o):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",o),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",o),i&&e.originalEvent.clipboardData.setData("text/html",i)),t.table.options.clipboardCopied.call(t.table,o,i),t.reset()}})),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",(function(e){t.paste(e)})),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},Clipboard.prototype.reset=function(){this.blocked=!0,this.customSelection=!1},Clipboard.prototype.generatePlainContent=function(t){var e=[];return t.forEach((function(t){var o=[];t.columns.forEach((function(e){var i="";if(e)if("group"===t.type&&(e.value=e.component.getKey()),null===e.value)i="";else switch(_typeof(e.value)){case"object":i=JSON.stringify(e.value);break;case"undefined":i="";break;default:i=e.value}o.push(i)})),e.push(o.join("\t"))})),e.join("\n")},Clipboard.prototype.copy=function(t,e){var o,i;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=t||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?((t=document.createRange()).selectNodeContents(this.table.element),(o=window.getSelection()).toString()&&e&&(this.customSelection=o.toString()),o.removeAllRanges(),o.addRange(t)):void 0!==document.selection&&void 0!==document.body.createTextRange&&((i=document.body.createTextRange()).moveToElementText(this.table.element),i.select()),document.execCommand("copy"),o&&o.removeAllRanges())},Clipboard.prototype.setPasteAction=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteAction=this.pasteActions[t],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",t);break;case"function":this.pasteAction=t}},Clipboard.prototype.setPasteParser=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteParser=this.pasteParsers[t],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",t);break;case"function":this.pasteParser=t}},Clipboard.prototype.paste=function(t){var e,o,i;this.checkPaseOrigin(t)&&(e=this.getPasteData(t),(o=this.pasteParser.call(this,e))?(t.preventDefault(),this.table.modExists("mutator")&&(o=this.mutateData(o)),i=this.pasteAction.call(this,o),this.table.options.clipboardPasted.call(this.table,e,o,i)):this.table.options.clipboardPasteError.call(this.table,e))},Clipboard.prototype.mutateData=function(t){var e=this,o=[];return Array.isArray(t)?t.forEach((function(t){o.push(e.table.modules.mutator.transformRow(t,"clipboard"))})):o=t,o},Clipboard.prototype.checkPaseOrigin=function(t){var e=!0;return("DIV"!=t.target.tagName||this.table.modules.edit.currentCell)&&(e=!1),e},Clipboard.prototype.getPasteData=function(t){var e;return window.clipboardData&&window.clipboardData.getData?e=window.clipboardData.getData("Text"):t.clipboardData&&t.clipboardData.getData?e=t.clipboardData.getData("text/plain"):t.originalEvent&&t.originalEvent.clipboardData.getData&&(e=t.originalEvent.clipboardData.getData("text/plain")),e},Clipboard.prototype.pasteParsers={table:function(t){var e=[],o=!0,i=this.table.columnManager.columns,n=[],s=[];return(t=t.split("\n")).forEach((function(t){e.push(t.split("\t"))})),!(!e.length||1===e.length&&e[0].length<2)&&(!0,e[0].forEach((function(t){var e=i.find((function(e){return t&&e.definition.title&&t.trim()&&e.definition.title.trim()===t.trim()}));e?n.push(e):o=!1})),o||(o=!0,n=[],e[0].forEach((function(t){var e=i.find((function(e){return t&&e.field&&t.trim()&&e.field.trim()===t.trim()}));e?n.push(e):o=!1})),o||(n=this.table.columnManager.columnsByIndex)),o&&e.shift(),e.forEach((function(t){var e={};t.forEach((function(t,o){n[o]&&(e[n[o].field]=t)})),s.push(e)})),s)}},Clipboard.prototype.pasteActions={replace:function(t){return this.table.setData(t)},update:function(t){return this.table.updateOrAddData(t)},insert:function(t){return this.table.addData(t)}},Tabulator.prototype.registerModule("clipboard",Clipboard);var DataTree=function(t){this.table=t,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};DataTree.prototype.initialize=function(){var t=null,e=this.table.columnManager.getFirstVisibileColumn(),o=this.table.options;switch(this.field=o.dataTreeChildField,this.indent=o.dataTreeChildIndent,this.elementField=o.dataTreeElementColumn||!!e&&e.field,o.dataTreeBranchElement&&(!0===o.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof o.dataTreeBranchElement?((t=document.createElement("div")).innerHTML=o.dataTreeBranchElement,this.branchEl=t.firstChild):this.branchEl=o.dataTreeBranchElement),o.dataTreeCollapseElement?"string"==typeof o.dataTreeCollapseElement?((t=document.createElement("div")).innerHTML=o.dataTreeCollapseElement,this.collapseEl=t.firstChild):this.collapseEl=o.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?((t=document.createElement("div")).innerHTML=o.dataTreeExpandElement,this.expandEl=t.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(t,e){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(t,e){return o.dataTreeStartExpanded[e]}}},DataTree.prototype.initializeRow=function(t){var e=t.getData()[this.field],o=Array.isArray(e),i=o||!o&&"object"===(void 0===e?"undefined":_typeof(e))&&null!==e;!i&&t.modules.dataTree&&t.modules.dataTree.branchEl&&t.modules.dataTree.branchEl.parentNode.removeChild(t.modules.dataTree.branchEl),!i&&t.modules.dataTree&&t.modules.dataTree.controlEl&&t.modules.dataTree.controlEl.parentNode.removeChild(t.modules.dataTree.controlEl),t.modules.dataTree={index:t.modules.dataTree?t.modules.dataTree.index:0,open:!!i&&(t.modules.dataTree?t.modules.dataTree.open:this.startOpen(t.getComponent(),0)),controlEl:!(!t.modules.dataTree||!i)&&t.modules.dataTree.controlEl,branchEl:!(!t.modules.dataTree||!i)&&t.modules.dataTree.branchEl,parent:!!t.modules.dataTree&&t.modules.dataTree.parent,children:i}},DataTree.prototype.layoutRow=function(t){var e=(this.elementField?t.getCell(this.elementField):t.getCells()[0]).getElement(),o=t.modules.dataTree;o.branchEl&&(o.branchEl.parentNode&&o.branchEl.parentNode.removeChild(o.branchEl),o.branchEl=!1),o.controlEl&&(o.controlEl.parentNode&&o.controlEl.parentNode.removeChild(o.controlEl),o.controlEl=!1),this.generateControlElement(t,e),t.getElement().classList.add("tabulator-tree-level-"+o.index),o.index&&(this.branchEl?(o.branchEl=this.branchEl.cloneNode(!0),e.insertBefore(o.branchEl,e.firstChild),this.table.rtl?o.branchEl.style.marginRight=(o.branchEl.offsetWidth+o.branchEl.style.marginLeft)*(o.index-1)+o.index*this.indent+"px":o.branchEl.style.marginLeft=(o.branchEl.offsetWidth+o.branchEl.style.marginRight)*(o.index-1)+o.index*this.indent+"px"):this.table.rtl?e.style.paddingRight=parseInt(window.getComputedStyle(e,null).getPropertyValue("padding-right"))+o.index*this.indent+"px":e.style.paddingLeft=parseInt(window.getComputedStyle(e,null).getPropertyValue("padding-left"))+o.index*this.indent+"px")},DataTree.prototype.generateControlElement=function(t,e){var o=this,i=t.modules.dataTree,n=(e=e||t.getCells()[0].getElement(),i.controlEl);!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",(function(e){e.stopPropagation(),o.collapseRow(t)}))):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",(function(e){e.stopPropagation(),o.expandRow(t)}))),i.controlEl.addEventListener("mousedown",(function(t){t.stopPropagation()})),n&&n.parentNode===e?n.parentNode.replaceChild(i.controlEl,n):e.insertBefore(i.controlEl,e.firstChild))},DataTree.prototype.setDisplayIndex=function(t){this.displayIndex=t},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(t){var e=this,o=[];return t.forEach((function(t,i){var n;o.push(t),t instanceof Row&&(t.create(),(n=t.modules.dataTree.children).index||!1===n.children||e.getChildren(t).forEach((function(t){t.create(),o.push(t)})))})),o},DataTree.prototype.getChildren=function(t,e){var o=this,i=t.modules.dataTree,n=[],s=[];return!1!==i.children&&(i.open||e)&&(Array.isArray(i.children)||(i.children=this.generateChildren(t)),n=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(i.children):i.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n),n.forEach((function(t){s.push(t),o.getChildren(t).forEach((function(t){s.push(t)}))}))),s},DataTree.prototype.generateChildren=function(t){var e=this,o=[],i=t.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach((function(i){var n=new Row(i||{},e.table.rowManager);n.create(),n.modules.dataTree.index=t.modules.dataTree.index+1,n.modules.dataTree.parent=t,n.modules.dataTree.children&&(n.modules.dataTree.open=e.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)})),o},DataTree.prototype.expandRow=function(t,e){var o=t.modules.dataTree;!1!==o.children&&(o.open=!0,t.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(t.getComponent(),t.modules.dataTree.index))},DataTree.prototype.collapseRow=function(t){var e=t.modules.dataTree;!1!==e.children&&(e.open=!1,t.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(t.getComponent(),t.modules.dataTree.index))},DataTree.prototype.toggleRow=function(t){var e=t.modules.dataTree;!1!==e.children&&(e.open?this.collapseRow(t):this.expandRow(t))},DataTree.prototype.getTreeParent=function(t){return!!t.modules.dataTree.parent&&t.modules.dataTree.parent.getComponent()},DataTree.prototype.getFilteredTreeChildren=function(t){var e=t.modules.dataTree,o=[];return e.children&&(Array.isArray(e.children)||(e.children=this.generateChildren(t)),(this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(e.children):e.children).forEach((function(t){t instanceof Row&&o.push(t)}))),o},DataTree.prototype.rowDelete=function(t){var e,o=t.modules.dataTree.parent;o&&(!1!==(e=this.findChildIndex(t,o))&&o.data[this.field].splice(e,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.addTreeChildRow=function(t,e,o,i){var n=!1;"string"==typeof e&&(e=JSON.parse(e)),Array.isArray(t.data[this.field])||(t.data[this.field]=[],t.modules.dataTree.open=this.startOpen(t.getComponent(),t.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,t))&&t.data[this.field].splice(o?n:n+1,0,e),!1===n&&(o?t.data[this.field].unshift(e):t.data[this.field].push(e)),this.initializeRow(t),this.layoutRow(t),this.table.rowManager.refreshActiveData("tree",!1,!0)},DataTree.prototype.findChildIndex=function(t,e){var o=this,i=!1;return"object"==(void 0===t?"undefined":_typeof(t))?t instanceof Row?i=t.data:t instanceof RowComponent?i=t._getSelf().data:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&e.modules.dataTree&&(i=e.modules.dataTree.children.find((function(e){return e instanceof Row&&e.element===t})))&&(i=i.data):i=null!=t&&e.data[this.field].find((function(e){return e.data[o.table.options.index]==t})),i&&(Array.isArray(e.data[this.field])&&(i=e.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},DataTree.prototype.getTreeChildren=function(t,e,o){var i=this,n=t.modules.dataTree,s=[];return n.children&&(Array.isArray(n.children)||(n.children=this.generateChildren(t)),n.children.forEach((function(t){t instanceof Row&&(s.push(e?t.getComponent():t),o&&(s=s.concat(i.getTreeChildren(t,e,o))))}))),s},DataTree.prototype.checkForRestyle=function(t){t.row.cells.indexOf(t)||t.row.reinitialize()},DataTree.prototype.getChildField=function(){return this.field},DataTree.prototype.redrawNeeded=function(t){return!!this.field&&void 0!==t[this.field]||!!this.elementField&&void 0!==t[this.elementField]},Tabulator.prototype.registerModule("dataTree",DataTree);var Download=function(t){this.table=t};Download.prototype.download=function(t,e,o,i,n){var s=this,a=!1;if("function"==typeof t?a=t:s.downloaders[t]?a=s.downloaders[t]:console.warn("Download Error - No such download type found: ",t),a){var r=this.generateExportList(i);a.call(this.table,r,o||{},(function(o,i){n?!0===n?s.triggerDownload(o,i,t,e,!0):n(o):s.triggerDownload(o,i,t,e)}))}},Download.prototype.generateExportList=function(t){var e=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,t||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),e.forEach((function(t){var e;"group"===t.type&&(e=t.columns[0],o&&o[t.indent]&&(e.value=o[t.indent](e.value,t.component._group.getRowCount(),t.component._group.getData(),t.component)))})),e},Download.prototype.triggerDownload=function(t,e,o,i,n){var s=document.createElement("a"),a=new Blob([t],{type:e});i=i||"Tabulator."+("function"==typeof o?"txt":o);(a=this.table.options.downloadReady.call(this.table,t,a))&&(n?window.open(window.URL.createObjectURL(a)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(a,i):(s.setAttribute("href",window.URL.createObjectURL(a)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.commsReceived=function(t,e,o){switch(e){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},Download.prototype.downloaders={csv:function(t,e,o){var i=e&&e.delimiter?e.delimiter:",",n=[],s=[];t.forEach((function(t){var e=[];switch(t.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":t.columns.forEach((function(t,e){t&&1===t.depth&&(s[e]=void 0===t.value||null===t.value?"":'"'+String(t.value).split('"').join('""')+'"')}));break;case"row":t.columns.forEach((function(t){if(t){switch(_typeof(t.value)){case"object":t.value=JSON.stringify(t.value);break;case"undefined":case"null":t.value=""}e.push('"'+String(t.value).split('"').join('""')+'"')}})),n.push(e.join(i))}})),s.length&&n.unshift(s.join(i)),n=n.join("\n"),e.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(t,e,o){var i=[];t.forEach((function(t){var e={};switch(t.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":t.columns.forEach((function(t){t&&(e[t.component.getField()]=t.value)})),i.push(e)}})),o(i=JSON.stringify(i,null,"\t"),"application/json")},pdf:function(t,e,o){var i=[],n=[],s={},a=e.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},r=e.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},l=e.jsPDF||{},u=e&&e.title?e.title:"";function c(t,e){var o=[];return t.columns.forEach((function(t){var i;if(t){switch(_typeof(t.value)){case"object":t.value=JSON.stringify(t.value);break;case"undefined":case"null":t.value=""}i={content:t.value,colSpan:t.width,rowSpan:t.height},e&&(i.styles=e),o.push(i)}else o.push("")})),o}l.orientation||(l.orientation=e.orientation||"landscape"),l.unit||(l.unit="pt"),t.forEach((function(t){switch(t.type){case"header":i.push(c(t));break;case"group":n.push(c(t,a));break;case"calc":n.push(c(t,r));break;case"row":n.push(c(t))}}));var d=new jsPDF(l);e&&e.autoTable&&(s="function"==typeof e.autoTable?e.autoTable(d)||{}:e.autoTable),u&&(s.addPageContent=function(t){d.text(u,40,30)}),s.head=i,s.body=n,d.autoTable(s),e&&e.documentProcessing&&e.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(t,e,o){var i=e.sheetName||"Sheet1",n=XLSX.utils.book_new();function s(){var e=[],o=[],i={},n={s:{c:0,r:0},e:{c:t[0]?t[0].columns.reduce((function(t,e){return t+(e&&e.width?e.width:1)}),0):0,r:t.length}};return t.forEach((function(t,i){var n=[];t.columns.forEach((function(t,e){t?(n.push(t.value instanceof Date||"object"!==_typeof(t.value)?t.value:JSON.stringify(t.value)),(t.width>1||t.height>-1)&&o.push({s:{r:i,c:e},e:{r:i+t.height-1,c:e+t.width-1}})):n.push("")})),e.push(n)})),XLSX.utils.sheet_add_aoa(i,e),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}if(n.SheetNames=[],n.Sheets={},e.sheetOnly)o(s());else{if(e.sheets)for(var a in e.sheets)!0===e.sheets[a]?(n.SheetNames.push(a),n.Sheets[a]=s()):(n.SheetNames.push(a),this.modules.comms.send(e.sheets[a],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:this.active,intercept:function(t){n.Sheets[a]=t}}));else n.SheetNames.push(i),n.Sheets[i]=s();e.documentProcessing&&(n=e.documentProcessing(n)),o(function(t){for(var e=new ArrayBuffer(t.length),o=new Uint8Array(e),i=0;i!=t.length;++i)o[i]=255&t.charCodeAt(i);return e}(XLSX.write(n,{bookType:"xlsx",bookSST:!0,type:"binary"})),"application/octet-stream")}},html:function(t,e,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(t),"text/html")}},Tabulator.prototype.registerModule("download",Download);var Edit=function(t){this.table=t,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};Edit.prototype.initializeColumn=function(t){var e={editor:!1,blocked:!1,check:t.definition.editable,params:t.definition.editorParams||{}};switch(_typeof(t.definition.editor)){case"string":"tick"===t.definition.editor&&(t.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[t.definition.editor]?e.editor=this.editors[t.definition.editor]:console.warn("Editor Error - No such editor found: ",t.definition.editor);break;case"function":e.editor=t.definition.editor;break;case"boolean":!0===t.definition.editor&&("function"!=typeof t.definition.formatter?("tick"===t.definition.formatter&&(t.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),this.editors[t.definition.formatter]?e.editor=this.editors[t.definition.formatter]:e.editor=this.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",t.definition.formatter))}e.editor&&(t.modules.edit=e)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(t){var e,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,e=o.getElement(),t?o.validate():e.classList.remove("tabulator-validation-fail"),e.classList.remove("tabulator-editing");e.firstChild;)e.removeChild(e.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var t=this.currentCell,e=this.currentCell.getComponent();this.clearEditor(!0),t.setValueActual(t.getValue()),t.cellRendered(),("textarea"==t.column.definition.editor||t.column.definition.variableHeight)&&t.row.normalizeHeight(!0),t.column.cellEvents.cellEditCancelled&&t.column.cellEvents.cellEditCancelled.call(this.table,e),this.table.options.cellEditCancelled.call(this.table,e)}},Edit.prototype.bindEditor=function(t){var e=this,o=t.getElement(!0);o.setAttribute("tabindex",0),o.addEventListener("click",(function(t){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})})),o.addEventListener("mousedown",(function(t){2===t.button?t.preventDefault():e.mouseClick=!0})),o.addEventListener("focus",(function(o){e.recursionBlock||e.edit(t,o,!1)}))},Edit.prototype.focusCellNoEvent=function(t,e){this.recursionBlock=!0,e&&"ie"===this.table.browser||t.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},Edit.prototype.editCell=function(t,e){this.focusCellNoEvent(t),this.edit(t,!1,e)},Edit.prototype.focusScrollAdjust=function(t){if("virtual"==this.table.rowManager.getRenderMode()){var e=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=t.row.getElement();i.offsetTop;i.offsetTop<e?this.table.rowManager.element.scrollTop-=e-i.offsetTop:i.offsetTop+i.offsetHeight>o&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o);var n=this.table.rowManager.element.scrollLeft,s=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,a=t.getElement();a.offsetLeft;this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin),s-=parseInt(this.table.modules.frozenColumns.rightMargin)),this.table.options.virtualDomHoz&&(n-=parseInt(this.table.vdomHoz.vDomPadLeft),s-=parseInt(this.table.vdomHoz.vDomPadLeft)),a.offsetLeft<n?this.table.rowManager.element.scrollLeft-=n-a.offsetLeft:a.offsetLeft+a.offsetWidth>s&&(this.table.rowManager.element.scrollLeft+=a.offsetLeft+a.offsetWidth-s)}},Edit.prototype.edit=function(t,e,o){var i,n,s,a=this,r=!0,l=function(){},u=t.getElement();if(!this.currentCell){if(t.column.modules.edit.blocked)return this.mouseClick=!1,u.blur(),!1;switch(e&&e.stopPropagation(),_typeof(t.column.modules.edit.check)){case"function":r=t.column.modules.edit.check(t.getComponent());break;case"boolean":r=t.column.modules.edit.check}if(r||o){if(a.cancelEdit(),a.currentCell=t,this.focusScrollAdjust(t),n=t.getComponent(),this.mouseClick&&(this.mouseClick=!1,t.column.cellEvents.cellClick&&t.column.cellEvents.cellClick.call(this.table,e,n)),t.column.cellEvents.cellEditing&&t.column.cellEvents.cellEditing.call(this.table,n),a.table.options.cellEditing.call(this.table,n),s="function"==typeof t.column.modules.edit.params?t.column.modules.edit.params(n):t.column.modules.edit.params,!1===(i=t.column.modules.edit.editor.call(a,n,(function(t){l=t}),(function(e){if(a.currentCell===t){var o=!0;return t.column.modules.validate&&a.table.modExists("validate")&&"manual"!=a.table.options.validationMode&&(o=a.table.modules.validate.validate(t.column.modules.validate,t,e)),!0===o||"highlight"===a.table.options.validationMode?(a.clearEditor(),t.modules.edit||(t.modules.edit={}),t.modules.edit.edited=!0,-1==a.editedCells.indexOf(t)&&a.editedCells.push(t),t.setValue(e,!0),a.table.options.dataTree&&a.table.modExists("dataTree")&&a.table.modules.dataTree.checkForRestyle(t),!0===o||(u.classList.add("tabulator-validation-fail"),a.table.options.validationFailed.call(a.table,t.getComponent(),e,o),!1)):(a.invalidEdit=!0,u.classList.add("tabulator-validation-fail"),a.focusCellNoEvent(t,!0),l(),a.table.options.validationFailed.call(a.table,t.getComponent(),e,o),!1)}}),(function(){a.currentCell===t&&(a.cancelEdit(),a.table.options.dataTree&&a.table.modExists("dataTree")&&a.table.modules.dataTree.checkForRestyle(t))}),s)))return u.blur(),!1;if(!(i instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",i),u.blur(),!1;for(u.classList.add("tabulator-editing"),t.row.getElement().classList.add("tabulator-row-editing");u.firstChild;)u.removeChild(u.firstChild);u.appendChild(i),l();for(var c=u.children,d=0;d<c.length;d++)c[d].addEventListener("click",(function(t){t.stopPropagation()}));return!0}return this.mouseClick=!1,u.blur(),!1}this.invalidEdit||this.cancelEdit()},Edit.prototype.maskInput=function(t,e){var o=e.mask,i=void 0!==e.maskLetterChar?e.maskLetterChar:"A",n=void 0!==e.maskNumberChar?e.maskNumberChar:"9",s=void 0!==e.maskWildcardChar?e.maskWildcardChar:"*";function a(e){var r=o[e];void 0!==r&&r!==s&&r!==i&&r!==n&&(t.value=t.value+""+r,a(e+1))}t.addEventListener("keydown",(function(e){var a=t.value.length,r=e.key;if(e.keyCode>46){if(a>=o.length)return e.preventDefault(),e.stopPropagation(),!1,!1;switch(o[a]){case i:if(r.toUpperCase()==r.toLowerCase())return e.preventDefault(),e.stopPropagation(),!1,!1;break;case n:if(isNaN(r))return e.preventDefault(),e.stopPropagation(),!1,!1;break;case s:break;default:if(r!==o[a])return e.preventDefault(),e.stopPropagation(),!1,!1}!0}})),t.addEventListener("keyup",(function(o){o.keyCode>46&&e.maskAutoFill&&a(t.value.length)})),t.placeholder||(t.placeholder=o),e.maskAutoFill&&a(t.value.length)},Edit.prototype.getEditedCells=function(){var t=[];return this.editedCells.forEach((function(e){t.push(e.getComponent())})),t},Edit.prototype.clearEdited=function(t){var e;t.modules.edit&&t.modules.edit.edited&&(t.modules.edit.edited=!1,t.modules.validate&&(t.modules.validate.invalid=!1)),(e=this.editedCells.indexOf(t))>-1&&this.editedCells.splice(e,1)},Edit.prototype.editors={input:function(t,e,o,i,n){var s=t.getValue(),a=document.createElement("input");if(a.setAttribute("type",n.search?"search":"text"),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var r in n.elementAttributes)"+"==r.charAt(0)?(r=r.slice(1),a.setAttribute(r,a.getAttribute(r)+n.elementAttributes["+"+r])):a.setAttribute(r,n.elementAttributes[r]);function l(t){null==s&&""!==a.value||a.value!==s?o(a.value)&&(s=a.value):i()}return a.value=void 0!==s?s:"",e((function(){a.focus({preventScroll:!0}),a.style.height="100%"})),a.addEventListener("change",l),a.addEventListener("blur",l),a.addEventListener("keydown",(function(t){switch(t.keyCode){case 13:l();break;case 27:i();break;case 35:case 36:t.stopPropagation()}})),n.mask&&this.table.modules.edit.maskInput(a,n),a},textarea:function(t,e,o,i,n){var s=t.getValue(),a=n.verticalNavigation||"hybrid",r=String(null!=s?s:""),l=((r.match(/(?:\r\n|\r|\n)/g)||[]).length,document.createElement("textarea")),u=0;if(l.style.display="block",l.style.padding="2px",l.style.height="100%",l.style.width="100%",l.style.boxSizing="border-box",l.style.whiteSpace="pre-wrap",l.style.resize="none",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);function d(e){null==s&&""!==l.value||l.value!==s?(o(l.value)&&(s=l.value),setTimeout((function(){t.getRow().normalizeHeight()}),300)):i()}return l.value=r,e((function(){l.focus({preventScroll:!0}),l.style.height="100%",l.scrollHeight,l.style.height=l.scrollHeight+"px",t.getRow().normalizeHeight()})),l.addEventListener("change",d),l.addEventListener("blur",d),l.addEventListener("keyup",(function(){l.style.height="";var e=l.scrollHeight;l.style.height=e+"px",e!=u&&(u=e,t.getRow().normalizeHeight())})),l.addEventListener("keydown",(function(t){switch(t.keyCode){case 27:i();break;case 38:("editor"==a||"hybrid"==a&&l.selectionStart)&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 40:("editor"==a||"hybrid"==a&&l.selectionStart!==l.value.length)&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 35:case 36:t.stopPropagation()}})),n.mask&&this.table.modules.edit.maskInput(l,n),l},number:function(t,e,o,i,n){var s=t.getValue(),a=n.verticalNavigation||"editor",r=document.createElement("input");if(r.setAttribute("type","number"),void 0!==n.max&&r.setAttribute("max",n.max),void 0!==n.min&&r.setAttribute("min",n.min),void 0!==n.step&&r.setAttribute("step",n.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),r.setAttribute(l,r.getAttribute(l)+n.elementAttributes["+"+l])):r.setAttribute(l,n.elementAttributes[l]);r.value=s;var u=function(t){c()};function c(){var t=r.value;isNaN(t)||""===t||(t=Number(t)),t!==s?o(t)&&(s=t):i()}return e((function(){r.removeEventListener("blur",u),r.focus({preventScroll:!0}),r.style.height="100%",r.addEventListener("blur",u)})),r.addEventListener("keydown",(function(t){switch(t.keyCode){case 13:c();break;case 27:i();break;case 38:case 40:"editor"==a&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 35:case 36:t.stopPropagation()}})),n.mask&&this.table.modules.edit.maskInput(r,n),r},range:function(t,e,o,i,n){var s=t.getValue(),a=document.createElement("input");if(a.setAttribute("type","range"),void 0!==n.max&&a.setAttribute("max",n.max),void 0!==n.min&&a.setAttribute("min",n.min),void 0!==n.step&&a.setAttribute("step",n.step),a.style.padding="4px",a.style.width="100%",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var r in n.elementAttributes)"+"==r.charAt(0)?(r=r.slice(1),a.setAttribute(r,a.getAttribute(r)+n.elementAttributes["+"+r])):a.setAttribute(r,n.elementAttributes[r]);function l(){var t=a.value;isNaN(t)||""===t||(t=Number(t)),t!=s?o(t)&&(s=t):i()}return a.value=s,e((function(){a.focus({preventScroll:!0}),a.style.height="100%"})),a.addEventListener("blur",(function(t){l()})),a.addEventListener("keydown",(function(t){switch(t.keyCode){case 13:l();break;case 27:i()}})),a},select:function(t,e,o,i,n){var s=this,a=this,r=t.getElement(),l=t.getValue(),u=n.verticalNavigation||"editor",c=void 0!==l||null===l?Array.isArray(l)?l:[l]:void 0!==n.defaultValue?n.defaultValue:[],d=document.createElement("input"),h=document.createElement("div"),p=n.multiselect,m=[],f={},g=[],b=[],v=!0,w=!1,y="",C=null;function E(e){var o,i={},n=a.table.getData();return(o=e?a.table.columnManager.getColumnByField(e):t.getColumn()._getSelf())?n.forEach((function(t){var e=o.getFieldValue(t);null!=e&&""!==e&&(i[e]=!0)})):console.warn("unable to find matching column to create select lookup list:",e),Object.keys(i)}function R(e,o){var i=[],s=[];function a(t){t={label:t.label,value:t.value,itemParams:t.itemParams,elementAttributes:t.elementAttributes,element:!1};return o.indexOf(t.value)>-1&&M(t),i.push(t),s.push(t),t}if("function"==typeof e&&(e=e(t)),Array.isArray(e))e.forEach((function(t){var e;"object"===(void 0===t?"undefined":_typeof(t))?t.options?(e={label:t.label,group:!0,itemParams:t.itemParams,elementAttributes:t.elementAttributes,element:!1},s.push(e),t.options.forEach((function(t){a(t)}))):a(t):(e={label:t,value:t,element:!1},o.indexOf(e.value)>-1&&M(e),i.push(e),s.push(e))}));else for(var r in e){var l={label:e[r],value:r,element:!1};o.indexOf(l.value)>-1&&M(l),i.push(l),s.push(l)}n.sortValuesList&&(i.sort((function(t,e){return t.label<e.label?-1:t.label>e.label?1:0})),s.sort((function(t,e){return t.label<e.label?-1:t.label>e.label?1:0})),"asc"!==n.sortValuesList&&(i.reverse(),s.reverse())),m=i,g=s,function(){for(;h.firstChild;)h.removeChild(h.firstChild);g.forEach((function(e){var o=e.element;if(!o){if(o=document.createElement("div"),e.label=n.listItemFormatter?n.listItemFormatter(e.value,e.label,t,o,e.itemParams):e.label,e.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===e.label?"&nbsp;":e.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===e.label?"&nbsp;":e.label,o.addEventListener("click",(function(){w=!0,setTimeout((function(){w=!1}),10),p?(L(e),d.focus()):D(e)})),b.indexOf(e)>-1&&o.classList.add("active")),e.elementAttributes&&"object"==_typeof(e.elementAttributes))for(var i in e.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,d.getAttribute(i)+e.elementAttributes["+"+i])):o.setAttribute(i,e.elementAttributes[i]);o.addEventListener("mousedown",(function(){v=!1,setTimeout((function(){v=!0}),10)})),e.element=o}h.appendChild(o)}))}()}function x(t,e){!p&&f&&f.element&&f.element.classList.remove("active"),f&&f.element&&f.element.classList.remove("focused"),f=t,t.element&&(t.element.classList.add("focused"),e&&t.element.classList.add("active")),t&&t.element&&t.element.scrollIntoView&&t.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function M(t){-1==b.indexOf(t)&&(b.push(t),x(t,!0)),k()}function T(t){var e=b[t];t>-1&&(b.splice(t,1),e.element&&e.element.classList.remove("active"))}function L(t){t||(t=f);var e=b.indexOf(t);e>-1?T(e):(!0!==p&&b.length>=p&&T(0),M(t)),k()}function D(t){H(),t||(t=f),t&&(d.value=t.label,o(t.value)),c=[t.value]}function z(t){t||H();var e=[];b.forEach((function(t){e.push(t.value)})),c=e,o(e)}function k(){var t=[];b.forEach((function(e){t.push(e.label)})),d.value=t.join(", "),!1===a.currentCell&&z(!0)}function S(){H(),i()}function H(){h.parentNode&&h.parentNode.removeChild(h),a.table.rowManager.element.removeEventListener("scroll",S)}if((Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),d.setAttribute("type","text"),d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",d.style.cursor="default",d.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var P in n.elementAttributes)"+"==P.charAt(0)?(P=P.slice(1),d.setAttribute(P,d.getAttribute(P)+n.elementAttributes["+"+P])):d.setAttribute(P,n.elementAttributes[P]);return d.value=void 0!==l||null===l?l:"",d.addEventListener("search",(function(t){d.value||(!function(){for(var t=b.length,e=0;e<t;e++)T(0)}(),z())})),d.addEventListener("keydown",(function(t){var e;switch(t.keyCode){case 38:e=m.indexOf(f),("editor"==u||"hybrid"==u&&e)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e>0&&x(m[e-1],!p));break;case 40:e=m.indexOf(f),("editor"==u||"hybrid"==u&&e<m.length-1)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e<m.length-1&&x(-1==e?m[0]:m[e+1],!p));break;case 37:case 39:t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault();break;case 13:p?L():D();break;case 27:S();break;case 9:break;default:!1===a.currentCell&&t.preventDefault(),t.keyCode>=38&&t.keyCode<=90&&function(t){clearTimeout(C);var e=String.fromCharCode(event.keyCode).toLowerCase();y+=e.toLowerCase();var o=m.find((function(t){return void 0!==t.label&&t.label.toLowerCase().startsWith(y)}));o&&x(o,!p),C=setTimeout((function(){y=""}),800)}(t.keyCode)}})),d.addEventListener("blur",(function(t){v&&(p?z():S())})),d.addEventListener("focus",(function(t){w||function(){if(b=[],!h.parentNode){!0===n.values?R(E(),c):"string"==typeof n.values?R(E(n.values),c):R(n.values||[],c);var t=Tabulator.prototype.helpers.elOffset(r);h.style.minWidth=r.offsetWidth+"px",h.style.top=t.top+r.offsetHeight+"px",h.style.left=t.left+"px",h.addEventListener("mousedown",(function(t){v=!1,setTimeout((function(){v=!0}),10)})),document.body.appendChild(h)}}()})),(h=document.createElement("div")).classList.add("tabulator-edit-select-list"),e((function(){d.style.height="100%",d.focus({preventScroll:!0})})),setTimeout((function(){s.table.rowManager.element.addEventListener("scroll",S)}),10),d},autocomplete:function(t,e,o,i,n){var s=this,a=this,r=t.getElement(),l=t.getValue(),u=n.verticalNavigation||"editor",c=void 0!==l||null===l?l:void 0!==n.defaultValue?n.defaultValue:"",d=document.createElement("input"),h=document.createElement("div"),p=[],m=!1,f=!0,g=!1;if(d.setAttribute("type","search"),d.style.padding="4px",d.style.width="100%",d.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var b in n.elementAttributes)"+"==b.charAt(0)?(b=b.slice(1),d.setAttribute(b,d.getAttribute(b)+n.elementAttributes["+"+b])):d.setAttribute(b,n.elementAttributes[b]);function v(){!0===n.values?g=w():"string"==typeof n.values&&(g=w(n.values))}function w(e){var o,i={},s=a.table.getData();return(o=e?a.table.columnManager.getColumnByField(e):t.getColumn()._getSelf())?(s.forEach((function(t){var e=o.getFieldValue(t);null!=e&&""!==e&&(i[e]=!0)})),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create autocomplete lookup list:",e),i}function y(t,e){var o,i,s=[];o=g||(n.values||[]),n.searchFunc?(s=n.searchFunc(t,o))instanceof Promise?(C(void 0!==n.searchingPlaceholder?n.searchingPlaceholder:"Searching..."),s.then((function(t){x(E(t),e)})).catch((function(t){console.err("error in autocomplete search promise:",t)}))):x(E(s),e):(i=E(o),""===t?n.showListOnEmpty&&(s=i):i.forEach((function(e){null===e.value&&void 0===e.value||(String(e.value).toLowerCase().indexOf(String(t).toLowerCase())>-1||String(e.title).toLowerCase().indexOf(String(t).toLowerCase())>-1)&&s.push(e)})),x(s,e))}function C(t){var e=document.createElement("div");R(),!1!==t&&(e.classList.add("tabulator-edit-select-list-notice"),e.tabIndex=0,t instanceof Node?e.appendChild(t):e.innerHTML=t,h.appendChild(e))}function E(t){var e=[];if(Array.isArray(t))t.forEach((function(t){var o={};"object"===(void 0===t?"undefined":_typeof(t))?(o.title=n.listItemFormatter?n.listItemFormatter(t.value,t.label):t.label,o.value=t.value):(o.title=n.listItemFormatter?n.listItemFormatter(t,t):t,o.value=t),e.push(o)}));else for(var o in t){var i={title:n.listItemFormatter?n.listItemFormatter(o,t[o]):t[o],value:o};e.push(i)}return e}function R(){for(;h.firstChild;)h.removeChild(h.firstChild)}function x(t,e){t.length?function(t,e){var o=!1;R(),(p=t).forEach((function(t){var i=t.element;i||((i=document.createElement("div")).classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=t.title,i.addEventListener("click",(function(e){T(t),M()})),i.addEventListener("mousedown",(function(t){f=!1,setTimeout((function(){f=!0}),10)})),t.element=i,e&&t.value==l&&(d.value=t.title,t.element.classList.add("active"),o=!0),t===m&&(t.element.classList.add("active"),o=!0)),h.appendChild(i)})),o||T(!1)}(t,e):n.emptyPlaceholder&&C(n.emptyPlaceholder)}function M(){L(),m?l!==m.value?(l=m.value,d.value=m.title,o(m.value)):i():n.freetext||n.allowEmpty&&""===d.value?(l=d.value,o(d.value)):i()}function T(t,e){m&&m.element&&m.element.classList.remove("active"),m=t,t&&t.element&&t.element.classList.add("active"),t&&t.element&&t.element.scrollIntoView&&t.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function L(){h.parentNode&&h.parentNode.removeChild(h),a.table.rowManager.element.removeEventListener("scroll",D)}function D(){L(),i()}return h.classList.add("tabulator-edit-select-list"),h.addEventListener("mousedown",(function(t){f=!1,setTimeout((function(){f=!0}),10)})),d.addEventListener("keydown",(function(t){var e;switch(t.keyCode){case 38:e=p.indexOf(m),("editor"==u||"hybrid"==u&&e)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),T(e>0&&p[e-1]));break;case 40:e=p.indexOf(m),("editor"==u||"hybrid"==u&&e<p.length-1)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e<p.length-1&&T(-1==e?p[0]:p[e+1]));break;case 37:case 39:t.stopImmediatePropagation(),t.stopPropagation();break;case 13:M();break;case 27:D();break;case 36:case 35:t.stopImmediatePropagation()}})),d.addEventListener("keyup",(function(t){switch(t.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:y(d.value)}})),d.addEventListener("search",(function(t){y(d.value)})),d.addEventListener("blur",(function(t){f&&M()})),d.addEventListener("focus",(function(t){var e=c;v(),function(){if(!h.parentNode){for(console.log("show",c);h.firstChild;)h.removeChild(h.firstChild);var t=Tabulator.prototype.helpers.elOffset(r);h.style.minWidth=r.offsetWidth+"px",h.style.top=t.top+r.offsetHeight+"px",h.style.left=t.left+"px",document.body.appendChild(h)}}(),d.value=e,y(e,!0)})),e((function(){d.style.height="100%",d.focus({preventScroll:!0})})),n.mask&&this.table.modules.edit.maskInput(d,n),setTimeout((function(){s.table.rowManager.element.addEventListener("scroll",D)}),10),v(),d.value=c,y(c,!0),d},star:function(t,e,o,i,n){var s=this,a=t.getElement(),r=t.getValue(),l=a.getElementsByTagName("svg").length||5,u=a.getElementsByTagName("svg")[0]?a.getElementsByTagName("svg")[0].getAttribute("width"):14,c=[],d=document.createElement("div"),h=document.createElementNS("http://www.w3.org/2000/svg","svg");function p(t){c.forEach((function(e,o){o<t?("ie"==s.table.browser?e.setAttribute("class","tabulator-star-active"):e.classList.replace("tabulator-star-inactive","tabulator-star-active"),e.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==s.table.browser?e.setAttribute("class","tabulator-star-inactive"):e.classList.replace("tabulator-star-active","tabulator-star-inactive"),e.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')}))}function m(t){var e=document.createElement("span"),i=h.cloneNode(!0);c.push(i),e.addEventListener("mouseenter",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),p(t)})),e.addEventListener("mousemove",(function(t){t.stopPropagation(),t.stopImmediatePropagation()})),e.addEventListener("click",(function(e){e.stopPropagation(),e.stopImmediatePropagation(),o(t),a.blur()})),e.appendChild(i),d.appendChild(e)}function f(t){r=t,p(t)}if(a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",d.style.verticalAlign="middle",d.style.display="inline-block",d.style.padding="4px",h.setAttribute("width",u),h.setAttribute("height",u),h.setAttribute("viewBox","0 0 512 512"),h.setAttribute("xml:space","preserve"),h.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var g in n.elementAttributes)"+"==g.charAt(0)?(g=g.slice(1),d.setAttribute(g,d.getAttribute(g)+n.elementAttributes["+"+g])):d.setAttribute(g,n.elementAttributes[g]);for(var b=1;b<=l;b++)m(b);return p(r=Math.min(parseInt(r),l)),d.addEventListener("mousemove",(function(t){p(0)})),d.addEventListener("click",(function(t){o(0)})),a.addEventListener("blur",(function(t){i()})),a.addEventListener("keydown",(function(t){switch(t.keyCode){case 39:f(r+1);break;case 37:f(r-1);break;case 13:o(r);break;case 27:i()}})),d},progress:function(t,e,o,i,n){var s,a,r=t.getElement(),l=void 0===n.max?r.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?r.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,c=(l-u)/100,d=t.getValue()||0,h=document.createElement("div"),p=document.createElement("div");function m(){var t=window.getComputedStyle(r,null),e=c*Math.round(p.offsetWidth/((r.clientWidth-parseInt(t.getPropertyValue("padding-left"))-parseInt(t.getPropertyValue("padding-right")))/100))+u;o(e),r.setAttribute("aria-valuenow",e),r.setAttribute("aria-label",d)}if(h.style.position="absolute",h.style.right="0",h.style.top="0",h.style.bottom="0",h.style.width="5px",h.classList.add("tabulator-progress-handle"),p.style.display="inline-block",p.style.position="relative",p.style.height="100%",p.style.backgroundColor="#488CE9",p.style.maxWidth="100%",p.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);return r.style.padding="4px 4px",d=Math.min(parseFloat(d),l),d=Math.max(parseFloat(d),u),d=Math.round((d-u)/c),p.style.width=d+"%",r.setAttribute("aria-valuemin",u),r.setAttribute("aria-valuemax",l),p.appendChild(h),h.addEventListener("mousedown",(function(t){s=t.screenX,a=p.offsetWidth})),h.addEventListener("mouseover",(function(){h.style.cursor="ew-resize"})),r.addEventListener("mousemove",(function(t){s&&(p.style.width=a+t.screenX-s+"px")})),r.addEventListener("mouseup",(function(t){s&&(t.stopPropagation(),t.stopImmediatePropagation(),s=!1,a=!1,m())})),r.addEventListener("keydown",(function(t){switch(t.keyCode){case 39:t.preventDefault(),p.style.width=p.clientWidth+r.clientWidth/100+"px";break;case 37:t.preventDefault(),p.style.width=p.clientWidth-r.clientWidth/100+"px";break;case 9:case 13:m();break;case 27:i()}})),r.addEventListener("blur",(function(){i()})),p},tickCross:function(t,e,o,i,n){var s=t.getValue(),a=document.createElement("input"),r=n.tristate,l=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(a.setAttribute("type","checkbox"),a.style.marginTop="5px",a.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),a.setAttribute(c,a.getAttribute(c)+n.elementAttributes["+"+c])):a.setAttribute(c,n.elementAttributes[c]);function d(t){return r?t?u?l:a.checked:a.checked&&!u?(a.checked=!1,a.indeterminate=!0,u=!0,l):(u=!1,a.checked):a.checked}return a.value=s,!r||void 0!==s&&s!==l&&""!==s||(u=!0,a.indeterminate=!0),"firefox"!=this.table.browser&&e((function(){a.focus({preventScroll:!0})})),a.checked=!0===s||"true"===s||"True"===s||1===s,e((function(){a.focus()})),a.addEventListener("change",(function(t){o(d())})),a.addEventListener("blur",(function(t){o(d(!0))})),a.addEventListener("keydown",(function(t){13==t.keyCode&&o(d()),27==t.keyCode&&i()})),a}},Tabulator.prototype.registerModule("edit",Edit);var ExportRow=function(t,e,o,i){this.type=t,this.columns=e,this.component=o||!1,this.indent=i||0},ExportColumn=function(t,e,o,i,n){this.value=t,this.component=e||!1,this.width=o,this.height=i,this.depth=n},Export=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};Export.prototype.generateExportList=function(t,e,o,i){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},Export.prototype.genereateTable=function(t,e,o,i){var n=this.generateExportList(t,e,o,i);return this.genereateTableElement(n)},Export.prototype.rowLookup=function(t){var e=this,o=[];if("function"==typeof t)t.call(this.table).forEach((function(t){(t=e.table.rowManager.findRow(t))&&o.push(t)}));else switch(t){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],o)},Export.prototype.generateColumnGroupHeaders=function(){var t=this,e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach((function(o){var i=t.processColumnGroup(o);i&&e.push(i)})),e},Export.prototype.processColumnGroup=function(t){var e=this,o=t.columns,i=0,n={title:t.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||t.definition.title,column:t,depth:1};if(o.length){if(n.subGroups=[],n.width=0,o.forEach((function(t){var o=e.processColumnGroup(t);o&&(n.width+=o.width,n.subGroups.push(o),o.depth>i&&(i=o.depth))})),n.depth+=i,!n.width)return!1}else{if(!this.columnVisCheck(t))return!1;n.width=1}return n},Export.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},Export.prototype.headersToExportRows=function(t){var e=[],o=0,i=[];return t.forEach((function(t){t.depth>o&&(o=t.depth)})),t.forEach((function(t){!function t(i,n){var s=o-n;if(void 0===e[n]&&(e[n]=[]),i.height=i.subGroups?1:s-i.depth+1,e[n].push(i),i.height>1)for(var a=1;a<i.height;a++)void 0===e[n+a]&&(e[n+a]=[]),e[n+a].push(!1);if(i.width>1)for(var r=1;r<i.width;r++)e[n].push(!1);i.subGroups&&i.subGroups.forEach((function(e){t(e,n+1)}))}(t,0)})),e.forEach((function(t){var e=[];t.forEach((function(t){t?e.push(new ExportColumn(t.title,t.column.getComponent(),t.width,t.height,t.depth)):e.push(null)})),i.push(new ExportRow("header",e))})),i},Export.prototype.bodyToExportRows=function(t){var e=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach((function(t){e.columnVisCheck(t)&&o.push(t.getComponent())})),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&t.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&t.push(this.table.modules.columnCalcs.botRow)),(t=t.filter((function(t){switch(t.type){case"group":return!1!==e.config.rowGroups;case"calc":return!1!==e.config.columnCalcs;case"row":return!(e.table.options.dataTree&&!1===e.config.dataTree&&t.modules.dataTree.parent)}return!0}))).forEach((function(t,n){var s=t.getData(e.colVisProp),a=[],r=0;switch(t.type){case"group":r=t.level,a.push(new ExportColumn(t.key,t.getComponent(),o.length,1));break;case"calc":case"row":o.forEach((function(t){a.push(new ExportColumn(t._column.getFieldValue(s),t,1,1))})),e.table.options.dataTree&&!1!==e.config.dataTree&&(r=t.modules.dataTree.index)}i.push(new ExportRow(t.type,a,t.getComponent(),r))})),i},Export.prototype.genereateTableElement=function(t){var e=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r={};return r.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(r.treeElementField=this.table.modules.dataTree.elementField),r.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r.groupHeader&&!Array.isArray(r.groupHeader)&&(r.groupHeader=[r.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),t.forEach((function(t,o){switch(t.type){case"header":i.appendChild(e.genereateHeaderElement(t,r,s));break;case"group":n.appendChild(e.genereateGroupElement(t,r,s));break;case"calc":n.appendChild(e.genereateCalcElement(t,r,s));break;case"row":var a=e.genereateRowElement(t,r,s);e.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(a)}})),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},Export.prototype.lookupTableStyles=function(){var t={};return this.cloneTableStyle&&window.getComputedStyle&&(t.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),t.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),t.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),t.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),t.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],t.firstRow&&(t.styleCells=t.firstRow.getElementsByClassName("tabulator-cell"),t.firstCell=t.styleCells[0],t.lastCell=t.styleCells[t.styleCells.length-1])),t},Export.prototype.genereateHeaderElement=function(t,e,o){var i=this,n=document.createElement("tr");return t.columns.forEach((function(t){if(t){var e=document.createElement("th"),o=t.component._column.definition.cssClass?t.component._column.definition.cssClass.split(" "):[];e.colSpan=t.width,e.rowSpan=t.height,e.innerHTML=t.value,i.cloneTableStyle&&(e.style.boxSizing="border-box"),o.forEach((function(t){e.classList.add(t)})),i.mapElementStyles(t.component.getElement(),e,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(t.component._column.contentElement,e,["padding-top","padding-left","padding-right","padding-bottom"]),t.component._column.visible?i.mapElementStyles(t.component.getElement(),e,["width"]):t.component._column.definition.width&&(e.style.width=t.component._column.definition.width+"px"),t.component._column.parent&&i.mapElementStyles(t.component._column.parent.groupElement,e,["border-top"]),n.appendChild(e)}})),n},Export.prototype.genereateGroupElement=function(t,e,o){var i=document.createElement("tr"),n=document.createElement("td"),s=t.columns[0];return i.classList.add("tabulator-print-table-row"),e.groupHeader&&e.groupHeader[t.indent]?s.value=e.groupHeader[t.indent](s.value,t.component._group.getRowCount(),t.component._group.getData(),t.component):!1===e.groupHeader?s.value=s.value:s.value=t.component._group.generator(s.value,t.component._group.getRowCount(),t.component._group.getData(),t.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+t.indent),s.component.isVisible()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},Export.prototype.genereateCalcElement=function(t,e,o){var i=this.genereateRowElement(t,e,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},Export.prototype.genereateRowElement=function(t,e,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),t.columns.forEach((function(a){if(a){var r=document.createElement("td"),l=a.component._column,u=a.value,c={modules:{},getValue:function(){return u},getField:function(){return l.definition.field},getElement:function(){return r},getColumn:function(){return l.getComponent()},getData:function(){return t.component.getData()},getRow:function(){return t.component},getComponent:function(){return c},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach((function(t){r.classList.add(t)})),n.table.modExists("format")&&!1!==n.config.formatCells)u=n.table.modules.format.formatExportValue(c,n.colVisProp);else switch(void 0===u?"undefined":_typeof(u)){case"object":u=JSON.stringify(u);break;case"undefined":case"null":u="";break;default:u=u}u instanceof Node?r.appendChild(u):r.innerHTML=u,o.firstCell&&(n.mapElementStyles(o.firstCell,r,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(r.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(e.treeElementField&&e.treeElementField==l.field||!e.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&r.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),r.firstChild),t.component._row.modules.dataTree.branchEl&&r.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),r.firstChild)),s.appendChild(r),c.modules.format&&c.modules.format.renderedCallback&&c.modules.format.renderedCallback(),e.rowFormatter&&!1!==n.config.formatCells&&e.rowFormatter(t.component)}})),s},Export.prototype.genereateHTMLTable=function(t){var e=document.createElement("div");return e.appendChild(this.genereateTableElement(t)),e.innerHTML},Export.prototype.getHtml=function(t,e,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,e,t,i||"htmlOutput");return this.genereateHTMLTable(n)},Export.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(t);o.forEach((function(t){e.style[i[t]]=n.getPropertyValue(t)}))}}},Tabulator.prototype.registerModule("export",Export);var Filter=function(t){this.table=t,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};Filter.prototype.initializeColumn=function(t,e){var o=this,i=t.getField();t.modules.filter={success:function(e){var n,s="input"==t.modules.filter.tagType&&"text"==t.modules.filter.attrType||"textarea"==t.modules.filter.tagType?"partial":"match",a="",r="";if(void 0===t.modules.filter.prevSuccess||t.modules.filter.prevSuccess!==e){if(t.modules.filter.prevSuccess=e,t.modules.filter.emptyFunc(e))delete o.headerFilters[i];else{switch(t.modules.filter.value=e,_typeof(t.definition.headerFilterFunc)){case"string":o.filters[t.definition.headerFilterFunc]?(a=t.definition.headerFilterFunc,n=function(i){var n=t.definition.headerFilterFuncParams||{},s=t.getFieldValue(i);return n="function"==typeof n?n(e,s,i):n,o.filters[t.definition.headerFilterFunc](e,s,i,n)}):console.warn("Header Filter Error - Matching filter function not found: ",t.definition.headerFilterFunc);break;case"function":a=n=function(o){var i=t.definition.headerFilterFuncParams||{},n=t.getFieldValue(o);return i="function"==typeof i?i(e,n,o):i,t.definition.headerFilterFunc(e,n,o,i)}}if(!n)switch(s){case"partial":n=function(o){var i=t.getFieldValue(o);return null!=i&&String(i).toLowerCase().indexOf(String(e).toLowerCase())>-1},a="like";break;default:n=function(o){return t.getFieldValue(o)==e},a="="}o.headerFilters[i]={value:e,func:n,type:a,params:{}}}r=JSON.stringify(o.headerFilters),o.prevHeaderFilterChangeCheck!==r&&(o.prevHeaderFilterChangeCheck=r,o.changed=!0,o.table.rowManager.filterRefresh())}return!0},attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(t)},Filter.prototype.generateHeaderFilterElement=function(t,e,o){var i,n,s,a,r,l,u,c=this,d=this,h=t.modules.filter.success,p=t.getField();if(t.modules.filter.headerElement&&t.modules.filter.headerElement.parentNode&&t.contentElement.removeChild(t.modules.filter.headerElement.parentNode),p){switch(t.modules.filter.emptyFunc=t.definition.headerFilterEmptyCheck||function(t){return!t&&"0"!==t&&0!==t},(i=document.createElement("div")).classList.add("tabulator-header-filter"),_typeof(t.definition.headerFilter)){case"string":d.table.modules.edit.editors[t.definition.headerFilter]?(n=d.table.modules.edit.editors[t.definition.headerFilter],"tick"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(t){return!0!==t&&!1!==t})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",t.definition.editor);break;case"function":n=t.definition.headerFilter;break;case"boolean":t.modules.edit&&t.modules.edit.editor?n=t.modules.edit.editor:t.definition.formatter&&d.table.modules.edit.editors[t.definition.formatter]?(n=d.table.modules.edit.editors[t.definition.formatter],"tick"!==t.definition.formatter&&"tickCross"!==t.definition.formatter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(t){return!0!==t&&!1!==t})):n=d.table.modules.edit.editors.input}if(n){if(a={getValue:function(){return void 0!==e?e:""},getField:function(){return t.definition.field},getElement:function(){return i},getColumn:function(){return t.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u="function"==typeof(u=t.definition.headerFilterParams||{})?u.call(d.table):u,!(s=n.call(this.table.modules.edit,a,(function(){}),h,(function(){}),u)))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor returned a value of false");if(!(s instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+p+" column, editor should return an instance of Node, the editor returned:",s);p?d.table.modules.localize.bind("headerFilters|columns|"+t.definition.field,(function(t){s.setAttribute("placeholder",void 0!==t&&t?t:d.table.modules.localize.getText("headerFilters|default"))})):d.table.modules.localize.bind("headerFilters|default",(function(t){s.setAttribute("placeholder",void 0!==d.column.definition.headerFilterPlaceholder&&d.column.definition.headerFilterPlaceholder?d.column.definition.headerFilterPlaceholder:t)})),s.addEventListener("click",(function(t){t.stopPropagation(),s.focus()})),s.addEventListener("focus",(function(t){var e=c.table.columnManager.element.scrollLeft;e!==c.table.rowManager.element.scrollLeft&&(c.table.rowManager.scrollHorizontal(e),c.table.columnManager.scrollHorizontal(e))})),r=!1,l=function(t){r&&clearTimeout(r),r=setTimeout((function(){h(s.value)}),d.table.options.headerFilterLiveFilterDelay)},t.modules.filter.headerElement=s,t.modules.filter.attrType=s.hasAttribute("type")?s.getAttribute("type").toLowerCase():"",t.modules.filter.tagType=s.tagName.toLowerCase(),!1!==t.definition.headerFilterLiveFilter&&("autocomplete"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter&&("autocomplete"!==t.definition.editor&&"tickCross"!==t.definition.editor||!0!==t.definition.headerFilter)&&(s.addEventListener("keyup",l),s.addEventListener("search",l),"number"==t.modules.filter.attrType&&s.addEventListener("change",(function(t){h(s.value)})),"text"==t.modules.filter.attrType&&"ie"!==this.table.browser&&s.setAttribute("type","search")),"input"!=t.modules.filter.tagType&&"select"!=t.modules.filter.tagType&&"textarea"!=t.modules.filter.tagType||s.addEventListener("mousedown",(function(t){t.stopPropagation()}))),i.appendChild(s),t.contentElement.appendChild(i),o||d.headerFilterColumns.push(t)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",t.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(t){t.modules.filter&&t.modules.filter.headerElement&&(t.modules.filter.headerElement.style.display="none")}))},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach((function(t){t.modules.filter&&t.modules.filter.headerElement&&(t.modules.filter.headerElement.style.display="")}))},Filter.prototype.setHeaderFilterFocus=function(t){t.modules.filter&&t.modules.filter.headerElement?t.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",t.getField())},Filter.prototype.getHeaderFilterValue=function(t){if(t.modules.filter&&t.modules.filter.headerElement)return t.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",t.getField())},Filter.prototype.setHeaderFilterValue=function(t,e){t&&(t.modules.filter&&t.modules.filter.headerElement?(this.generateHeaderFilterElement(t,e,!0),t.modules.filter.success(e)):console.warn("Column Filter Error - No header filter set on column:",t.getField()))},Filter.prototype.reloadHeaderFilter=function(t){t&&(t.modules.filter&&t.modules.filter.headerElement?this.generateHeaderFilterElement(t,t.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",t.getField()))},Filter.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Filter.prototype.setFilter=function(t,e,o,i){this.filterList=[],Array.isArray(t)||(t=[{field:t,type:e,value:o,params:i}]),this.addFilter(t)},Filter.prototype.addFilter=function(t,e,o,i){var n=this;Array.isArray(t)||(t=[{field:t,type:e,value:o,params:i}]),t.forEach((function(t){(t=n.findFilter(t))&&(n.filterList.push(t),n.changed=!0)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(t){var e,o=this;if(Array.isArray(t))return this.findSubFilters(t);var i=!1;return"function"==typeof t.field?i=function(e){return t.field(e,t.type||{})}:o.filters[t.type]?i=(e=o.table.columnManager.getColumnByField(t.field))?function(i){return o.filters[t.type](t.value,e.getFieldValue(i),i,t.params||{})}:function(e){return o.filters[t.type](t.value,e[t.field],e,t.params||{})}:console.warn("Filter Error - No such filter type found, ignoring: ",t.type),t.func=i,!!t.func&&t},Filter.prototype.findSubFilters=function(t){var e=this,o=[];return t.forEach((function(t){(t=e.findFilter(t))&&o.push(t)})),!!o.length&&o},Filter.prototype.getFilters=function(t,e){var o=[];return t&&(o=this.getHeaderFilters()),e&&o.forEach((function(t){"function"==typeof t.type&&(t.type="function")})),o=o.concat(this.filtersToArray(this.filterList,e))},Filter.prototype.filtersToArray=function(t,e){var o=this,i=[];return t.forEach((function(t){var n;Array.isArray(t)?i.push(o.filtersToArray(t,e)):(n={field:t.field,type:t.type,value:t.value},e&&"function"==typeof n.type&&(n.type="function"),i.push(n))})),i},Filter.prototype.getHeaderFilters=function(){var t=[];for(var e in this.headerFilters)t.push({field:e,type:this.headerFilters[e].type,value:this.headerFilters[e].value});return t},Filter.prototype.removeFilter=function(t,e,o){var i=this;Array.isArray(t)||(t=[{field:t,type:e,value:o}]),t.forEach((function(t){var e=-1;(e="object"==_typeof(t.field)?i.filterList.findIndex((function(e){return t===e})):i.filterList.findIndex((function(e){return t.field===e.field&&t.type===e.type&&t.value===e.value})))>-1?(i.filterList.splice(e,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",t.type)})),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(t){this.filterList=[],t&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var t=this;this.headerFilters={},t.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach((function(e){void 0!==e.modules.filter.value&&delete e.modules.filter.value,e.modules.filter.prevSuccess=void 0,t.reloadHeaderFilter(e)})),this.changed=!0},Filter.prototype.search=function(t,e,o,i){var n=this,s=[],a=[];return Array.isArray(e)||(e=[{field:e,type:o,value:i}]),e.forEach((function(t){(t=n.findFilter(t))&&a.push(t)})),this.table.rowManager.rows.forEach((function(e){var o=!0;a.forEach((function(t){n.filterRecurse(t,e.getData())||(o=!1)})),o&&s.push("data"===t?e.getData("data"):e.getComponent())})),s},Filter.prototype.filter=function(t,e){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=t.slice(0):t.forEach((function(t){o.filterRow(t)&&i.push(t)})),o.table.options.dataFiltered&&(i.forEach((function(t){n.push(t.getComponent())})),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},Filter.prototype.filterRow=function(t,e){var o=this,i=!0,n=t.getData();for(var s in o.filterList.forEach((function(t){o.filterRecurse(t,n)||(i=!1)})),o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},Filter.prototype.filterRecurse=function(t,e){var o=this,i=!1;return Array.isArray(t)?t.forEach((function(t){o.filterRecurse(t,e)&&(i=!0)})):i=t.func(e),i},Filter.prototype.filters={"=":function(t,e,o,i){return e==t},"<":function(t,e,o,i){return e<t},"<=":function(t,e,o,i){return e<=t},">":function(t,e,o,i){return e>t},">=":function(t,e,o,i){return e>=t},"!=":function(t,e,o,i){return e!=t},regex:function(t,e,o,i){return"string"==typeof t&&(t=new RegExp(t)),t.test(e)},like:function(t,e,o,i){return null==t?e===t:null!=e&&String(e).toLowerCase().indexOf(t.toLowerCase())>-1},keywords:function(t,e,o,i){var n=t.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null==e?"":e).toLowerCase(),a=[];return n.forEach((function(t){s.includes(t)&&a.push(!0)})),i.matchAll?a.length===n.length:!!a.length},starts:function(t,e,o,i){return null==t?e===t:null!=e&&String(e).toLowerCase().startsWith(t.toLowerCase())},ends:function(t,e,o,i){return null==t?e===t:null!=e&&String(e).toLowerCase().endsWith(t.toLowerCase())},in:function(t,e,o,i){return Array.isArray(t)?!t.length||t.indexOf(e)>-1:(console.warn("Filter Error - filter value is not an array:",t),!1)}},Tabulator.prototype.registerModule("filter",Filter);var Format=function(t){this.table=t};Format.prototype.initializeColumn=function(t){t.modules.format=this.lookupFormatter(t,""),void 0!==t.definition.formatterPrint&&(t.modules.format.print=this.lookupFormatter(t,"Print")),void 0!==t.definition.formatterClipboard&&(t.modules.format.clipboard=this.lookupFormatter(t,"Clipboard")),void 0!==t.definition.formatterHtmlOutput&&(t.modules.format.htmlOutput=this.lookupFormatter(t,"HtmlOutput"))},Format.prototype.lookupFormatter=function(t,e){var o={params:t.definition["formatter"+e+"Params"]||{}},i=t.definition["formatter"+e];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},Format.prototype.cellRendered=function(t){t.modules.format&&t.modules.format.renderedCallback&&!t.modules.format.rendered&&(t.modules.format.renderedCallback(),t.modules.format.rendered=!0)},Format.prototype.formatValue=function(t){var e=t.getComponent(),o="function"==typeof t.column.modules.format.params?t.column.modules.format.params(e):t.column.modules.format.params;return t.column.modules.format.formatter.call(this,e,o,(function(e){t.modules.format||(t.modules.format={}),t.modules.format.renderedCallback=e,t.modules.format.rendered=!1}))},Format.prototype.formatExportValue=function(t,e){var o,i=t.column.modules.format[e];if(i){return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,t.getComponent(),o,(function(e){t.modules.format||(t.modules.format={}),t.modules.format.renderedCallback=e,t.modules.format.rendered=!1}))}return this.formatValue(t)},Format.prototype.sanitizeHTML=function(t){if(t){var e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(t).replace(/[&<>"'`=\/]/g,(function(t){return e[t]}))}return t},Format.prototype.emptyToSpace=function(t){return null==t||""===t?"&nbsp;":t},Format.prototype.getFormatter=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.formatters[t]?t=this.formatters[t]:(console.warn("Formatter Error - No such formatter found: ",t),t=this.formatters.plaintext);break;case"function":t=t;break;default:t=this.formatters.plaintext}return t},Format.prototype.formatters={plaintext:function(t,e,o){return this.emptyToSpace(this.sanitizeHTML(t.getValue()))},html:function(t,e,o){return t.getValue()},textarea:function(t,e,o){return t.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(t.getValue()))},money:function(t,e,o){var i,n,s,a,r=parseFloat(t.getValue()),l=e.decimal||".",u=e.thousand||",",c=e.symbol||"",d=!!e.symbolAfter,h=void 0!==e.precision?e.precision:2;if(isNaN(r))return this.emptyToSpace(this.sanitizeHTML(t.getValue()));for(i=!1!==h?r.toFixed(h):r,n=(i=String(i).split("."))[0],s=i.length>1?l+i[1]:"",a=/(\d+)(\d{3})/;a.test(n);)n=n.replace(a,"$1"+u+"$2");return d?n+s+c:c+n+s},link:function(t,e,o){var i=t.getValue(),n=e.urlPrefix||"",s=e.download,a=i,r=document.createElement("a");if(e.labelField&&(a=t.getData()[e.labelField]),e.label)switch(_typeof(e.label)){case"string":a=e.label;break;case"function":a=e.label(t)}if(a){if(e.urlField&&(i=t.getData()[e.urlField]),e.url)switch(_typeof(e.url)){case"string":i=e.url;break;case"function":i=e.url(t)}return r.setAttribute("href",n+i),e.target&&r.setAttribute("target",e.target),e.download&&(s="function"==typeof s?s(t):!0===s?"":s,r.setAttribute("download",s)),r.innerHTML=this.emptyToSpace(this.sanitizeHTML(a)),r}return"&nbsp;"},image:function(t,e,o){var i=document.createElement("img"),n=t.getValue();switch(e.urlPrefix&&(n=e.urlPrefix+t.getValue()),e.urlSuffix&&(n+=e.urlSuffix),i.setAttribute("src",n),_typeof(e.height)){case"number":i.style.height=e.height+"px";break;case"string":i.style.height=e.height}switch(_typeof(e.width)){case"number":i.style.width=e.width+"px";break;case"string":i.style.width=e.width}return i.addEventListener("load",(function(){t.getRow().normalizeHeight()})),i},tickCross:function(t,e,o){var i=t.getValue(),n=t.getElement(),s=e.allowEmpty,a=e.allowTruthy,r=void 0!==e.tickElement?e.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',l=void 0!==e.crossElement?e.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return a&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),r||""):!s||"null"!==i&&""!==i&&null!=i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(t,e,o){var i=e.inputFormat||"YYYY-MM-DD hh:mm:ss",n=e.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==e.invalidPlaceholder?e.invalidPlaceholder:"",a=t.getValue(),r=moment(a,i);return r.isValid()?e.timezone?r.tz(e.timezone).format(n):r.format(n):!0===s?a:"function"==typeof s?s(a):s},datetimediff:function(t,e,o){var i=e.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==e.invalidPlaceholder?e.invalidPlaceholder:"",s=void 0!==e.suffix&&e.suffix,a=void 0!==e.unit?e.unit:void 0,r=void 0!==e.humanize&&e.humanize,l=void 0!==e.date?e.date:moment(),u=t.getValue(),c=moment(u,i);return c.isValid()?r?moment.duration(c.diff(l)).humanize(s):c.diff(l,a)+(s?" "+s:""):!0===n?u:"function"==typeof n?n(u):n},lookup:function(t,e,o){var i=t.getValue();return void 0===e[i]?(console.warn("Missing display value for "+i),i):e[i]},star:function(t,e,o){var i=t.getValue(),n=t.getElement(),s=e&&e.stars?e.stars:5,a=document.createElement("span"),r=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.verticalAlign="middle",r.setAttribute("width","14"),r.setAttribute("height","14"),r.setAttribute("viewBox","0 0 512 512"),r.setAttribute("xml:space","preserve"),r.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var u=r.cloneNode(!0);u.innerHTML=l<=i?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',a.appendChild(u)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),a},traffic:function(t,e,o){var i,n,s=this.sanitizeHTML(t.getValue())||0,a=document.createElement("span"),r=e&&e.max?e.max:100,l=e&&e.min?e.min:0,u=e&&void 0!==e.color?e.color:["red","orange","green"],c="#666666";if(!isNaN(s)&&void 0!==t.getValue()){switch(a.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=r?parseFloat(s):r,n=parseFloat(n)>=l?parseFloat(n):l,i=(r-l)/100,n=Math.round((n-l)/i),void 0===u?"undefined":_typeof(u)){case"string":c=u;break;case"function":c=u(s);break;case"object":if(Array.isArray(u)){var d=100/u.length,h=Math.floor(n/d);h=Math.min(h,u.length-1),c=u[h=Math.max(h,0)];break}}return a.style.backgroundColor=c,a}},progress:function(t,e,o){var i,n,s,a,r,l=this.sanitizeHTML(t.getValue())||0,u=t.getElement(),c=e&&e.max?e.max:100,d=e&&e.min?e.min:0,h=e&&e.legendAlign?e.legendAlign:"center";switch(n=parseFloat(l)<=c?parseFloat(l):c,n=parseFloat(n)>=d?parseFloat(n):d,i=(c-d)/100,n=Math.round((n-d)/i),_typeof(e.color)){case"string":s=e.color;break;case"function":s=e.color(l);break;case"object":if(Array.isArray(e.color)){var p=100/e.color.length,m=Math.floor(n/p);m=Math.min(m,e.color.length-1),m=Math.max(m,0),s=e.color[m];break}default:s="#2DC214"}switch(_typeof(e.legend)){case"string":a=e.legend;break;case"function":a=e.legend(l);break;case"boolean":a=l;break;default:a=!1}switch(_typeof(e.legendColor)){case"string":r=e.legendColor;break;case"function":r=e.legendColor(l);break;case"object":if(Array.isArray(e.legendColor)){p=100/e.legendColor.length,m=Math.floor(n/p);m=Math.min(m,e.legendColor.length-1),m=Math.max(m,0),r=e.legendColor[m]}break;default:r="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var f=document.createElement("div");if(f.style.display="inline-block",f.style.position="relative",f.style.width=n+"%",f.style.backgroundColor=s,f.style.height="100%",f.setAttribute("data-max",c),f.setAttribute("data-min",d),a){var g=document.createElement("div");g.style.position="absolute",g.style.top="4px",g.style.left=0,g.style.textAlign=h,g.style.width="100%",g.style.color=r,g.innerHTML=a}return o((function(){if(!(t instanceof CellComponent)){var e=document.createElement("div");e.style.position="absolute",e.style.top="4px",e.style.bottom="4px",e.style.left="4px",e.style.right="4px",u.appendChild(e),u=e}u.appendChild(f),a&&u.appendChild(g)})),""},color:function(t,e,o){return t.getElement().style.backgroundColor=this.sanitizeHTML(t.getValue()),""},buttonTick:function(t,e,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(t,e,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(t,e,o){return this.table.rowManager.activeRows.indexOf(t.getRow()._getSelf())+1},handle:function(t,e,o){return t.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(t,e,o){var i=document.createElement("div"),n=t.getRow()._row.modules.responsiveLayout;function s(t){var e=n.element;n.open=t,e&&(n.open?(i.classList.add("open"),e.style.display=""):(i.classList.remove("open"),e.style.display="none"))}return i.classList.add("tabulator-responsive-collapse-toggle"),i.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",t.getElement().classList.add("tabulator-row-handle"),i.addEventListener("click",(function(t){t.stopImmediatePropagation(),s(!n.open)})),s(n.open),i},rowSelection:function(t,e,o){var i=this,n=document.createElement("input");if(n.type="checkbox",this.table.modExists("selectRow",!0))if(n.addEventListener("click",(function(t){t.stopPropagation()})),"function"==typeof t.getRow){var s=t.getRow();s instanceof RowComponent?(n.addEventListener("change",(function(t){s.toggleSelect()})),n.checked=s.isSelected&&s.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(s,n)):n=""}else n.addEventListener("change",(function(t){i.table.modules.selectRow.selectedRows.length?i.table.deselectRow():i.table.selectRow(e.rowRange)})),this.table.modules.selectRow.registerHeaderSelectCheckbox(n);return n}},Tabulator.prototype.registerModule("format",Format);var FrozenColumns=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},FrozenColumns.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.isGroup||(this.frozenCheck(t)?(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right")},FrozenColumns.prototype.frozenCheck=function(t){return t.parent.isGroup&&t.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),t.parent.isGroup?this.frozenCheck(t.parent):t.definition.frozen},FrozenColumns.prototype.scrollHorizontal=function(){var t,e=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout((function(){e.layout()}),100),t=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),t.forEach((function(t){"row"===t.type&&e.layoutRow(t)})),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},FrozenColumns.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},FrozenColumns.prototype.layoutColumnPosition=function(t){var e=this,o=[];this.leftColumns.forEach((function(i,n){if(i.modules.frozen.margin=e._calcSpace(e.leftColumns,n)+e.table.columnManager.scrollLeft+"px",n==e.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=e.getColGroupParentElement(i);o.includes(s)||(e.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else e.layoutElement(i.getElement(),i);t&&i.cells.forEach((function(t){e.layoutElement(t.getElement(!0),i)}))})),this.rightColumns.forEach((function(o,i){o.modules.frozen.margin=e.rightPadding-e._calcSpace(e.rightColumns,i+1)+"px",i==e.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?e.layoutElement(e.getColGroupParentElement(o),o):e.layoutElement(o.getElement(),o),t&&o.cells.forEach((function(t){e.layoutElement(t.getElement(!0),o)}))}))},FrozenColumns.prototype.getColGroupParentElement=function(t){return t.parent.isGroup?this.getColGroupParentElement(t.parent):t.getElement()},FrozenColumns.prototype.layout=function(){var t=this;t.active&&(this.calcMargins(),t.table.rowManager.getDisplayRows().forEach((function(e){"row"===e.type&&t.layoutRow(e)})),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},FrozenColumns.prototype.layoutRow=function(t){var e=this;t.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach((function(o){var i=t.getCell(o);i&&e.layoutElement(i.getElement(!0),o)})),this.rightColumns.forEach((function(o){var i=t.getCell(o);i&&e.layoutElement(i.getElement(!0),o)}))},FrozenColumns.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin,t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(t,e){for(var o=0,i=0;i<e;i++)t[i].visible&&(o+=t[i].getWidth());return o},Tabulator.prototype.registerModule("frozenColumns",FrozenColumns);var FrozenRows=function(t){this.table=t,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(t){var e=t.slice(0);return this.rows.forEach((function(t){var o=e.indexOf(t);o>-1&&e.splice(o,1)})),e},FrozenRows.prototype.freezeRow=function(t){t.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(t.modules.frozen=!0,this.topElement.appendChild(t.getElement()),t.initialize(),t.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(t),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(t){this.rows.indexOf(t);t.modules.frozen?(t.modules.frozen=!1,this.detachRow(t),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.detachRow=function(t){var e=this.rows.indexOf(t);if(e>-1){var o=t.getElement();o.parentNode.removeChild(o),this.rows.splice(e,1)}},FrozenRows.prototype.styleRows=function(t){var e=this;this.rows.forEach((function(t,o){e.table.rowManager.styleRow(t,o)}))},Tabulator.prototype.registerModule("frozenRows",FrozenRows);var GroupComponent=function(t){this._group=t,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getField=function(){return this._group.field},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},GroupComponent.prototype.isVisible=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.groupManager.table};var Group=function(t,e,o,i,n,s,a){this.groupManager=t,this.parent=e,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o<t.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=a,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=a?a.visible:void 0!==t.startOpen[o]?t.startOpen[o]:t.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};Group.prototype.wipe=function(){this.groupList.length?this.groupList.forEach((function(t){t.wipe()})):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},Group.prototype.createElements=function(){var t=document.createElement("div");t.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(t),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},Group.prototype.createValueGroups=function(){var t=this,e=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach((function(o){t._createGroup(o,e)}))},Group.prototype.addBindings=function(){var t,e,o,i=this;i.groupManager.table.options.groupClick&&i.element.addEventListener("click",(function(t){i.groupManager.table.options.groupClick.call(i.groupManager.table,t,i.getComponent())})),i.groupManager.table.options.groupDblClick&&i.element.addEventListener("dblclick",(function(t){i.groupManager.table.options.groupDblClick.call(i.groupManager.table,t,i.getComponent())})),i.groupManager.table.options.groupContext&&i.element.addEventListener("contextmenu",(function(t){i.groupManager.table.options.groupContext.call(i.groupManager.table,t,i.getComponent())})),(i.groupManager.table.options.groupContextMenu||i.groupManager.table.options.groupClickMenu)&&i.groupManager.table.modExists("menu")&&i.groupManager.table.modules.menu.initializeGroup.call(i.groupManager.table.modules.menu,i),i.groupManager.table.options.groupTap&&(o=!1,i.element.addEventListener("touchstart",(function(t){o=!0}),{passive:!0}),i.element.addEventListener("touchend",(function(t){o&&i.groupManager.table.options.groupTap(t,i.getComponent()),o=!1}))),i.groupManager.table.options.groupDblTap&&(t=null,i.element.addEventListener("touchend",(function(e){t?(clearTimeout(t),t=null,i.groupManager.table.options.groupDblTap(e,i.getComponent())):t=setTimeout((function(){clearTimeout(t),t=null}),300)}))),i.groupManager.table.options.groupTapHold&&(e=null,i.element.addEventListener("touchstart",(function(t){clearTimeout(e),e=setTimeout((function(){clearTimeout(e),e=null,o=!1,i.groupManager.table.options.groupTapHold(t,i.getComponent())}),1e3)}),{passive:!0}),i.element.addEventListener("touchend",(function(t){clearTimeout(e),e=null}))),i.groupManager.table.options.groupToggleElement&&("arrow"==i.groupManager.table.options.groupToggleElement?i.arrowElement:i.element).addEventListener("click",(function(t){t.stopPropagation(),t.stopImmediatePropagation(),i.toggleVisibility()}))},Group.prototype._createGroup=function(t,e){var o=e+"_"+t,i=new Group(this.groupManager,this,e,t,this.groupManager.groupIDLookups[e].field,this.groupManager.headerGenerator[e]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[o]);this.groups[o]=i,this.groupList.push(i)},Group.prototype._addRowToGroup=function(t){var e=this.level+1;if(this.hasSubGroups){var o=this.groupManager.groupIDLookups[e].func(t.getData()),i=e+"_"+o;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]?this.groups[i]&&this.groups[i].addRow(t):(this.groups[i]||this._createGroup(o,e),this.groups[i].addRow(t))}},Group.prototype._addRow=function(t){this.rows.push(t),t.modules.group=this},Group.prototype.insertRow=function(t,e,o){var i=this.conformRowData({});t.updateData(i);var n=this.rows.indexOf(e);n>-1?o?this.rows.splice(n+1,0,t):this.rows.splice(n,0,t):o?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},Group.prototype.scrollHeader=function(t){this.arrowElement.style.marginLeft=t,this.groupList.forEach((function(e){e.scrollHeader(t)}))},Group.prototype.getRowIndex=function(t){},Group.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},Group.prototype.removeRow=function(t){var e=this.rows.indexOf(t),o=t.getElement();e>-1&&this.rows.splice(e,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(t){var e,o=t.level+"_"+t.key;this.groups[o]&&(delete this.groups[o],(e=this.groupList.indexOf(t))>-1&&this.groupList.splice(e,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(t){var e=[];return e.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach((function(o){e=e.concat(o.getHeadersAndRows(t))})):(!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!t&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top))),!t&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom)))),e},Group.prototype.getData=function(t,e){var o=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach((function(t){o.push(t.getData(e||"data"))})),o},Group.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach((function(e){t+=e.getRowCount()})):t=this.rows.length,t},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach((function(t){t.getHeadersAndRows().forEach((function(t){t.detachElement()}))})):this.rows.forEach((function(t){var e=t.getElement();e.parentNode.removeChild(e)})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){if(this.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var t=this.getElement();this.groupList.length?this.groupList.forEach((function(e){e.getHeadersAndRows().forEach((function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o}))})):this.rows.forEach((function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o})),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach((function(e){t.push(e.getData())})),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},Group.prototype.getRowGroup=function(t){var e=!1;return this.groupList.length?this.groupList.forEach((function(o){var i=o.getRowGroup(t);i&&(e=i)})):this.rows.find((function(e){return e===t}))&&(e=this),e},Group.prototype.getSubGroups=function(t){var e=[];return this.groupList.forEach((function(o){e.push(t?o.getComponent():o)})),e},Group.prototype.getRows=function(t){var e=[];return this.rows.forEach((function(o){e.push(t?o.getComponent():o)})),e},Group.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach((function(e){t.push(e.getData())})),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getPath=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return t.unshift(this.key),this.parent&&this.parent.getPath(t),t},Group.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var t=0;t<this.element.childNodes.length;++t)this.element.childNodes[t].parentNode.removeChild(this.element.childNodes[t]);return this.generateGroupHeaderContents(),this.element},Group.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Group.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},Group.prototype.initialize=function(t){this.initialized&&!t||(this.normalizeHeight(),this.initialized=!0)},Group.prototype.reinitialize=function(){this.initialized=!1,this.height=0,Tabulator.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},Group.prototype.setHeight=function(t){this.height!=t&&(this.height=t,this.outerHeight=this.element.offsetHeight)},Group.prototype.getHeight=function(){return this.outerHeight},Group.prototype.getGroup=function(){return this},Group.prototype.reinitializeHeight=function(){},Group.prototype.calcHeight=function(){},Group.prototype.setCellHeight=function(){},Group.prototype.clearCellHeight=function(){},Group.prototype.getComponent=function(){return this.component||(this.component=new GroupComponent(this)),this.component};var GroupRows=function(t){this.table=t,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};GroupRows.prototype.initialize=function(){var t=this,e=t.table.options.groupBy,o=t.table.options.groupStartOpen,i=t.table.options.groupHeader;(this.allowedValues=t.table.options.groupValues,Array.isArray(e)&&Array.isArray(i)&&e.length>i.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",(function(e,o){t.headerGenerator[0]=function(t,i,n){return(void 0===t?"":t)+"<span>("+i+" "+(1===i?e:o.groups.items)+")</span>"}})),this.groupIDLookups=[],Array.isArray(e)||e)?this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs():this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs&&this.table.columnManager.getRealColumns().forEach((function(e){e.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),e.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()}));Array.isArray(e)||(e=[e]),e.forEach((function(e,o){var i,n;i="function"==typeof e?e:(n=t.table.columnManager.getColumnByField(e))?function(t){return n.getFieldValue(t)}:function(t){return t[e]},t.groupIDLookups.push({field:"function"!=typeof e&&e,func:i,values:!!t.allowedValues&&t.allowedValues[o]})})),o&&(Array.isArray(o)||(o=[o]),o.forEach((function(t){t="function"==typeof t?t:function(){return!0}})),t.startOpen=o),i&&(t.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},GroupRows.prototype.getGroups=function(t){var e=[];return this.groupList.forEach((function(o){e.push(t?o.getComponent():o)})),e},GroupRows.prototype.getChildGroups=function(t){var e=this,o=[];return t||(t=this),t.groupList.forEach((function(t){t.groupList.length?o=o.concat(e.getChildGroups(t)):o.push(t)})),o},GroupRows.prototype.wipe=function(){this.groupList.forEach((function(t){t.wipe()}))},GroupRows.prototype.pullGroupListData=function(t){var e=this,o=[];return t.forEach((function(t){var i={level:0,rowCount:0,headerContent:""},n=[];t.hasSubGroups?(n=e.pullGroupListData(t.groupList),i.level=t.level,i.rowCount=n.length-t.groupList.length,i.headerContent=t.generator(t.key,i.rowCount,t.rows,t),o.push(i),o=o.concat(n)):(i.level=t.level,i.headerContent=t.generator(t.key,t.rows.length,t.rows,t),i.rowCount=t.getRows().length,o.push(i),t.getRows().forEach((function(t){o.push(t.getData("data"))})))})),o},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(t){var e=!1;return this.groupList.forEach((function(o){var i=o.getRowGroup(t);i&&(e=i)})),e},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(t){var e=this,o=e.groups;e.groups={},e.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach((function(t){e.createGroup(t,0,o)})),t.forEach((function(t){e.assignRowToExistingGroup(t,o)}))):t.forEach((function(t){e.assignRowToGroup(t,o)}))},GroupRows.prototype.createGroup=function(t,e,o){var i,n=e+"_"+t;o=o||[],i=new Group(this,!1,e,t,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},GroupRows.prototype.assignRowToExistingGroup=function(t,e){var o="0_"+this.groupIDLookups[0].func(t.getData());this.groups[o]&&this.groups[o].addRow(t)},GroupRows.prototype.assignRowToGroup=function(t,e){var o=this.groupIDLookups[0].func(t.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,e),this.groups["0_"+o].addRow(t),!i},GroupRows.prototype.reassignRowToGroup=function(t){var e=t.getGroup(),o=e.getPath(),i=this.getExpectedPath(t);o.length==i.length&&o.every((function(t,e){return t===i[e]}))||(e.removeRow(t),this.assignRowToGroup(t,self.groups),this.table.rowManager.refreshActiveData("group",!1,!0))},GroupRows.prototype.getExpectedPath=function(t){var e=[],o=t.getData();return this.groupIDLookups.forEach((function(t){e.push(t.func(o))})),e},GroupRows.prototype.updateGroupRows=function(t){var e=[];if(this.groupList.forEach((function(t){e=e.concat(t.getHeadersAndRows())})),t){var o=this.table.rowManager.setDisplayRows(e,this.getDisplayIndex());!0!==o&&this.setDisplayIndex(o),this.table.rowManager.refreshActiveData("group",!0,!0)}return e},GroupRows.prototype.scrollHeaders=function(t){this.table.options.virtualDomHoz&&(t-=this.table.vdomHoz.vDomPadLeft),t+="px",this.groupList.forEach((function(e){e.scrollHeader(t)}))},GroupRows.prototype.removeGroup=function(t){var e,o=t.level+"_"+t.key;this.groups[o]&&(delete this.groups[o],(e=this.groupList.indexOf(t))>-1&&this.groupList.splice(e,1))},Tabulator.prototype.registerModule("groupRows",GroupRows);var History=function(t){this.table=t,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(t,e,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:e,data:o}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.clearComponentHistory=function(t){var e=this.history.findIndex((function(e){return e.component===t}));e>-1&&(this.history.splice(e,1),e<=this.index&&this.index--,this.clearComponentHistory(t))},History.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var e=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,e)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posFrom],!t.data.after),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var e=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,e)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posTo],t.data.after),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(t,e){this.history.forEach((function(o){if(o.component instanceof Row)o.component===t&&(o.component=e);else if(o.component instanceof Cell&&o.component.row===t){var i=o.component.column.getField();i&&(o.component=e.getCell(i))}}))},Tabulator.prototype.registerModule("history",History);var HtmlTableImport=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var t=this.table.element,e=this.table.options,o=(e.columns,t.getElementsByTagName("th")),i=t.getElementsByTagName("tbody")[0],n=[];this.hasIndex=!1,this.table.options.htmlImporting.call(this.table),i=i?i.getElementsByTagName("tr"):[],this._extractOptions(t,e),o.length?this._extractHeaders(o,i):this._generateBlankHeaders(o,i);for(var s=0;s<i.length;s++){var a=i[s].getElementsByTagName("td"),r={};this.hasIndex||(r[e.index]=s);for(var l=0;l<a.length;l++){var u=a[l];void 0!==this.fieldIndex[l]&&(r[this.fieldIndex[l]]=u.innerHTML)}n.push(r)}var c=document.createElement("div"),d=t.attributes;for(var l in d)"object"==_typeof(d[l])&&c.setAttribute(d[l].name,d[l].value);t.parentNode.replaceChild(c,t),e.data=n,this.table.options.htmlImported.call(this.table),this.table.element=c},HtmlTableImport.prototype._extractOptions=function(t,e,o){var i=t.attributes,n=o?Object.assign([],o):Object.keys(e),s={};for(var a in n.forEach((function(t){s[t.toLowerCase()]=t})),i){var r,l=i[a];l&&"object"==(void 0===l?"undefined":_typeof(l))&&l.name&&0===l.name.indexOf("tabulator-")&&(r=l.name.replace("tabulator-",""),void 0!==s[r]&&(e[s[r]]=this._attribValue(l.value)))}},HtmlTableImport.prototype._attribValue=function(t){return"true"===t||"false"!==t&&t},HtmlTableImport.prototype._findCol=function(t){return this.table.options.columns.find((function(e){return e.title===t}))||!1},HtmlTableImport.prototype._extractHeaders=function(t,e){for(var o=0;o<t.length;o++){var i,n=t[o],s=!1,a=this._findCol(n.textContent);a?s=!0:a={title:n.textContent.trim()},a.field||(a.field=n.textContent.trim().toLowerCase().replace(" ","_")),(i=n.getAttribute("width"))&&!a.width&&(a.width=i),n.attributes,this._extractOptions(n,a,Column.prototype.defaultOptionList),this.fieldIndex[o]=a.field,a.field==this.table.options.index&&(this.hasIndex=!0),s||this.table.options.columns.push(a)}},HtmlTableImport.prototype._generateBlankHeaders=function(t,e){for(var o=0;o<t.length;o++){var i=t[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var s=i.getAttribute("width");s&&(n.width=s),this.table.options.columns.push(n)}},Tabulator.prototype.registerModule("htmlTableImport",HtmlTableImport);var Keybindings=function(t){this.table=t,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};Keybindings.prototype.initialize=function(){var t=this.table.options.keybindings,e={};if(this.watchKeys={},this.pressedKeys=[],!1!==t){for(var o in this.bindings)e[o]=this.bindings[o];if(Object.keys(t).length)for(var i in t)e[i]=t[i];this.mapBindings(e),this.bindEvents()}},Keybindings.prototype.mapBindings=function(t){var e=this,o=this,i=function(i){e.actions[i]?t[i]&&("object"!==_typeof(t[i])&&(t[i]=[t[i]]),t[i].forEach((function(t){o.mapBinding(i,t)}))):console.warn("Key Binding Error - no such action:",i)};for(var n in t)i(n)},Keybindings.prototype.mapBinding=function(t,e){var o=this,i={action:this.actions[t],keys:[],ctrl:!1,shift:!1,meta:!1};e.toString().toLowerCase().split(" ").join("").split("+").forEach((function(t){switch(t){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:t=parseInt(t),i.keys.push(t),o.watchKeys[t]||(o.watchKeys[t]=[]),o.watchKeys[t].push(i)}}))},Keybindings.prototype.bindEvents=function(){var t=this;this.keyupBinding=function(e){var o=e.keyCode,i=t.watchKeys[o];i&&(t.pressedKeys.push(o),i.forEach((function(o){t.checkBinding(e,o)})))},this.keydownBinding=function(e){var o=e.keyCode;if(t.watchKeys[o]){var i=t.pressedKeys.indexOf(o);i>-1&&t.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(t,e){var o=this,i=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&t.metaKey==e.meta&&(e.keys.forEach((function(t){-1==o.pressedKeys.indexOf(t)&&(i=!1)})),i&&e.action.call(o,t),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,o=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(o>=0?e.element.scrollTop=o:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,o=e.scrollTop+e.height,i=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(o<=i?e.element.scrollTop=o:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(t.preventDefault(),(e=o.nav()).next()||i&&(o.getElement().firstChild.blur(),(i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i))).then((function(){setTimeout((function(){e.next()}))}))))},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings);var Menu=function(t){this.table=t,this.menuElements=[],this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1,this.positionReversedX=!1};Menu.prototype.initializeColumnHeader=function(t){var e,o=this;t.definition.headerContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,t.definition.headerContextMenu)),this.tapHold(t,t.definition.headerContextMenu)),t.definition.headerMenu&&((e=document.createElement("span")).classList.add("tabulator-header-menu-button"),e.innerHTML="&vellip;",e.addEventListener("click",(function(e){e.stopPropagation(),e.preventDefault(),o.LoadMenuEvent(t,t.definition.headerMenu,e)})),t.titleElement.insertBefore(e,t.titleElement.firstChild))},Menu.prototype.LoadMenuEvent=function(t,e,o){e="function"==typeof e?e.call(this.table,t.getComponent(),o):e,this.loadMenu(o,t,e)},Menu.prototype.tapHold=function(t,e){var o=this,i=t.getElement(),n=null,s=!1;i.addEventListener("touchstart",(function(i){clearTimeout(n),s=!1,n=setTimeout((function(){clearTimeout(n),n=null,s=!0,o.LoadMenuEvent(t,e,i)}),1e3)}),{passive:!0}),i.addEventListener("touchend",(function(t){clearTimeout(n),n=null,s&&t.preventDefault()}))},Menu.prototype.initializeCell=function(t){t.column.definition.contextMenu&&(t.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,t.column.definition.contextMenu)),this.tapHold(t,t.column.definition.contextMenu)),t.column.definition.clickMenu&&t.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,t,t.column.definition.clickMenu))},Menu.prototype.initializeRow=function(t){this.table.options.rowContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,this.table.options.rowContextMenu)),this.tapHold(t,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&t.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,t,this.table.options.rowClickMenu))},Menu.prototype.initializeGroup=function(t){this.table.options.groupContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,this.table.options.groupContextMenu)),this.tapHold(t,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&t.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,t,this.table.options.groupClickMenu))},Menu.prototype.loadMenu=function(t,e,o,i){var n=this,s=!(t instanceof MouseEvent),a=document.createElement("div");if(a.classList.add("tabulator-menu"),s||t.preventDefault(),o&&o.length){if(!i){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout((function(){n.nestedMenuBlock=!1}),100);this.hideMenu(),this.menuElements=[]}o.forEach((function(t){var o=document.createElement("div"),i=t.label,s=t.disabled;t.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof i&&(i=i.call(n.table,e.getComponent())),i instanceof Node?o.appendChild(i):o.innerHTML=i,"function"==typeof s&&(s=s.call(n.table,e.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",(function(t){t.stopPropagation()}))):t.menu&&t.menu.length?o.addEventListener("click",(function(i){i.stopPropagation(),n.hideOldSubMenus(a),n.loadMenu(i,e,t.menu,o)})):t.action&&o.addEventListener("click",(function(o){t.action(o,e.getComponent())})),t.menu&&t.menu.length&&o.classList.add("tabulator-menu-item-submenu")),a.appendChild(o)})),a.addEventListener("click",(function(t){n.hideMenu()})),this.menuElements.push(a),this.positionMenu(a,i,s,t)}},Menu.prototype.hideOldSubMenus=function(t){var e=this.menuElements.indexOf(t);if(e>-1)for(var o=this.menuElements.length-1;o>e;o--){var i=this.menuElements[o];i.parentNode&&i.parentNode.removeChild(i),this.menuElements.pop()}},Menu.prototype.positionMenu=function(t,e,o,i){var n,s,a,r=this,l=Math.max(document.body.offsetHeight,window.innerHeight);e?(n=(a=Tabulator.prototype.helpers.elOffset(e)).left+e.offsetWidth,s=a.top-1):(n=o?i.touches[0].pageX:i.pageX,s=o?i.touches[0].pageY:i.pageY,this.positionReversedX=!1),t.style.top=s+"px",t.style.left=n+"px",setTimeout((function(){r.table.rowManager.element.addEventListener("scroll",r.blurEvent),document.body.addEventListener("click",r.blurEvent),document.body.addEventListener("contextmenu",r.blurEvent),window.addEventListener("resize",r.blurEvent),document.body.addEventListener("keydown",r.escEvent)}),100),document.body.appendChild(t),s+t.offsetHeight>=l&&(t.style.top="",t.style.bottom=e?l-a.top-e.offsetHeight-1+"px":l-s+"px"),(n+t.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(t.style.left="",t.style.right=e?document.documentElement.offsetWidth-a.left+"px":document.documentElement.offsetWidth-n+"px",this.positionReversedX=!0)},Menu.prototype.isOpen=function(){return!!this.menuElements.length},Menu.prototype.escMenu=function(t){27==t.keyCode&&this.hideMenu()},Menu.prototype.hideMenu=function(){this.menuElements.forEach((function(t){t.parentNode&&t.parentNode.removeChild(t)})),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)},Menu.prototype.menus={},Tabulator.prototype.registerModule("menu",Menu);var MoveColumns=function(t){this.table=t,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.classList.add("tabulator-col-placeholder"),t},MoveColumns.prototype.initializeColumn=function(t){var e,o=this,i={};t.modules.frozen||(e=t.getElement(),i.mousemove=function(i){t.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-Tabulator.prototype.helpers.elOffset(e).left+o.table.columnManager.element.scrollLeft>t.getWidth()/2?o.toCol===t&&o.toColAfter||(e.parentNode.insertBefore(o.placeholderElement,e.nextSibling),o.moveColumn(t,!0)):(o.toCol!==t||o.toColAfter)&&(e.parentNode.insertBefore(o.placeholderElement,e),o.moveColumn(t,!1)))}.bind(o),e.addEventListener("mousedown",(function(e){o.touchMove=!1,1===e.which&&(o.checkTimeout=setTimeout((function(){o.startMove(e,t)}),o.checkPeriod))})),e.addEventListener("mouseup",(function(t){1===t.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)})),o.bindTouchEvents(t)),t.modules.moveColumn=i},MoveColumns.prototype.bindTouchEvents=function(t){var e,o,i,n,s,a,r=this,l=t.getElement(),u=!1;l.addEventListener("touchstart",(function(l){r.checkTimeout=setTimeout((function(){r.touchMove=!0,t,e=t.nextColumn(),i=e?e.getWidth()/2:0,o=t.prevColumn(),n=o?o.getWidth()/2:0,s=0,a=0,u=!1,r.startMove(l,t)}),r.checkPeriod)}),{passive:!0}),l.addEventListener("touchmove",(function(l){var c,d;r.moving&&(r.moveHover(l),u||(u=l.touches[0].pageX),(c=l.touches[0].pageX-u)>0?e&&c-s>i&&(d=e)!==t&&(u=l.touches[0].pageX,d.getElement().parentNode.insertBefore(r.placeholderElement,d.getElement().nextSibling),r.moveColumn(d,!0)):o&&-c-a>n&&(d=o)!==t&&(u=l.touches[0].pageX,d.getElement().parentNode.insertBefore(r.placeholderElement,d.getElement()),r.moveColumn(d,!1)),d&&(d,e=d.nextColumn(),s=i,i=e?e.getWidth()/2:0,o=d.prevColumn(),a=n,n=o?o.getWidth()/2:0))}),{passive:!0}),l.addEventListener("touchend",(function(t){r.checkTimeout&&clearTimeout(r.checkTimeout),r.moving&&r.endMove(t)}))},MoveColumns.prototype.startMove=function(t,e){var o=e.getElement();this.moving=e,this.startX=(this.touchMove?t.touches[0].pageX:t.pageX)-Tabulator.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=e.getWidth()+"px",this.placeholderElement.style.height=e.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(t)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(t){t.modules.moveColumn.mousemove&&t.getElement().addEventListener("mousemove",t.modules.moveColumn.mousemove)}))},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach((function(t){t.modules.moveColumn.mousemove&&t.getElement().removeEventListener("mousemove",t.modules.moveColumn.mousemove)}))},MoveColumns.prototype.moveColumn=function(t,e){var o=this.moving.getCells();this.toCol=t,this.toColAfter=e,e?t.getCells().forEach((function(t,e){var i=t.getElement(!0);i.parentNode.insertBefore(o[e].getElement(),i.nextSibling)})):t.getCells().forEach((function(t,e){var i=t.getElement(!0);i.parentNode.insertBefore(o[e].getElement(),i)}))},MoveColumns.prototype.endMove=function(t){(1===t.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},MoveColumns.prototype.moveHover=function(t){var e,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?t.touches[0].pageX:t.pageX)-Tabulator.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-n<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout((function(){e=Math.max(0,n-5),o.table.rowManager.getElement().scrollLeft=e,o.autoScrollTimeout=!1}),1))),n+i.clientWidth-s<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout((function(){e=Math.min(i.clientWidth,n+5),o.table.rowManager.getElement().scrollLeft=e,o.autoScrollTimeout=!1}),1)))},Tabulator.prototype.registerModule("moveColumn",MoveColumns);var MoveRows=function(t){this.table=t,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.classList.add("tabulator-row-placeholder"),t},MoveRows.prototype.initialize=function(t){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},MoveRows.prototype.setHandle=function(t){this.hasHandle=t},MoveRows.prototype.initializeGroupHeader=function(t){var e=this,o={};o.mouseup=function(t){e.tableRowDrop(t,row)}.bind(e),o.mousemove=function(o){var i;o.pageY-Tabulator.prototype.helpers.elOffset(t.element).top+e.table.rowManager.element.scrollTop>t.getHeight()/2?e.toRow===t&&e.toRowAfter||((i=t.getElement()).parentNode.insertBefore(e.placeholderElement,i.nextSibling),e.moveRow(t,!0)):(e.toRow!==t||e.toRowAfter)&&(i=t.getElement()).previousSibling&&(i.parentNode.insertBefore(e.placeholderElement,i),e.moveRow(t,!1))}.bind(e),t.modules.moveRow=o},MoveRows.prototype.initializeRow=function(t){var e,o=this,i={};i.mouseup=function(e){o.tableRowDrop(e,t)}.bind(o),i.mousemove=function(e){var i=t.getElement();e.pageY-Tabulator.prototype.helpers.elOffset(i).top+o.table.rowManager.element.scrollTop>t.getHeight()/2?o.toRow===t&&o.toRowAfter||(i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(t,!0)):(o.toRow!==t||o.toRowAfter)&&(i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(t,!1))}.bind(o),this.hasHandle||((e=t.getElement()).addEventListener("mousedown",(function(e){1===e.which&&(o.checkTimeout=setTimeout((function(){o.startMove(e,t)}),o.checkPeriod))})),e.addEventListener("mouseup",(function(t){1===t.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)})),this.bindTouchEvents(t,t.getElement())),t.modules.moveRow=i},MoveRows.prototype.initializeCell=function(t){var e=this,o=t.getElement(!0);o.addEventListener("mousedown",(function(o){1===o.which&&(e.checkTimeout=setTimeout((function(){e.startMove(o,t.row)}),e.checkPeriod))})),o.addEventListener("mouseup",(function(t){1===t.which&&e.checkTimeout&&clearTimeout(e.checkTimeout)})),this.bindTouchEvents(t.row,o)},MoveRows.prototype.bindTouchEvents=function(t,e){var o,i,n,s,a,r,l=this,u=!1;e.addEventListener("touchstart",(function(e){l.checkTimeout=setTimeout((function(){l.touchMove=!0,t,o=t.nextRow(),n=o?o.getHeight()/2:0,i=t.prevRow(),s=i?i.getHeight()/2:0,a=0,r=0,u=!1,l.startMove(e,t)}),l.checkPeriod)}),{passive:!0}),this.moving,this.toRow,this.toRowAfter,e.addEventListener("touchmove",(function(e){var c,d;l.moving&&(e.preventDefault(),l.moveHover(e),u||(u=e.touches[0].pageY),(c=e.touches[0].pageY-u)>0?o&&c-a>n&&(d=o)!==t&&(u=e.touches[0].pageY,d.getElement().parentNode.insertBefore(l.placeholderElement,d.getElement().nextSibling),l.moveRow(d,!0)):i&&-c-r>s&&(d=i)!==t&&(u=e.touches[0].pageY,d.getElement().parentNode.insertBefore(l.placeholderElement,d.getElement()),l.moveRow(d,!1)),d&&(d,o=d.nextRow(),a=n,n=o?o.getHeight()/2:0,i=d.prevRow(),r=s,s=i?i.getHeight()/2:0))})),e.addEventListener("touchend",(function(t){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&(l.endMove(t),l.touchMove=!1)}))},MoveRows.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach((function(t){"row"!==t.type&&"group"!==t.type||!t.modules.moveRow.mousemove||t.getElement().addEventListener("mousemove",t.modules.moveRow.mousemove)}))},MoveRows.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach((function(t){"row"!==t.type&&"group"!==t.type||!t.modules.moveRow.mousemove||t.getElement().removeEventListener("mousemove",t.modules.moveRow.mousemove)}))},MoveRows.prototype.startMove=function(t,e){var o=e.getElement();this.setStartPosition(t,e),this.moving=e,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=e.getWidth()+"px",this.placeholderElement.style.height=e.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(e)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(t)},MoveRows.prototype.setStartPosition=function(t,e){var o,i,n=this.touchMove?t.touches[0].pageX:t.pageX,s=this.touchMove?t.touches[0].pageY:t.pageY;o=e.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},MoveRows.prototype.endMove=function(t){t&&1!==t.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(t,e){this.toRow=t,this.toRowAfter=e},MoveRows.prototype.moveHover=function(t){this.connection?this.moveHoverConnections.call(this,t):this.moveHoverTable.call(this,t)},MoveRows.prototype.moveHoverTable=function(t){var e=this.table.rowManager.getElement(),o=e.scrollTop,i=(this.touchMove?t.touches[0].pageY:t.pageY)-e.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(t){this.hoverElement.style.left=this.startX+(this.touchMove?t.touches[0].pageX:t.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?t.touches[0].pageY:t.pageY)+"px"},MoveRows.prototype.elementRowDrop=function(t,e,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(t,e,!!o&&o.getComponent())},MoveRows.prototype.connectToTables=function(t){var e,o=this;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:t})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach((function(t){"string"==typeof t?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(t))):o.connectionElements.push(t)})),this.connectionElements.forEach((function(t){var e=function(e){o.elementRowDrop(e,t,o.moving)};t.addEventListener("mouseup",e),t.tabulatorElementDropEvent=e,t.classList.add("tabulator-movingrow-receiving")})))},MoveRows.prototype.disconnectFromTables=function(){var t;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach((function(t){t.classList.remove("tabulator-movingrow-receiving"),t.removeEventListener("mouseup",t.tabulatorElementDropEvent),delete t.tabulatorElementDropEvent}))},MoveRows.prototype.connect=function(t,e){return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=t,this.connectedRow=e,this.table.element.classList.add("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(t){"row"===t.type&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().addEventListener("mouseup",t.modules.moveRow.mouseup)})),this.tableRowDropEvent=this.tableRowDrop.bind(this),this.table.element.addEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,e,t),!0)},MoveRows.prototype.disconnect=function(t){t===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),this.table.rowManager.getDisplayRows().forEach((function(t){"row"===t.type&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().removeEventListener("mouseup",t.modules.moveRow.mouseup)})),this.table.element.removeEventListener("mouseup",this.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,t)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(t,e,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),e?e.getComponent():void 0,t):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),e?e.getComponent():void 0,t)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),e?e.getComponent():void 0,t);this.endMove()},MoveRows.prototype.tableRowDrop=function(t,e){var o=!1,i=!1;switch(t.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:e,success:i})},MoveRows.prototype.receivers={insert:function(t,e,o){return this.table.addRow(t.getData(),void 0,e),!0},add:function(t,e,o){return this.table.addRow(t.getData()),!0},update:function(t,e,o){return!!e&&(e.update(t.getData()),!0)},replace:function(t,e,o){return!!e&&(this.table.addRow(t.getData(),void 0,e),e.delete(),!0)}},MoveRows.prototype.senders={delete:function(t,e,o){t.delete()}},MoveRows.prototype.commsReceived=function(t,e,o){switch(e){case"connect":return this.connect(t,o.row);case"disconnect":return this.disconnect(t);case"dropcomplete":return this.dropComplete(t,o.row,o.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows);var Mutator=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(t){var e=this,o=!1,i={};this.allowedTypes.forEach((function(n){var s,a="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));t.definition[a]&&(s=e.lookupMutator(t.definition[a]))&&(o=!0,i[a]={mutator:s,params:t.definition[a+"Params"]||{}})})),o&&(t.modules.mutate=i)},Mutator.prototype.lookupMutator=function(t){var e=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?e=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":e=t}return e},Mutator.prototype.transformRow=function(t,e,o){var i,n="mutator"+(e.charAt(0).toUpperCase()+e.slice(1));return this.enabled&&this.table.columnManager.traverse((function(s){var a,r,l;s.modules.mutate&&(a=s.modules.mutate[n]||s.modules.mutate.mutator||!1)&&(i=s.getFieldValue(void 0!==o?o:t),"data"!=e&&void 0===i||(l=s.getComponent(),r="function"==typeof a.params?a.params(i,t,e,l):a.params,s.setFieldValue(t,a.mutator(i,t,e,r,l))))})),t},Mutator.prototype.transformCell=function(t,e){var o=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,t.row.getData()),t.column.setFieldValue(i,e),o.mutator(e,i,"edit",o.params,t.getComponent())):e},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator);var Page=function(t){this.table=t,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};Page.prototype.createElements=function(){var t;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),(t=document.createElement("button")).classList.add("tabulator-page"),t.setAttribute("type","button"),t.setAttribute("role","button"),t.setAttribute("aria-label",""),t.setAttribute("title",""),this.firstBut=t.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=t.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=t.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=t.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},Page.prototype.generatePageSizeSelectList=function(){var t=this,e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,-1==this.pageSizes.indexOf(this.size)&&e.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){e=[];for(var o=1;o<5;o++)e.push(this.size*o);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach((function(e){var o=document.createElement("option");o.value=e,!0===e?t.table.modules.localize.bind("pagination|all",(function(t){o.innerHTML=t})):o.innerHTML=e,t.pageSizeSelect.appendChild(o)})),this.pageSizeSelect.value=this.size}},Page.prototype.initialize=function(t){var e,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",(function(t){n.firstBut.innerHTML=t})),n.table.modules.localize.bind("pagination|first_title",(function(t){n.firstBut.setAttribute("aria-label",t),n.firstBut.setAttribute("title",t)})),n.table.modules.localize.bind("pagination|prev",(function(t){n.prevBut.innerHTML=t})),n.table.modules.localize.bind("pagination|prev_title",(function(t){n.prevBut.setAttribute("aria-label",t),n.prevBut.setAttribute("title",t)})),n.table.modules.localize.bind("pagination|next",(function(t){n.nextBut.innerHTML=t})),n.table.modules.localize.bind("pagination|next_title",(function(t){n.nextBut.setAttribute("aria-label",t),n.nextBut.setAttribute("title",t)})),n.table.modules.localize.bind("pagination|last",(function(t){n.lastBut.innerHTML=t})),n.table.modules.localize.bind("pagination|last_title",(function(t){n.lastBut.setAttribute("aria-label",t),n.lastBut.setAttribute("title",t)})),n.firstBut.addEventListener("click",(function(){n.setPage(1).then((function(){})).catch((function(){}))})),n.prevBut.addEventListener("click",(function(){n.previousPage().then((function(){})).catch((function(){}))})),n.nextBut.addEventListener("click",(function(){n.nextPage().then((function(){})).catch((function(){}))})),n.lastBut.addEventListener("click",(function(){n.setPage(n.max).then((function(){})).catch((function(){}))})),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(e=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",(function(t){n.pageSizeSelect.setAttribute("aria-label",t),n.pageSizeSelect.setAttribute("title",t),e.innerHTML=t})),n.element.appendChild(e),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",(function(t){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then((function(){})).catch((function(){}))}))),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||t||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:((o=document.createElement("div")).classList.add("tabulator-row"),o.style.visibility=t,(i=document.createElement("div")).classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},Page.prototype.initializeProgressive=function(t){this.initialize(!0),this.mode="progressive_"+t,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(t){this.displayIndex=t},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(t){this.max=t?!0===this.size?1:Math.ceil(t/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(t,e){return("local"==this.mode||t)&&(this.page=1),e&&(this.initialLoad=!0),!0},Page.prototype.setMaxPage=function(t){t=parseInt(t),this.max=t||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(t){var e=this,o=this;switch(t){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise((function(i,n){(t=parseInt(t))>0&&t<=e.max||"local"!==e.mode?(e.page=t,e.trigger().then((function(){i()})).catch((function(){n()})),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+e.max+":",t),n())}))},Page.prototype.setPageToRow=function(t){var e=this;return new Promise((function(o,i){var n=e.table.rowManager.getDisplayRows(e.displayIndex-1).indexOf(t);if(n>-1){var s=!0===e.size?1:Math.ceil((n+1)/e.size);e.setPage(s).then((function(){o()})).catch((function(){i()}))}else console.warn("Pagination Error - Requested row is not visible"),i()}))},Page.prototype.setPageSize=function(t){!0!==t&&(t=parseInt(t)),t>0&&(this.size=t),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},Page.prototype._setPageButtons=function(){for(var t=Math.floor((this.count-1)/2),e=Math.ceil((this.count-1)/2),o=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),i=this.page<=e?Math.min(this.count,this.max):Math.min(this.page+e,this.max);this.pagesElement.firstChild;)this.pagesElement.removeChild(this.pagesElement.firstChild);1==this.page?(this.firstBut.disabled=!0,this.prevBut.disabled=!0):(this.firstBut.disabled=!1,this.prevBut.disabled=!1),this.page==this.max?(this.lastBut.disabled=!0,this.nextBut.disabled=!0):(this.lastBut.disabled=!1,this.nextBut.disabled=!1);for(var n=o;n<=i;n++)n>0&&n<=this.max&&this.pagesElement.appendChild(this._generatePageButton(n));this.footerRedraw()},Page.prototype._generatePageButton=function(t){var e=this,o=document.createElement("button");return o.classList.add("tabulator-page"),t==e.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),e.table.modules.localize.bind("pagination|page_title",(function(e){o.setAttribute("aria-label",e+" "+t),o.setAttribute("title",e+" "+t)})),o.setAttribute("data-page",t),o.textContent=t,o.addEventListener("click",(function(o){e.setPage(t).then((function(){})).catch((function(){}))})),o},Page.prototype.previousPage=function(){var t=this;return new Promise((function(e,o){t.page>1?(t.page--,t.trigger().then((function(){e()})).catch((function(){o()})),t.table.options.persistence&&t.table.modExists("persistence",!0)&&t.table.modules.persistence.config.page&&t.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())}))},Page.prototype.nextPage=function(){var t=this;return new Promise((function(e,o){t.page<t.max?(t.page++,t.trigger().then((function(){e()})).catch((function(){o()})),t.table.options.persistence&&t.table.modExists("persistence",!0)&&t.table.modules.persistence.config.page&&t.table.modules.persistence.save("page")):(t.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+t.max+":",t.max+1),o())}))},Page.prototype.getPage=function(){return this.page},Page.prototype.getPageMax=function(){return this.max},Page.prototype.getPageSize=function(t){return this.size},Page.prototype.getMode=function(){return this.mode},Page.prototype.getRows=function(t){var e,o,i;if("local"==this.mode){e=[],!0===this.size?(o=0,i=t.length):i=(o=this.size*(this.page-1))+parseInt(this.size),this._setPageButtons();for(var n=o;n<i;n++)t[n]&&e.push(t[n]);return e}return this._setPageButtons(),t.slice(0)},Page.prototype.trigger=function(){var t,e=this;return new Promise((function(o,i){switch(e.mode){case"local":t=e.table.rowManager.scrollLeft,e.table.rowManager.refreshActiveData("page"),e.table.rowManager.scrollHorizontal(t),e.table.options.pageLoaded.call(e.table,e.getPage()),o();break;case"remote":case"progressive_load":case"progressive_scroll":e.table.modules.ajax.blockActiveRequest(),e._getRemotePage().then((function(){o()})).catch((function(){i()}));break;default:console.warn("Pagination Error - no such pagination mode:",e.mode),i()}}))},Page.prototype._getRemotePage=function(){var t,e,o=this,i=this;return new Promise((function(n,s){if(i.table.modExists("ajax",!0)||s(),t=Tabulator.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),(e=i.table.modules.ajax.getParams())[o.dataSentNames.page]=i.page,o.size&&(e[o.dataSentNames.size]=o.size),o.table.options.ajaxSorting&&o.table.modExists("sort")){var a=i.table.modules.sort.getSort();a.forEach((function(t){delete t.column})),e[o.dataSentNames.sorters]=a}if(o.table.options.ajaxFiltering&&o.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);e[o.dataSentNames.filters]=r}i.table.modules.ajax.setParams(e),i.table.modules.ajax.sendRequest(o.progressiveLoad).then((function(t){i._parseRemoteData(t),n()})).catch((function(t){s()})),i.table.modules.ajax.setParams(t)}))},Page.prototype._parseRemoteData=function(t){var e,o,i=this;if(void 0===t[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),t[this.dataReceivedNames.data]){if(this.max=parseInt(t[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(t[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(t[this.dataReceivedNames.data]),this.page<this.max&&setTimeout((function(){i.nextPage().then((function(){})).catch((function(){}))}),i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":t=this.table.rowManager.getData().concat(t[this.dataReceivedNames.data]),this.table.rowManager.setData(t,!0,this.initialLoad&&1==this.page),o=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+o&&i.nextPage().then((function(){})).catch((function(){}))}else e=this.table.rowManager.scrollLeft,this.table.rowManager.setData(t[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(e),this.table.columnManager.scrollHorizontal(e),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},Page.prototype.footerRedraw=function(){var t=this.table.footerManager.element;Math.ceil(t.clientWidth)-t.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(t.clientWidth)-t.scrollWidth<0&&(this.pagesElement.style.display="none"))},Page.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},Page.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},Tabulator.prototype.registerModule("page",Page);var Persistence=function(t){this.table=t,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};Persistence.prototype.localStorageTest=function(){var t="_tabulator_test";try{return window.localStorage.setItem(t,t),window.localStorage.removeItem(t),!0}catch(t){return!1}},Persistence.prototype.initialize=function(){var t,e=this.table.options.persistenceMode,o=this.table.options.persistenceID;this.mode=!0!==e?e:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(o||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(t=this.retreiveData("page"))&&(void 0===t.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=t.paginationSize),void 0===t.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=t.paginationInitialPage)),this.config.group&&(t=this.retreiveData("group"))&&(void 0===t.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=t.groupBy),void 0===t.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=t.groupStartOpen),void 0===t.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=t.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns))},Persistence.prototype.initializeColumn=function(t){var e,o=this;this.config.columns&&(this.defWatcherBlock=!0,e=t.getDefinition(),(!0===this.config.columns?Object.keys(e):this.config.columns).forEach((function(t){var i=Object.getOwnPropertyDescriptor(e,t),n=e[t];i&&Object.defineProperty(e,t,{set:function(t){n=t,o.defWatcherBlock||o.save("columns"),i.set&&i.set(t)},get:function(){return i.get&&i.get(),n}})})),this.defWatcherBlock=!1)},Persistence.prototype.load=function(t,e){var o=this.retreiveData(t);return e&&(o=o?this.mergeDefinition(e,o):e),o},Persistence.prototype.retreiveData=function(t){return!!this.readFunc&&this.readFunc(this.id,t)},Persistence.prototype.mergeDefinition=function(t,e){var o=this,i=[];return(e=e||[]).forEach((function(e,n){var s,a=o._findColumn(t,e);a&&(!0===o.config.columns||null==o.config.columns?(s=Object.keys(a)).push("width"):s=o.config.columns,s.forEach((function(t){"columns"!==t&&void 0!==e[t]&&(a[t]=e[t])})),a.columns&&(a.columns=o.mergeDefinition(a.columns,e.columns)),i.push(a))})),t.forEach((function(t,n){o._findColumn(e,t)||(i.length>n?i.splice(n,0,t):i.push(t))})),i},Persistence.prototype._findColumn=function(t,e){var o=e.columns?"group":e.field?"field":"object";return t.find((function(t){switch(o){case"group":return t.title===e.title&&t.columns.length===e.columns.length;case"field":return t.field===e.field;case"object":return t===e}}))},Persistence.prototype.save=function(t){var e={};switch(t){case"columns":e=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":e=this.table.modules.filter.getFilters();break;case"sort":e=this.validateSorters(this.table.modules.sort.getSort());break;case"group":e=this.getGroupConfig();break;case"page":e=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,t,e)},Persistence.prototype.validateSorters=function(t){return t.forEach((function(t){t.column=t.field,delete t.field})),t},Persistence.prototype.getGroupConfig=function(){var t={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(t.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(t.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(t.groupHeader=this.table.options.groupHeader)),t},Persistence.prototype.getPageConfig=function(){var t={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(t.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(t.paginationInitialPage=this.table.modules.page.getPage())),t},Persistence.prototype.parseColumns=function(t){var e=this,o=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return t.forEach((function(t){var n,s={},a=t.getDefinition();t.isGroup?(s.title=a.title,s.columns=e.parseColumns(t.getColumns())):(s.field=t.getField(),!0===e.config.columns||null==e.config.columns?(n=Object.keys(a)).push("width"):n=e.config.columns,n.forEach((function(e){switch(e){case"width":s.width=t.getWidth();break;case"visible":s.visible=t.visible;break;default:"function"!=typeof a[e]&&-1===i.indexOf(e)&&(s[e]=a[e])}}))),o.push(s)})),o},Persistence.prototype.readers={local:function(t,e){var o=localStorage.getItem(t+"-"+e);return!!o&&JSON.parse(o)},cookie:function(t,e){var o,i,n=document.cookie,s=t+"-"+e,a=n.indexOf(s+"=");return a>-1&&(n=n.substr(a),(o=n.indexOf(";"))>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},Persistence.prototype.writers={local:function(t,e,o){localStorage.setItem(t+"-"+e,JSON.stringify(o))},cookie:function(t,e,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=t+"-"+e+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},Tabulator.prototype.registerModule("persistence",Persistence);var Print=function(t){this.table=t,this.element=!1,this.manualBlock=!1};Print.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},Print.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},Print.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},Print.prototype.printFullscreen=function(t,e,o){var i,n,s=window.scrollX,a=window.scrollY,r=document.createElement("div"),l=document.createElement("div"),u=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==e?e:this.table.options.printStyled,t,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),"string"==typeof(i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader)?r.innerHTML=i:r.appendChild(i),this.element.appendChild(r)),this.element.appendChild(u),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),"string"==typeof(n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter)?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,u),window.print(),this.cleanup(),window.scrollTo(s,a),this.manualBlock=!1},Tabulator.prototype.registerModule("print",Print);var ReactiveData=function(t){this.table=t,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};ReactiveData.prototype.watchData=function(t){var e,o=this;this.currentVersion++,e=this.currentVersion,o.unwatchData(),o.data=t,o.origFuncs.push=t.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||e!==o.currentVersion||i.forEach((function(t){o.table.rowManager.addRowActual(t,!1)})),o.origFuncs.push.apply(t,arguments)}}),o.origFuncs.unshift=t.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||e!==o.currentVersion||i.forEach((function(t){o.table.rowManager.addRowActual(t,!0)})),o.origFuncs.unshift.apply(t,arguments)}}),o.origFuncs.shift=t.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||e!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(t)}}),o.origFuncs.pop=t.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||e!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(t)}}),o.origFuncs.splice=t.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?t.length+n[0]:n[0],a=n[1],r=!!n[2]&&n.slice(2);if(!o.blocked&&e===o.currentVersion){if(r&&((i=!!t[s]&&o.table.rowManager.getRowFromDataObject(t[s]))?r.forEach((function(t){o.table.rowManager.addRowActual(t,!0,i,!0)})):(r=r.slice().reverse()).forEach((function(t){o.table.rowManager.addRowActual(t,!0,!1,!0)}))),0!==a){var l=t.slice(s,void 0===n[1]?n[1]:s+a);l.forEach((function(t,e){var i=o.table.rowManager.getRowFromDataObject(t);i&&i.deleteActual(e!==l.length-1)}))}(r||0!==a)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(t,arguments)}})},ReactiveData.prototype.unwatchData=function(){if(!1!==this.data)for(var t in this.origFuncs)Object.defineProperty(this.data,t,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},ReactiveData.prototype.watchRow=function(t){var e=t.getData();for(var o in this.blocked=!0,e)this.watchKey(t,e,o);this.table.options.dataTree&&this.watchTreeChildren(t),this.blocked=!1},ReactiveData.prototype.watchTreeChildren=function(t){var e=this,o=t.getData()[this.table.options.dataTreeChildField],i={};function n(){e.table.modules.dataTree.initializeRow(t),e.table.modules.dataTree.layoutRow(t),e.table.rowManager.refreshActiveData("tree",!1,!0)}o&&(i.push=o.push,Object.defineProperty(o,"push",{enumerable:!1,configurable:!0,value:function(){var t=i.push.apply(o,arguments);return n(),t}}),i.unshift=o.unshift,Object.defineProperty(o,"unshift",{enumerable:!1,configurable:!0,value:function(){var t=i.unshift.apply(o,arguments);return n(),t}}),i.shift=o.shift,Object.defineProperty(o,"shift",{enumerable:!1,configurable:!0,value:function(){var t=i.shift.call(o);return n(),t}}),i.pop=o.pop,Object.defineProperty(o,"pop",{enumerable:!1,configurable:!0,value:function(){var t=i.pop.call(o);return n(),t}}),i.splice=o.splice,Object.defineProperty(o,"splice",{enumerable:!1,configurable:!0,value:function(){var t=i.splice.apply(o,arguments);return n(),t}}))},ReactiveData.prototype.watchKey=function(t,e,o){var i=this,n=Object.getOwnPropertyDescriptor(e,o),s=e[o],a=this.currentVersion;Object.defineProperty(e,o,{set:function(e){if(s=e,!i.blocked&&a===i.currentVersion){var r={};r[o]=e,t.updateData(r)}n.set&&n.set(e)},get:function(){return n.get&&n.get(),s}})},ReactiveData.prototype.unwatchRow=function(t){var e=t.getData();for(var o in e)Object.defineProperty(e,o,{value:e[o]})},ReactiveData.prototype.block=function(){this.blocked=!0},ReactiveData.prototype.unblock=function(){this.blocked=!1},Tabulator.prototype.registerModule("reactiveData",ReactiveData);var ResizeColumns=function(t){this.table=t,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(t,e,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===t&&(n="textarea"==e.definition.formatter||e.definition.variableHeight,e.modules.resize={variableHeight:n}),!0===s||s==t){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var r=document.createElement("div");r.className="tabulator-col-resize-handle prev",a.addEventListener("click",(function(t){t.stopPropagation()}));var l=function(t){var o=e.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=e,i._mouseDown(t,o,a))};a.addEventListener("mousedown",l),a.addEventListener("touchstart",l,{passive:!0}),a.addEventListener("dblclick",(function(t){var o=e.getLastColumn();o&&i._checkResizability(o)&&(t.stopPropagation(),o.reinitializeWidth(!0))})),r.addEventListener("click",(function(t){t.stopPropagation()}));var u=function(t){var o,n,s;(o=e.getFirstColumn())&&(s=(n=i.table.columnManager.findColumnIndex(o))>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=e,i._mouseDown(t,s,r))};r.addEventListener("mousedown",u),r.addEventListener("touchstart",u,{passive:!0}),r.addEventListener("dblclick",(function(t){var o,n,s;(o=e.getFirstColumn())&&(s=(n=i.table.columnManager.findColumnIndex(o))>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(t.stopPropagation(),s.reinitializeWidth(!0))})),o.appendChild(a),o.appendChild(r)}},ResizeColumns.prototype._checkResizability=function(t){return void 0!==t.definition.resizable?t.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(t,e,o){var i=this;function n(t){i.table.rtl?e.setWidth(i.startWidth-((void 0===t.screenX?t.touches[0].screenX:t.screenX)-i.startX)):e.setWidth(i.startWidth+((void 0===t.screenX?t.touches[0].screenX:t.screenX)-i.startX)),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(!0),!i.table.browserSlow&&e.modules.resize&&e.modules.resize.variableHeight&&e.checkCellHeights()}function s(t){i.startColumn.modules.edit&&(i.startColumn.modules.edit.blocked=!1),i.table.browserSlow&&e.modules.resize&&e.modules.resize.variableHeight&&e.checkCellHeights(),document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mousemove",n),o.removeEventListener("touchmove",n),o.removeEventListener("touchend",s),i.table.element.classList.remove("tabulator-block-select"),i.table.options.persistence&&i.table.modExists("persistence",!0)&&i.table.modules.persistence.config.columns&&i.table.modules.persistence.save("columns"),i.table.options.columnResized.call(i.table,e.getComponent())}i.table.element.classList.add("tabulator-block-select"),t.stopPropagation(),i.startColumn.modules.edit&&(i.startColumn.modules.edit.blocked=!0),i.startX=void 0===t.screenX?t.touches[0].screenX:t.screenX,i.startWidth=e.getWidth(),document.body.addEventListener("mousemove",n),document.body.addEventListener("mouseup",s),o.addEventListener("touchmove",n,{passive:!0}),o.addEventListener("touchend",s)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns);var ResizeRows=function(t){this.table=t,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(t){var e=this,o=t.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",(function(t){t.stopPropagation()}));var s=function(o){e.startRow=t,e._mouseDown(o,t,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",(function(t){t.stopPropagation()}));var a=function(o){var i=e.table.rowManager.prevDisplayRow(t);i&&(e.startRow=i,e._mouseDown(o,i,n))};n.addEventListener("mousedown",a),n.addEventListener("touchstart",a,{passive:!0}),o.appendChild(i),o.appendChild(n)},ResizeRows.prototype._mouseDown=function(t,e,o){var i=this;function n(t){e.setHeight(i.startHeight+((void 0===t.screenY?t.touches[0].screenY:t.screenY)-i.startY))}function s(t){document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",n),o.removeEventListener("touchmove",n),o.removeEventListener("touchend",s),i.table.element.classList.remove("tabulator-block-select"),i.table.options.rowResized.call(this.table,e.getComponent())}i.table.element.classList.add("tabulator-block-select"),t.stopPropagation(),i.startY=void 0===t.screenY?t.touches[0].screenY:t.screenY,i.startHeight=e.getHeight(),document.body.addEventListener("mousemove",n),document.body.addEventListener("mouseup",s),o.addEventListener("touchmove",n,{passive:!0}),o.addEventListener("touchend",s)},Tabulator.prototype.registerModule("resizeRows",ResizeRows);var ResizeTable=function(t){this.table=t,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};ResizeTable.prototype.initialize=function(t){var e,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver((function(t){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var e=Math.floor(t[0].contentRect.height),n=Math.floor(t[0].contentRect.width);o.tableHeight==e&&o.tableWidth==n||(o.tableHeight=e,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())}})),this.observer.observe(i.element),e=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(e.getPropertyValue("max-height")||e.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver((function(t){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var e=Math.floor(t[0].contentRect.height),n=Math.floor(t[0].contentRect.width);o.containerHeight==e&&o.containerWidth==n||(o.containerHeight=e,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw()}})),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&(i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(t){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},Tabulator.prototype.registerModule("resizeTable",ResizeTable);var ResponsiveLayout=function(t){this.table=t,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};ResponsiveLayout.prototype.initialize=function(){var t=this,e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach((function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,e.push(o),o.visible||"collapse"!==t.mode||t.hiddenColumns.push(o))})),e=(e=e.reverse()).sort((function(t,e){return e.modules.responsive.order-t.modules.responsive.order||e.modules.responsive.index-t.modules.responsive.index})),this.columns=e,"collapse"===this.mode&&this.generateCollapsedContent();var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0;for(o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if((n=o.next()).done)break;s=n.value}var a=s;if("responsiveCollapse"==a.definition.formatter){this.collapseHandleColumn=a;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.initializeColumn=function(t){var e=t.getDefinition();t.modules.responsive={order:void 0===e.responsive?1:e.responsive,visible:!1!==e.visible}},ResponsiveLayout.prototype.initializeRow=function(t){var e;"calc"!==t.type&&((e=document.createElement("div")).classList.add("tabulator-responsive-collapse"),t.modules.responsiveLayout={element:e,open:this.collapseStartOpen},this.collapseStartOpen||(e.style.display="none"))},ResponsiveLayout.prototype.layoutRow=function(t){var e=t.getElement();t.modules.responsiveLayout&&(e.appendChild(t.modules.responsiveLayout.element),this.generateCollapsedRowContent(t))},ResponsiveLayout.prototype.updateColumnVisibility=function(t,e){t.modules.responsive&&(t.modules.responsive.visible=e,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(t){var e=this.hiddenColumns.length;t.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(t),this.generateCollapsedContent(),this.collapseHandleColumn&&!e&&this.collapseHandleColumn.show())},ResponsiveLayout.prototype.showColumn=function(t){var e;t.show(!1,!0),t.setWidth(t.getWidth()),"collapse"===this.mode&&((e=this.hiddenColumns.indexOf(t))>-1&&this.hiddenColumns.splice(e,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},ResponsiveLayout.prototype.update=function(){for(var t=!0;t;){var e="fitColumns"==this.table.modules.layout.getMode()?this.table.columnManager.getFlexBaseWidth():this.table.columnManager.getWidth(),o=(this.table.options.headerVisible?this.table.columnManager.element.clientWidth:this.table.element.clientWidth)-e;if(o<0){var i=this.columns[this.index];i?(this.hideColumn(i),this.index++):t=!1}else{var n=this.columns[this.index-1];n&&o>0&&o>=n.getWidth()?(this.showColumn(n),this.index--):t=!1}this.table.rowManager.activeRowsCount||this.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var t=this;this.table.rowManager.getDisplayRows().forEach((function(e){t.generateCollapsedRowContent(e)}))},ResponsiveLayout.prototype.generateCollapsedRowContent=function(t){var e,o;if(t.modules.responsiveLayout){for(e=t.modules.responsiveLayout.element;e.firstChild;)e.removeChild(e.firstChild);(o=this.collapseFormatter(this.generateCollapsedRowData(t)))&&e.appendChild(o)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(t){var e,o=this,i=t.getData(),n=[];return this.hiddenColumns.forEach((function(s){var a=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(e={value:!1,data:{},getValue:function(){return a},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return t.getComponent()},getColumn:function(){return s.getComponent()}},n.push({field:s.field,title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,e,s.modules.format.params)})):n.push({field:s.field,title:s.definition.title,value:a}))})),n},ResponsiveLayout.prototype.formatCollapsedData=function(t){var e=document.createElement("table");return t.forEach((function(t){var o,i=document.createElement("tr"),n=document.createElement("td"),s=document.createElement("td"),a=document.createElement("strong");n.appendChild(a),this.table.modules.localize.bind("columns|"+t.field,(function(e){a.innerText=e||t.title})),t.value instanceof Node?((o=document.createElement("div")).appendChild(t.value),s.appendChild(o)):s.innerHTML=t.value,i.appendChild(n),i.appendChild(s),e.appendChild(i)}),this),Object.keys(t).length?e:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout);var SelectRow=function(t){this.table=t,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};SelectRow.prototype.clearSelectionData=function(t){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(t){var e=this,o=t.getElement(),i=function t(){setTimeout((function(){e.selecting=!1}),50),document.body.removeEventListener("mouseup",t)};t.modules.select={selected:!1},e.table.options.selectableCheck.call(this.table,t.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),e.table.options.selectable&&"highlight"!=e.table.options.selectable&&("click"===e.table.options.selectableRangeMode?o.addEventListener("click",(function(o){if(o.shiftKey){e.table._clearSelection(),e.lastClickedRow=e.lastClickedRow||t;var i=e.table.rowManager.getDisplayRowIndex(e.lastClickedRow),n=e.table.rowManager.getDisplayRowIndex(t),s=i<=n?i:n,a=i>=n?i:n,r=e.table.rowManager.getDisplayRows().slice(0).splice(s,a-s+1);o.ctrlKey||o.metaKey?(r.forEach((function(o){o!==e.lastClickedRow&&(!0===e.table.options.selectable||e.isRowSelected(t)||e.selectedRows.length<e.table.options.selectable)&&e.toggleRow(o)})),e.lastClickedRow=t):(e.deselectRows(void 0,!0),!0!==e.table.options.selectable&&r.length>e.table.options.selectable&&(r=r.slice(0,e.table.options.selectable)),e.selectRows(r)),e.table._clearSelection()}else o.ctrlKey||o.metaKey?(e.toggleRow(t),e.lastClickedRow=t):(e.deselectRows(void 0,!0),e.selectRows(t),e.lastClickedRow=t)})):(o.addEventListener("click",(function(o){e.table.modExists("edit")&&e.table.modules.edit.getCurrentCell()||e.table._clearSelection(),e.selecting||e.toggleRow(t)})),o.addEventListener("mousedown",(function(o){if(o.shiftKey)return e.table._clearSelection(),e.selecting=!0,e.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),e.toggleRow(t),!1})),o.addEventListener("mouseenter",(function(o){e.selecting&&(e.table._clearSelection(),e.toggleRow(t),e.selectPrev[1]==t&&e.toggleRow(e.selectPrev[0]))})),o.addEventListener("mouseout",(function(o){e.selecting&&(e.table._clearSelection(),e.selectPrev.unshift(t))}))))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(t){this.table.options.selectableCheck.call(this.table,t.getComponent())&&(t.modules.select&&t.modules.select.selected?this._deselectRow(t):this._selectRow(t))},SelectRow.prototype.selectRows=function(t){var e,o=this;switch(void 0===t?"undefined":_typeof(t)){case"undefined":this.table.rowManager.rows.forEach((function(t){o._selectRow(t,!0,!0)})),this._rowSelectionChanged();break;case"string":(e=this.table.rowManager.findRow(t))?this._selectRow(e,!0,!0):this.table.rowManager.getRows(t).forEach((function(t){o._selectRow(t,!0,!0)})),this._rowSelectionChanged();break;default:Array.isArray(t)?(t.forEach((function(t){o._selectRow(t,!0,!0)})),this._rowSelectionChanged()):this._selectRow(t,!1,!0)}},SelectRow.prototype._selectRow=function(t,e,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(t);i?-1==this.selectedRows.indexOf(i)&&(i.getElement().classList.add("tabulator-selected"),i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),e||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(e)):e||console.warn("Selection Error - No such row found, ignoring selection:"+t)},SelectRow.prototype.isRowSelected=function(t){return-1!==this.selectedRows.indexOf(t)},SelectRow.prototype.deselectRows=function(t,e){var o,i=this;if(void 0===t){o=i.selectedRows.length;for(var n=0;n<o;n++)i._deselectRow(i.selectedRows[0],!0);i._rowSelectionChanged(e)}else Array.isArray(t)?(t.forEach((function(t){i._deselectRow(t,!0)})),i._rowSelectionChanged(e)):i._deselectRow(t,e)},SelectRow.prototype._deselectRow=function(t,e){var o,i=this.table.rowManager.findRow(t);i?(o=this.selectedRows.findIndex((function(t){return t==i})))>-1&&(i.getElement().classList.remove("tabulator-selected"),i.modules.select||(i.modules.select={}),i.modules.select.selected=!1,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!1),this.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!1),e||this.table.options.rowDeselected.call(this.table,i.getComponent()),this._rowSelectionChanged(e)):e||console.warn("Deselection Error - No such row found, ignoring selection:"+t)},SelectRow.prototype.getSelectedData=function(){var t=[];return this.selectedRows.forEach((function(e){t.push(e.getData())})),t},SelectRow.prototype.getSelectedRows=function(){var t=[];return this.selectedRows.forEach((function(e){t.push(e.getComponent())})),t},SelectRow.prototype._rowSelectionChanged=function(t){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),t||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},SelectRow.prototype.registerRowSelectCheckbox=function(t,e){t._row.modules.select||(t._row.modules.select={}),t._row.modules.select.checkboxEl=e},SelectRow.prototype.registerHeaderSelectCheckbox=function(t){this.headerCheckboxElement=t},SelectRow.prototype.childRowSelection=function(t,e){var o=this.table.modules.dataTree.getChildren(t,!0);if(e){var i=o,n=Array.isArray(i),s=0;for(i=n?i:i[Symbol.iterator]();;){var a;if(n){if(s>=i.length)break;a=i[s++]}else{if((s=i.next()).done)break;a=s.value}var r=a;this._selectRow(r,!0)}}else{var l=o,u=Array.isArray(l),c=0;for(l=u?l:l[Symbol.iterator]();;){var d;if(u){if(c>=l.length)break;d=l[c++]}else{if((c=l.next()).done)break;d=c.value}var h=d;this._deselectRow(h,!0)}}},Tabulator.prototype.registerModule("selectRow",SelectRow);var Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var o,i,n=this,s=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?s=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":s=t.definition.sorter}t.modules.sort={sorter:s,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&((o=t.getElement()).classList.add("tabulator-sortable"),(i=document.createElement("div")).classList.add("tabulator-col-sorter"),"object"==_typeof(this.table.options.headerSortElement)?i.appendChild(this.table.options.headerSortElement):i.innerHTML=this.table.options.headerSortElement,e.appendChild(i),t.modules.sort.element=i,o.addEventListener("click",(function(e){var o="",i=[],s=!1;if(t.modules.sort){if(t.modules.sort.tristate)o="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?((s=(i=n.getSort()).findIndex((function(e){return e.field===t.getField()})))>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:t,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(t,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}})))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=[];return this.sortList.forEach((function(e){e.column&&t.push({column:e.column.getComponent(),field:e.column.getField(),dir:e.dir})})),t},Sort.prototype.setSort=function(t,e){var o=this,i=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach((function(t){var e;(e=o.table.columnManager.findColumn(t.column))?(t.column=e,i.push(t),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)})),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),t.getField()))switch(void 0===(e=t.getFieldValue(o))?"undefined":_typeof(e)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},Sort.prototype.sort=function(t){var e=this,o=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,i=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?o.forEach((function(t,o){e.setColumnHeader(t.column,t.dir)})):(o.forEach((function(t,o){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,i.push(t)),e.setColumnHeader(t.column,t.dir)})),i.length&&e._sortItems(t,i)),e.table.options.dataSorted&&(t.forEach((function(t){n.push(t.getComponent())})),e.table.options.dataSorted.call(e.table,e.getSort(),n))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach((function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))}))},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItems=function(t,e){var o=this,i=e.length-1;t.sort((function(t,n){for(var s,a=i;a>=0;a--){var r=e[a];if(0!==(s=o._sortRow(t,n,r.column,r.dir,r.params)))break}return s}))},Sort.prototype._sortRow=function(t,e,o,i,n){var s,a,r="asc"==i?t:e,l="asc"==i?e:t;return t=void 0!==(t=o.getFieldValue(r.getData()))?t:"",e=void 0!==(e=o.getFieldValue(l.getData()))?e:"",s=r.getComponent(),a=l.getComponent(),o.modules.sort.sorter.call(this,t,e,s,a,o.getComponent(),i,n)},Sort.prototype.sorters={number:function(t,e,o,i,n,s,a){var r=a.alignEmptyValues,l=a.decimalSeparator,u=a.thousandSeparator,c=0;if(t=String(t),e=String(e),u&&(t=t.split(u).join(""),e=e.split(u).join("")),l&&(t=t.split(l).join("."),e=e.split(l).join(".")),t=parseFloat(t),e=parseFloat(e),isNaN(t))c=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;c=1}return("top"===r&&"desc"===s||"bottom"===r&&"asc"===s)&&(c*=-1),c},string:function(t,e,o,i,n,s,a){var r,l=a.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(a.locale)){case"boolean":a.locale&&(r=this.table.modules.localize.getLocale());break;case"string":r=a.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),r)}u=1}else u=e?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u},date:function(t,e,o,i,n,s,a){return a.format||(a.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,o,i,n,s,a)},time:function(t,e,o,i,n,s,a){return a.format||(a.format="HH:mm"),this.sorters.datetime.call(this,t,e,o,i,n,s,a)},datetime:function(t,e,o,i,n,s,a){var r=a.format||"DD/MM/YYYY HH:mm:ss",l=a.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,r),e=moment(e,r),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,o,i,n,s,a){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,o,i,n,s,a){var r=a.type||"length",l=a.alignEmptyValues,u=0;function c(t){switch(r){case"length":return t.length;case"sum":return t.reduce((function(t,e){return t+e}));case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce((function(t,e){return t+e}))/t.length}}if(Array.isArray(t)){if(Array.isArray(e))return(t?c(t):0)-(e?c(e):0);l=1}else l=Array.isArray(e)?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u},exists:function(t,e,o,i,n,s,a){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,o,i,n,s,a){var r,l,u,c,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=a.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if((r=String(t).toLowerCase())===(l=String(e).toLowerCase()))return 0;if(!m.test(r)||!m.test(l))return r>l?1:-1;for(r=r.match(p),l=l.match(p),d=r.length>l.length?l.length:r.length;h<d;)if((u=r[h])!==(c=l[h++]))return isFinite(u)&&isFinite(c)?("0"===u.charAt(0)&&(u="."+u),"0"===c.charAt(0)&&(c="."+c),u-c):u>c?1:-1;return r.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},Tabulator.prototype.registerModule("sort",Sort);var Validate=function(t){this.table=t,this.invalidCells=[]};Validate.prototype.initializeColumn=function(t){var e,o=this,i=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach((function(t){(e=o._extractValidator(t))&&i.push(e)})):(e=this._extractValidator(t.definition.validator))&&i.push(e),t.modules.validate=!!i.length&&i)},Validate.prototype._extractValidator=function(t){var e,o,i;switch(void 0===t?"undefined":_typeof(t)){case"string":return(i=t.indexOf(":"))>-1?(e=t.substring(0,i),o=t.substring(i+1)):e=t,this._buildValidator(e,o);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,e){var o="function"==typeof t?t:this.validators[t];return o?{type:"function"==typeof t?"function":t,func:o,params:e}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,e,o){var i=this,n=[],s=this.invalidCells.indexOf(e);return t&&t.forEach((function(t){t.func.call(i,e.getComponent(),o,t.params)||n.push({type:t.type,parameters:t.params})})),n=!n.length||n,e.modules.validate||(e.modules.validate={}),!0===n?(e.modules.validate.invalid=!1,e.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(e.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&e.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(e)),n},Validate.prototype.getInvalidCells=function(){var t=[];return this.invalidCells.forEach((function(e){t.push(e.getComponent())})),t},Validate.prototype.clearValidation=function(t){var e;t.modules.validate&&t.modules.validate.invalid&&(t.getElement().classList.remove("tabulator-validation-fail"),t.modules.validate.invalid=!1,(e=this.invalidCells.indexOf(t))>-1&&this.invalidCells.splice(e,1))},Validate.prototype.validators={integer:function(t,e,o){return""===e||null==e||"number"==typeof(e=Number(e))&&isFinite(e)&&Math.floor(e)===e},float:function(t,e,o){return""===e||null==e||"number"==typeof(e=Number(e))&&isFinite(e)&&e%1!=0},numeric:function(t,e,o){return""===e||null==e||!isNaN(e)},string:function(t,e,o){return""===e||null==e||isNaN(e)},max:function(t,e,o){return""===e||null==e||parseFloat(e)<=o},min:function(t,e,o){return""===e||null==e||parseFloat(e)>=o},starts:function(t,e,o){return""===e||null==e||String(e).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(t,e,o){return""===e||null==e||String(e).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(t,e,o){return""===e||null==e||String(e).length>=o},maxLength:function(t,e,o){return""===e||null==e||String(e).length<=o},in:function(t,e,o){return""===e||null==e||("string"==typeof o&&(o=o.split("|")),""===e||o.indexOf(e)>-1)},regex:function(t,e,o){return""===e||null==e||new RegExp(o).test(e)},unique:function(t,e,o){if(""===e||null==e)return!0;var i=!0,n=t.getData(),s=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach((function(t){var o=t.getData();o!==n&&e==s.getFieldValue(o)&&(i=!1)})),i},required:function(t,e,o){return""!==e&&null!=e}},Tabulator.prototype.registerModule("validate",Validate);export default Tabulator;
\ No newline at end of file
index 851f34e..0ceac9e 100644 (file)
@@ -1,6 +1,6 @@
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 ;(function (global, factory) {
        if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined') {
@@ -3190,31 +3190,39 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                        if (!_this10.isGroup) {
 
-                               definition = Object.assign({}, _this10.getDefinition());
+                               if (!_this10.parent.isGroup) {
 
-                               definition = Object.assign(definition, updates);
+                                       definition = Object.assign({}, _this10.getDefinition());
 
-                               _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
+                                       definition = Object.assign(definition, updates);
 
-                                       if (definition.field == _this10.field) {
+                                       _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
 
-                                               _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
-                                       }
+                                               if (definition.field == _this10.field) {
+
+                                                       _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
+                                               }
 
-                                       _this10.delete().then(function () {
+                                               _this10.delete().then(function () {
+
+                                                       resolve(column.getComponent());
+                                               }).catch(function (err) {
 
-                                               resolve(column.getComponent());
+                                                       reject(err);
+                                               });
                                        }).catch(function (err) {
 
                                                reject(err);
                                        });
-                               }).catch(function (err) {
+                               } else {
 
-                                       reject(err);
-                               });
+                                       console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns");
+
+                                       reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                               }
                        } else {
 
-                               console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                               console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns");
 
                                reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
                        }
@@ -5541,7 +5549,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                if (this.renderMode === "virtual") {
 
-                       var otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));
+                       var otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));
 
                        if (this.fixedHeight) {
 
@@ -6239,7 +6247,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                                var column = this.columns[_i7];
 
-                               if (column.visible) {
+                               if (column && column.visible) {
 
                                        var cell = row.getCell(column);
 
@@ -13053,7 +13061,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                                if (!config.method || config.method.toLowerCase() == "get") {
                                        config.method = "get";
 
-                                       url += (url.includes("?") ? "&" : "?") + this.serializeParams(params);
+                                       url += (url.includes("?") ? "&" : "?") + this.modules.ajax.serializeParams(params);
                                }
                        }
                }
@@ -13068,7 +13076,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                return new Promise(function (resolve, reject) {
 
                        //set url
-                       url = self.urlGenerator(url, config, params);
+                       url = self.urlGenerator.call(self.table, url, config, params);
 
                        //set body content if not GET request
                        if (config.method.toUpperCase() != "GET") {
@@ -14265,12 +14273,15 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                        if (row instanceof Row) {
 
+                               row.create();
+
                                config = row.modules.dataTree.children;
 
                                if (!config.index && config.children !== false) {
                                        children = _this48.getChildren(row);
 
                                        children.forEach(function (child) {
+                                               child.create();
                                                output.push(child);
                                        });
                                }
@@ -14280,14 +14291,14 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                return output;
        };
 
-       DataTree.prototype.getChildren = function (row) {
+       DataTree.prototype.getChildren = function (row, allChildren) {
                var _this49 = this;
 
                var config = row.modules.dataTree,
                    children = [],
                    output = [];
 
-               if (config.children !== false && config.open) {
+               if (config.children !== false && (config.open || allChildren)) {
                        if (!Array.isArray(config.children)) {
                                config.children = this.generateChildren(row);
                        }
@@ -14329,8 +14340,12 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                childArray.forEach(function (childData) {
                        var childRow = new Row(childData || {}, _this50.table.rowManager);
+
+                       childRow.create();
+
                        childRow.modules.dataTree.index = row.modules.dataTree.index + 1;
                        childRow.modules.dataTree.parent = row;
+
                        if (childRow.modules.dataTree.children) {
                                childRow.modules.dataTree.open = _this50.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);
                        }
@@ -15172,7 +15187,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                                rightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);
                        }
 
+                       if (this.table.options.virtualDomHoz) {
+                               leftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);
+                               rightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);
+                       }
+
                        if (cellEl.offsetLeft < leftEdge) {
+
                                this.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;
                        } else {
                                if (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {
@@ -15883,7 +15904,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                                        console.warn("unable to find matching column to create select lookup list:", field);
                                }
 
-                               return output;
+                               return Object.keys(output);
                        }
 
                        function parseItems(inputValues, curentValues) {
@@ -16161,7 +16182,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                                        success(item.value);
                                }
 
-                               initialDisplayValue = input.value;
+                               initialDisplayValue = [item.value];
                        }
 
                        function chooseItems(silent) {
@@ -16175,7 +16196,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                                        output.push(item.value);
                                });
 
-                               initialDisplayValue = input.value;
+                               initialDisplayValue = output;
 
                                success(output);
                        }
@@ -16705,6 +16726,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                        function showList() {
                                if (!listEl.parentNode) {
+
+                                       console.log("show", initialDisplayValue);
                                        while (listEl.firstChild) {
                                                listEl.removeChild(listEl.firstChild);
                                        }var offset = Tabulator.prototype.helpers.elOffset(cellEl);
@@ -18001,7 +18024,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                        //set empty value function
                        column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {
-                               return !value && value !== "0";
+                               return !value && value !== "0" && value !== 0;
                        };
 
                        filterElement = document.createElement("div");
@@ -18441,7 +18464,9 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                self.prevHeaderFilterChangeCheck = "{}";
 
                this.headerFilterColumns.forEach(function (column) {
-                       column.modules.filter.value = null;
+                       if (typeof column.modules.filter.value !== "undefined") {
+                               delete column.modules.filter.value;
+                       }
                        column.modules.filter.prevSuccess = undefined;
                        self.reloadHeaderFilter(column);
                });
@@ -18942,8 +18967,18 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                //image element
                image: function image(cell, formatterParams, onRendered) {
-                       var el = document.createElement("img");
-                       el.setAttribute("src", cell.getValue());
+                       var el = document.createElement("img"),
+                           src = cell.getValue();
+
+                       if (formatterParams.urlPrefix) {
+                               src = formatterParams.urlPrefix + cell.getValue();
+                       }
+
+                       if (formatterParams.urlSuffix) {
+                               src = src + formatterParams.urlSuffix;
+                       }
+
+                       el.setAttribute("src", src);
 
                        switch (_typeof(formatterParams.height)) {
                                case "number":
@@ -22767,8 +22802,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                var receiver = false,
                    success = false;
 
-               console.trace("drop");
-
                e.stopImmediatePropagation();
 
                switch (_typeof(this.table.options.movableRowsReceiver)) {
@@ -23287,7 +23320,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                        page = parseInt(page);
 
-                       if (page > 0 && page <= _this77.max) {
+                       if (page > 0 && page <= _this77.max || _this77.mode !== "local") {
                                _this77.page = page;
                                _this77.trigger().then(function () {
                                        resolve();
@@ -23808,7 +23841,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                }
 
                if (this.config.columns) {
-                       this.load("columns", this.table.options.columns);
+                       this.table.options.columns = this.load("columns", this.table.options.columns);
                }
        };
 
@@ -25172,11 +25205,13 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                                        };
 
                                        output.push({
+                                               field: column.field,
                                                title: column.definition.title,
                                                value: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)
                                        });
                                } else {
                                        output.push({
+                                               field: column.field,
                                                title: column.definition.title,
                                                value: value
                                        });
@@ -25188,21 +25223,32 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
        };
 
        ResponsiveLayout.prototype.formatCollapsedData = function (data) {
-               var list = document.createElement("table"),
-                   listContents = "";
+               var list = document.createElement("table");
 
                data.forEach(function (item) {
-                       var div = document.createElement("div");
+                       var row = document.createElement("tr");
+                       var titleData = document.createElement("td");
+                       var valueData = document.createElement("td");
+                       var node_content;
+
+                       var titleHighlight = document.createElement("strong");
+                       titleData.appendChild(titleHighlight);
+                       this.table.modules.localize.bind("columns|" + item.field, function (text) {
+                               titleHighlight.innerText = text || item.title;
+                       });
 
                        if (item.value instanceof Node) {
-                               div.appendChild(item.value);
-                               item.value = div.innerHTML;
+                               node_content = document.createElement("div");
+                               node_content.appendChild(item.value);
+                               valueData.appendChild(node_content);
+                       } else {
+                               valueData.innerHTML = item.value;
                        }
 
-                       listContents += "<tr><td><strong>" + item.title + "</strong></td><td>" + item.value + "</td></tr>";
-               });
-
-               list.innerHTML = listContents;
+                       row.appendChild(titleData);
+                       row.appendChild(valueData);
+                       list.appendChild(row);
+               }, this);
 
                return Object.keys(data).length ? list : "";
        };
@@ -25428,6 +25474,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                if (row) {
                        if (this.selectedRows.indexOf(row) == -1) {
+                               row.getElement().classList.add("tabulator-selected");
                                if (!row.modules.select) {
                                        row.modules.select = {};
                                }
@@ -25436,7 +25483,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                                if (row.modules.select.checkboxEl) {
                                        row.modules.select.checkboxEl.checked = true;
                                }
-                               row.getElement().classList.add("tabulator-selected");
 
                                this.selectedRows.push(row);
 
@@ -25501,6 +25547,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
                        if (index > -1) {
 
+                               row.getElement().classList.remove("tabulator-selected");
                                if (!row.modules.select) {
                                        row.modules.select = {};
                                }
@@ -25509,7 +25556,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                                if (row.modules.select.checkboxEl) {
                                        row.modules.select.checkboxEl.checked = false;
                                }
-                               row.getElement().classList.remove("tabulator-selected");
                                self.selectedRows.splice(index, 1);
 
                                if (this.table.options.dataTreeSelectPropagate) {
@@ -25582,7 +25628,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
        };
 
        SelectRow.prototype.childRowSelection = function (row, select) {
-               var children = this.table.modules.dataTree.getChildren(row);
+               var children = this.table.modules.dataTree.getChildren(row, true);
 
                if (select) {
                        for (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i19 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
@@ -25951,8 +25997,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
                a = typeof a !== "undefined" ? a : "";
                b = typeof b !== "undefined" ? b : "";
 
-               // el1Comp = el1.getComponent();
-               // el2Comp = el2.getComponent();
+               el1Comp = el1.getComponent();
+               el2Comp = el2.getComponent();
 
                return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);
        };
index 670bbaf..869d0de 100644 (file)
@@ -1,13 +1,13 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};!function(t,e){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Tabulator=e()}(this,function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=e[n];if(t.call(i,s,n,e))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=e[n];if(t.call(i,s,n,e))return s;n++}}}),String.prototype.includes||(String.prototype.includes=function(t,e){if(t instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===e&&(e=0),-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;for(var n=0|e,s=Math.max(n>=0?n:i-Math.abs(n),0);s<i;){if(function(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}(o[s],t))return!0;s++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){if(null===t||void 0===t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!==n&&void 0!==n)for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}return o},writable:!0,configurable:!0});var t=function(t){this.table=t,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};t.prototype.createHeadersElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-headers"),t},t.prototype.createHeaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-header"),this.table.options.headerVisible||t.classList.add("tabulator-header-hidden"),t},t.prototype.initialize=function(){},t.prototype.setRowManager=function(t){this.rowManager=t},t.prototype.getElement=function(){return this.element},t.prototype.getHeadersElement=function(){return this.headersElement},t.prototype.scrollHorizontal=function(t){var e=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=t,t>o?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},t.prototype.generateColumnsFromRowData=function(t){var e,o,i=[],n=this.table.options.autoColumnsDefinitions;if(t&&t.length){e=t[0];for(var s in e){var a={field:s,title:s},r=e[s];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}a.sorter=o,i.push(a)}if(n)switch(void 0===n?"undefined":_typeof(n)){case"function":this.table.options.columns=n.call(this.table,i);break;case"object":Array.isArray(n)?i.forEach(function(t){var e=n.find(function(e){return e.field===t.field});e&&Object.assign(t,e)}):i.forEach(function(t){n[t.field]&&Object.assign(t,n[t.field])}),this.table.options.columns=i}else this.table.options.columns=i;this.setColumns(this.table.options.columns)}},t.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),o.redraw(!0)},t.prototype._addColumn=function(t,e,o){var i=new n(t,this),s=i.getElement(),a=o?this.findColumnIndex(o):o;if(o&&a>-1){var r=this.columns.indexOf(o.getTopColumn()),l=o.getElement();e?(this.columns.splice(r,0,i),l.parentNode.insertBefore(s,l)):(this.columns.splice(r+1,0,i),l.parentNode.insertBefore(s,l.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},t.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},t.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},t.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},t.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)}),t.rowManager.adjustTableSize()},t.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof n)return t;if(t instanceof o)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},t.prototype.getColumnByField=function(t){return this.columnsByField[t]},t.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])}),o},t.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},t.prototype.getFirstVisibileColumn=function(t){var t=this.columnsByIndex.findIndex(function(t){return t.visible});return t>-1&&this.columnsByIndex[t]},t.prototype.getColumns=function(){return this.columns},t.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},t.prototype.getRealColumns=function(){return this.columnsByIndex},t.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},t.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},t.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},t.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},t.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},t.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},t.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},t.prototype._moveColumnInArray=function(t,e,o,i,n){var s,a=this,r=t.indexOf(e),l=[];r>-1&&(t.splice(r,1),s=t.indexOf(o),s>-1?i&&(s+=1):s=r,t.splice(s,0,e),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach(function(t){l=l.concat(a.table.modules.dataTree.getTreeChildren(t,!1,!0))}),l=l.concat(this.table.rowManager.rows),l.forEach(function(t){if(t.cells.length){var e=t.cells.splice(r,1)[0];t.cells.splice(s,0,e)}})))},t.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,s=0,a=0,r=t.getElement();return new Promise(function(l,c){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":a=-i.element.clientWidth/2;break;case"right":a=r.clientWidth-i.headersElement.clientWidth}if(!o&&(s=r.offsetLeft)>0&&s+r.offsetWidth<i.element.clientWidth)return!1;n=r.offsetLeft+a,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),l()}else console.warn("Scroll Error - Column not visible"),c("Scroll Error - Column not visible")})},t.prototype.generateCells=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){o.push(e.generateCell(t))}),o},t.prototype.getFlexBaseWidth=function(){var t=this,e=t.table.element.clientWidth,o=0;return t.rowManager.element.scrollHeight>t.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,a;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),a="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=a>s?a:s)}),o},t.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,s){var a=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(!0),"fitColumns"!=i.table.modules.layout.getMode()&&a.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(),n(a)})},t.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()},t.prototype.redraw=function(t){t&&(h.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var o=function(t){this._column=t,this.type="ColumnComponent"};o.prototype.getElement=function(){return this._column.getElement()},o.prototype.getDefinition=function(){return this._column.getDefinition()},o.prototype.getField=function(){return this._column.getField()},o.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},o.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},o.prototype.isVisible=function(){return this._column.visible},o.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},o.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},o.prototype.toggle=function(){this._column.visible?this.hide():this.show()},o.prototype.delete=function(){return this._column.delete()},o.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},o.prototype.getParentColumn=function(){return this._column.parent instanceof n&&this._column.parent.getComponent()},o.prototype._getSelf=function(){return this._column},o.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},o.prototype.getTable=function(){return this._column.table},o.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},o.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},o.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},o.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},o.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},o.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},o.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},o.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},o.prototype.getWidth=function(){return this._column.getWidth()},o.prototype.setWidth=function(t){var e;return e=!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),e},o.prototype.validate=function(){return this._column.validate()};var n=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};n.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},n.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},n.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach(function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)})},n.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},n.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},n.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},n.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},n.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},n.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},n.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},n.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},n.prototype._buildColumnHeader=function(){var t=this,e=this.definition,o=this.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(e.headerContextMenu||e.headerClickMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass){e.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(void 0===e.minWidth?this.table.options.columnMinWidth:parseInt(e.minWidth)),(e.maxWidth||this.table.options.columnMaxWidth)&&!1!==e.maxWidth&&this.setMaxWidth(void 0===e.maxWidth?this.table.options.columnMaxWidth:parseInt(e.maxWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign},n.prototype._buildColumnHeaderContent=function(){var t=(this.definition,this.table,document.createElement("div"));return t.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),t.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),t},n.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||"&nbsp;"}):n.value=e.title||"&nbsp;"}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||"&nbsp;")}):t._formatColumnHeaderTitle(i,e.title||"&nbsp;");return i},n.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,s,a,r=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),a=function(t){r.titleFormatterRendered=t},s={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,s,n,a),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},n.prototype._buildGroupHeader=function(){var t=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign,this.element.appendChild(this.groupElement)},n.prototype._getFlatData=function(t){return t[this.field]},n.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,s=0;s<n&&(o=o[i[s]],e=o,o);s++);return e},n.prototype._setFlatData=function(t,e){this.field&&(t[this.field]=e)},n.prototype._setNestedData=function(t,e){for(var o=t,i=this.fieldStructure,n=i.length,s=0;s<n;s++)if(s==n-1)o[i[s]]=e;else{if(!o[i[s]]){if(void 0===e)break;o[i[s]]={}}o=o[i[s]]}},n.prototype.attachColumn=function(t){var e=this;e.groupElement?(e.columns.push(t),e.groupElement.appendChild(t.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},n.prototype.verticalAlign=function(t,e){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:e||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===t||(this.element.style.paddingTop="bottom"===t?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach(function(e){e.verticalAlign(t)})},n.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach(function(t){t.clearVerticalAlign()})},n.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},n.prototype.getElement=function(){return this.element},n.prototype.getGroupElement=function(){return this.groupElement},n.prototype.getField=function(){return this.field},n.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},n.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},n.prototype.getColumns=function(){return this.columns},n.prototype.getCells=function(){return this.cells},n.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},n.prototype.getDefinition=function(t){var e=[];return this.isGroup&&t&&(this.columns.forEach(function(t){e.push(t.getDefinition(!0))}),this.definition.columns=e),this.definition},n.prototype.checkColumnVisibility=function(){var t=!1;this.columns.forEach(function(e){e.visible&&(t=!0)}),t?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},n.prototype.show=function(t,e){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.show()}),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},n.prototype.hide=function(t,e){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.hide()}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},n.prototype.matchChildWidths=function(){var t=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}),this.contentElement.style.maxWidth=t-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},n.prototype.removeChild=function(t){var e=this.columns.indexOf(t);e>-1&&this.columns.splice(e,1),this.columns.length||this.delete()},n.prototype.setWidth=function(t){this.widthFixed=!0,this.setWidthActual(t)},n.prototype.setWidthActual=function(t){isNaN(t)&&(t=Math.floor(this.table.element.clientWidth/100*parseInt(t))),t=Math.max(this.minWidth,t),this.maxWidth&&(t=Math.min(this.maxWidth,t)),this.width=t,this.widthStyled=t?t+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},n.prototype.checkCellHeights=function(){var t=[]
-;this.cells.forEach(function(e){e.row.heightInitialized&&(null!==e.row.getElement().offsetParent?(t.push(e.row),e.row.clearCellHeight()):e.row.heightInitialized=!1)}),t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()})},n.prototype.getWidth=function(){var t=0;return this.isGroup?this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}):t=this.width,t},n.prototype.getHeight=function(){return this.element.offsetHeight},n.prototype.setMinWidth=function(t){this.minWidth=t,this.minWidthStyled=t?t+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})},n.prototype.setMaxWidth=function(t){this.maxWidth=t,this.maxWidthStyled=t?t+"px":"",this.element.style.maxWidth=this.maxWidthStyled,this.cells.forEach(function(t){t.setMaxWidth()})},n.prototype.delete=function(){var t=this;return new Promise(function(e,o){t.isGroup&&t.columns.forEach(function(t){t.delete()}),t.table.modExists("edit")&&t.table.modules.edit.currentCell.column===t&&t.table.modules.edit.cancelEdit();for(var i=t.cells.length,n=0;n<i;n++)t.cells[0].delete();t.element.parentNode&&t.element.parentNode.removeChild(t.element),t.element=!1,t.contentElement=!1,t.titleElement=!1,t.groupElement=!1,t.parent.isGroup&&t.parent.removeChild(t),t.table.columnManager.deregisterColumn(t),t.table.options.virtualDomHoz&&t.table.vdomHoz.reinitialize(!0),e()})},n.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},n.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},n.prototype.generateCell=function(t){var e=this,o=new u(e,t);return this.cells.push(o),o},n.prototype.nextColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._nextVisibleColumn(t+1)},n.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},n.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},n.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},n.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},n.prototype.fitToData=function(){var t=this;this.widthFixed||(this.element.style.width="",t.cells.forEach(function(t){t.clearWidth()}));var e=this.element.offsetWidth;t.width&&this.widthFixed||(t.cells.forEach(function(t){var o=t.getWidth();o>e&&(e=o)}),e&&t.setWidthActual(e+1))},n.prototype.updateDefinition=function(t){var e=this;return new Promise(function(o,i){var n;e.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then(function(t){n.field==e.field&&(e.field=!1),e.delete().then(function(){o(t.getComponent())}).catch(function(t){i(t)})}).catch(function(t){i(t)}))})},n.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},n.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","maxWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],n.prototype.getComponent=function(){return this.component||(this.component=new o(this)),this.component};var s=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};s.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},s.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},s.prototype.getElement=function(){return this.element},s.prototype.getTableElement=function(){return this.tableElement},s.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},s.prototype.setColumnManager=function(t){this.columnManager=t},s.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e})},s.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof l)return t;if(t instanceof r)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.rows.find(function(e){return e.getElement()===t})||!1}return!1},s.prototype.getRowFromDataObject=function(t){return this.rows.find(function(e){return e.data===t})||!1},s.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},s.prototype.scrollToRow=function(t,e,o){var i,n=this,s=this.getDisplayRows().indexOf(t),a=t.getElement(),r=0;return new Promise(function(t,l){if(s>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=h.prototype.helpers.elOffset(a).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&h.prototype.helpers.elVisible(a)&&(r=h.prototype.helpers.elOffset(a).top-h.prototype.helpers.elOffset(n.element).top)>0&&r<n.element.clientHeight-a.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=h.prototype.helpers.elOffset(a).top-h.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(s,!0)}switch(e){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(a.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-a.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-a.offsetTop)+a.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+a.offsetHeight}t()}else console.warn("Scroll Error - Row not visible"),l("Scroll Error - Row not visible")})},s.prototype.setData=function(t,e,o){var i=this,n=this;return new Promise(function(s,a){e&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(t,!0):i.reRenderInPosition(function(){n._setDataActual(t)}):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(t),i.resetScroll(),i._setDataActual(t)),s()})},s.prototype._setDataActual=function(t,e){var o=this;o.table.options.dataLoading.call(this.table,t),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(t)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(t),t.forEach(function(t,e){if(t&&"object"===(void 0===t?"undefined":_typeof(t))){var i=new l(t,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",t)}),o.refreshActiveData(!1,!1,e),o.table.options.dataLoaded.call(this.table,t)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===t?"undefined":_typeof(t),"\nData:     ",t)},s.prototype._wipeElements=function(){this.rows.forEach(function(t){t.wipe()}),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()},s.prototype.deleteRow=function(t,e){var o=this.rows.indexOf(t),i=this.activeRows.indexOf(t);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},s.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},s.prototype.addRows=function(t,e,o){var i=this,n=this,s=0,a=[];return new Promise(function(r,l){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),s=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var s=n.addRow(t,e,o,!0);a.push(s)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),r(a)})},s.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},s.prototype.addRowActual=function(t,e,o,i){var n,s,a=t instanceof l?t:new l(t||{},this),r=this.findAddRowPos(e),c=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),r?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],r=!1):s.length&&(o=s[s.length-1],r=!(s.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(a);var u=a.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?r?u[0]!==a&&(o=u[0],this._moveRowInArray(a.getGroup().rows,a,o,!r)):u[u.length-1]!==a&&(o=u[u.length-1],this._moveRowInArray(a.getGroup().rows,a,o,!r)):this._moveRowInArray(a.getGroup().rows,a,o,!r))}return o&&(c=this.rows.indexOf(o)),o&&c>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(r?e:e+1,0,a)}),n>-1&&this.activeRows.splice(r?n:n+1,0,a),this.rows.splice(r?c:c+1,0,a)):r?(this.displayRowIterator(function(t){t.unshift(a)}),this.activeRows.unshift(a),this.rows.unshift(a)):(this.displayRowIterator(function(t){t.push(a)}),this.activeRows.push(a),this.rows.push(a)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,a.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),i||this.reRenderInPosition(),a},s.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},s.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof H&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),s=t.getGroup();n===s?this._moveRowInArray(n.rows,t,e,o):(s&&s.removeRow(t),n.insertRow(t,e,o))}},s.prototype._moveRowInArray=function(t,e,o,i){var n,s,a,r;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),s=t.indexOf(o),s>-1?i?t.splice(s+1,0,e):t.splice(s,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){a=n<s?n:s,r=s>n?s:n+1;for(var l=a;l<=r;l++)t[l]&&this.styleRow(t[l],l)}},s.prototype.clearData=function(){this.setData([])},s.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},s.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},s.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof l&&"row"==i.type?i:this.nextDisplayRow(i,e)},s.prototype.prevDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!e||!i||i instanceof l&&"row"==i.type?i:this.prevDisplayRow(i,e)},s.prototype.findRowIndex=function(t,e){var o;return!!((t=this.findRow(t))&&(o=e.indexOf(t))>-1)&&o},s.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach(function(t){"row"==t.type&&o.push(t.getData(e||"data"))}),o},s.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach(function(t){e.push(t.getComponent())}),e},s.prototype.getDataCount=function(t){return this.getRows(t).length},s.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t._setDataActual(e,!0)}).catch(function(t){})},s.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},s.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},s.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},s.prototype.refreshActiveData=function(t,e,o){var i,n=this,s=this.table,a=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||a.indexOf(t)<a.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:t,skipStage:e,renderInPosition:o}));switch(n.table.modExists("edit")&&n.table.modules.edit.cancelEdit(),t||(t="all"),s.options.selectable&&!s.options.selectablePersistence&&s.modExists("selectRow")&&s.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:s.modExists("filter")?n.setActiveRows(s.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":e?e=!1:s.modExists("sort")&&s.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&s.modules.frozenRows.isFrozen()&&(s.modules.frozenRows.getDisplayIndex()||s.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:s.options.groupBy&&s.modExists("groupRows")&&(s.modules.groupRows.getDisplayIndex()||s.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:s.options.dataTree&&s.modExists("dataTree")&&(s.modules.dataTree.getDisplayIndex()||s.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&s.modules.dataTree.setDisplayIndex(i)),s.options.pagination&&s.modExists("page")&&!o&&"local"==s.modules.page.getMode()&&s.modules.page.reset();case"page":e?e=!1:s.options.pagination&&s.modExists("page")&&(s.modules.page.getDisplayIndex()||s.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.page.getDisplayIndex(),"local"==s.modules.page.getMode()&&s.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(s.modules.page.getRows(this.getDisplayRows(i-1)),i))&&s.modules.page.setDisplayIndex(i))}h.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():("all"===t&&this.table.options.virtualDomHoz&&this.table.vdomHoz.dataChange(),n.renderTable(),s.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),s.modExists("columnCalcs")&&s.modules.columnCalcs.recalc(this.activeRows)},s.prototype.regenerateRowNumbers=function(){var t=this;this.rowNumColumn&&this.activeRows.forEach(function(e){var o=e.getCell(t.rowNumColumn);o&&o._generateContents()})},s.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},s.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},s.prototype.getNextDisplayIndex=function(){return this.displayRows.length},s.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},s.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},s.prototype.getVisibleRows=function(t){var e=this.element.scrollTop,o=this.element.clientHeight+e,i=!1,n=0,s=0,a=this.getDisplayRows();if(t){this.getDisplayRows();for(var r=this.vDomTop;r<=this.vDomBottom;r++)if(a[r])if(i){if(!(o-a[r].getElement().offsetTop>=0))break;s=r}else if(e-a[r].getElement().offsetTop>=0)n=r;else{if(i=!0,!(o-a[r].getElement().offsetTop>=0))break;s=r}}else n=this.vDomTop,s=this.vDomBottom;return a.slice(n,s+1)},s.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},s.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;case"selected":e=this.table.modules.selectRow.selectedRows;break;default:e=this.rows}return e},s.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a]){var r=e-s[a].getElement().offsetTop;if(!(!1===i||Math.abs(r)<i))break;i=r,o=a}t&&t(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),t&&t()},s.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},s.prototype.getRenderMode=function(){return this.renderMode},s.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},s.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},s.prototype.checkClassicModeGroupHeaderWidth=function(){var t=this,e=this.tableElement,o=!0;t.getDisplayRows().forEach(function(i,n){t.styleRow(i,n),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)}),e.style.minWidth=o?t.table.columnManager.getWidth()+"px":""},s.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"},s.prototype._clearVirtualDom=function(){var t=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);t.firstChild;)t.removeChild(t.firstChild);t.style.paddingTop="",t.style.paddingBottom="",t.style.minWidth="",t.style.minHeight="",t.style.display="",t.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},s.prototype.styleRow=function(t,e){var o=t.getElement();e%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},s.prototype._virtualRenderFill=function(t,e,o){var i=this,n=i.tableElement,s=i.element,a=0,r=0,l=0,c=0,u=!0,d=i.getDisplayRows();if(t=t||0,o=o||0,t){for(;n.firstChild;)n.removeChild(n.firstChild);var p=(i.displayRowsCount-t+1)*i.vDomRowHeight;p<i.height&&(t-=Math.ceil((i.height-p)/i.vDomRowHeight))<0&&(t=0),a=Math.min(Math.max(Math.floor(i.vDomWindowBuffer/i.vDomRowHeight),i.vDomWindowMinMarginRows),t),t-=a}else i._clearVirtualDom();if(i.displayRowsCount&&h.prototype.helpers.elVisible(i.element)){for(i.vDomTop=t,i.vDomBottom=t-1;(r<=i.height+i.vDomWindowBuffer||c<i.vDomWindowMinTotalRows)&&i.vDomBottom<i.displayRowsCount-1;){var m=i.vDomBottom+1,f=d[m],g=0;i.styleRow(f,m),n.appendChild(f.getElement()),f.initialize(),f.heightInitialized||f.normalizeHeight(!0),g=f.getHeight(),c<a?l+=g:r+=g,g>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*g),"group"!==f.type&&(u=!1),i.vDomBottom++,c++}t?(i.vDomTopPad=e?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-l,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-r-l,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((r+l)/c),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=l+r+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",e&&(this.scrollTop=i.vDomTopPad+l+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,s.scrollTop=this.scrollTop,n.style.minWidth=u?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},s.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},s.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],a=s.getHeight()||this.vDomRowHeight;t>=a&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=a,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=a,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),e<this.vDomMaxRenderChain&&this.vDomTop&&t>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},s.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},s.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,s=i[n],a=s.getHeight()||this.vDomRowHeight;t>=a&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=a,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=a,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),e<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&t>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},s.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},s.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},s.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},s.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=Math.floor(this.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",
-this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||e==this.element.clientHeight||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},s.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize(!0)})},s.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},s.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},s.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},s.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var a=function(t){this.table=t,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()};a.prototype.compatabilityCheck=function(){var t=this.table.options,e=!0;return"fitDataTable"==t.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),e=!1),t.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),e=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),e=!1),t.columns&&t.columns.find(function(t){return t.frozen})&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),e=!1),e||(t.virtualDomHoz=!1),e},a.prototype.initialize=function(){var t=this;this.holderEl.addEventListener("scroll",function(){var e=t.holderEl.scrollLeft;t.scrollLeft!=e&&(t.scrollLeft=e,t.scroll(e-(t.vDomScrollPosLeft+t.window)))})},a.prototype.deinitialize=function(){this.initialized=!1},a.prototype.clear=function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0},a.prototype.dataChange=function(){var t,e,o,i=!1,n=0,s=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach(function(t){!t.definition.width&&t.visible&&(i=!0)}),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,this.table.options.groupBy?(t=this.table.modules.groupRows.getGroups(!1)[0],e=t.getRows(!1)[0]):e=this.table.rowManager.getDisplayRows()[0],e)){o=e.getElement(),e.generateCells(),this.element.appendChild(o);for(var s=0;s<e.cells.length;s++){var a=e.cells[s];if(o.appendChild(a.getElement()),a.column.reinitializeWidth(),(n+=a.column.getWidth())>this.vDomScrollPosRight)break}for(o.parentNode.removeChild(o),this.fitDataColAvg=Math.floor(n/(s+1)),s;s<this.table.columnManager.columnsByIndex.length;s++)this.table.columnManager.columnsByIndex[s].setWidth(this.fitDataColAvg);this.reinitialize(!1,!0)}}else"fitColumns"===this.table.options.layout&&(this.table.modules.layout.layout(),this.table.vdomHoz.reinitialize(!1,!0))},a.prototype.fitDataLayoutOverride=function(){for(var t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()},a.prototype.reinitialize=function(t,e){var o=this,i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!t||this.initialized){this.clear(),this.scrollLeft=this.holderEl.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window;var n=0;this.table.columnManager.columnsByIndex.forEach(function(t){var e={};if(t.visible){var i=t.getWidth();e.leftPos=n,e.rightPos=n+i,n+i>o.vDomScrollPosLeft&&n<o.vDomScrollPosRight?(-1==o.leftCol&&(o.leftCol=o.columns.length,o.vDomPadLeft=n),o.rightCol=o.columns.length):-1!==o.leftCol&&(o.vDomPadRight+=i),o.columns.push(t),t.modules.vdomHoz=e,n+=i}}),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.element.style.paddingRight=this.vDomPadRight+"px",this.initialized=!0,e||t&&!this.reinitChanged(i)||this.renitializeRows(),this.holderEl.scrollLeft=this.scrollLeft}},a.prototype.reinitChanged=function(t){var e=this,o=!0;return t.cols.length!==this.columns.length||t.leftCol!==this.leftCol||t.rightCol!==this.rightCol||(t.cols.forEach(function(t,i){t!==e.columns[i]&&(o=!1)}),!o)},a.prototype.renitializeRows=function(){var t=this;this.table.rowManager.getVisibleRows().forEach(function(e){t.reinitializeRow(e,!0)})},a.prototype.scroll=function(t){this.vDomScrollPosLeft+=t,this.vDomScrollPosRight+=t,t>.8*this.holderEl.clientWidth?this.reinitialize():t>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())},a.prototype.colPositionAdjust=function(t,e,o){for(var i=t;i<e;i++){var n=this.columns[i];n.modules.vdomHoz.leftPos-=o,n.modules.vdomHoz.rightPos-=o}},a.prototype.addColRight=function(){var t,e,o,i=this.columns[this.rightCol+1];i&&i.modules.vdomHoz.leftPos<=this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),t.forEach(function(t){if("group"!==t.type){var e=t.getCell(i);t.getElement().appendChild(e.getElement()),e.cellRendered()}}),this.fitDataColAvg&&(e=i.getWidth())===this.fitDataColAvg&&(i.reinitializeWidth(),(o=e-i.getWidth())&&(i.modules.vdomHoz.rightPos-=o,this.colPositionAdjust(this.rightCol+1,this.columns.length,o))),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())},a.prototype.addColLeft=function(){var t=this.columns[this.leftCol-1];if(t&&t.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){this.table.rowManager.getVisibleRows().forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().prepend(o.getElement()),o.cellRendered()}}),this.leftCol?this.vDomPadLeft-=t.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft()}},a.prototype.removeColRight=function(t){var e,t=this.columns[this.rightCol];t&&t.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(e=this.table.rowManager.getVisibleRows(),t.modules.vdomHoz.visible=!1,e.forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}}),this.vDomPadRight+=t.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())},a.prototype.removeColLeft=function(){var t,e=this.columns[this.leftCol];e&&e.modules.vdomHoz.rightPos<this.vDomScrollPosLeft&&(t=this.table.rowManager.getVisibleRows(),t.forEach(function(t){if("group"!==t.type){var o=t.getCell(e);t.getElement().removeChild(o.getElement())}}),this.vDomPadLeft+=e.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())},a.prototype.initializeRow=function(t){if("group"!==t.type){t.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(var e=this.leftCol;e<=this.rightCol;e++){var o=this.columns[e];if(o.visible){var i=t.getCell(o);t.getElement().appendChild(i.getElement()),i.cellRendered()}}}},a.prototype.reinitializeRow=function(t,e){if("group"!==t.type&&(e||!t.modules.vdomHoz||t.modules.vdomHoz.leftCol!==this.leftCol||t.modules.vdomHoz.rightCol!==this.rightCol)){for(var o=t.getElement();o.firstChild;)o.removeChild(o.firstChild);this.initializeRow(t)}};var r=function(t){this._row=t};r.prototype.getData=function(t){return this._row.getData(t)},r.prototype.getElement=function(){return this._row.getElement()},r.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},r.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},r.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},r.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},r.prototype.delete=function(){return this._row.delete()},r.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},r.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},r.prototype.move=function(t,e){this._row.moveToRow(t,e)},r.prototype.update=function(t){return this._row.updateData(t)},r.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},r.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},r.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},r.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},r.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},r.prototype._getSelf=function(){return this._row},r.prototype.validate=function(){return this._row.validate()},r.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},r.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},r.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},r.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},r.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},r.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},r.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},r.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)},r.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},r.prototype.reformat=function(){return this._row.reinitialize()},r.prototype.getGroup=function(){return this._row.getGroup().getComponent()},r.prototype.getTable=function(){return this._row.table},r.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},r.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var l=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(t)};l.prototype.create=function(){this.created||(this.created=!0,this.generateElement())},l.prototype.createElement=function(){var t=document.createElement("div");t.classList.add("tabulator-row"),t.setAttribute("role","row"),this.element=t},l.prototype.getElement=function(){return this.create(),this.element},l.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},l.prototype.generateElement=function(){var t,e,o,i=this;this.createElement(),!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),(i.table.options.rowContextMenu||i.table.options.rowClickMenu)&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(t){i.table.options.rowMouseEnter(t,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(t){i.table.options.rowMouseLeave(t,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(t){i.table.options.rowMouseOver(t,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(t){i.table.options.rowMouseOut(t,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(t){i.table.options.rowMouseMove(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},l.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},l.prototype.initialize=function(t){var e=this;if(this.create(),!this.initialized||t){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)},l.prototype.reinitializeHeight=function(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)},l.prototype.reinitialize=function(t){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach(function(t){t.reinitialize(!0)})},l.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(t){var o=t.getHeight();o>e&&(e=o)}),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},l.prototype.setCellHeight=function(){this.cells.forEach(function(t){t.setHeight()}),this.heightInitialized=!0},l.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},l.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},l.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},l.prototype.getHeight=function(){return this.outerHeight},l.prototype.getWidth=function(){return this.element.offsetWidth},l.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},l.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},l.prototype.updateData=function(t){var e,o=this,i=this.element&&h.prototype.helpers.elVisible(this.element),n={};return new Promise(function(s,a){"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t;for(var r in e)o.data[r]=e[r];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var r in t){o.table.columnManager.getColumnsByFieldRoot(r).forEach(function(t){var n=o.getCell(t.getField());if(n){var s=t.getFieldValue(e);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}})}o.table.options.groupUpdateOnCellEdit&&o.table.options.groupBy&&o.table.modExists("groupRows")&&o.table.modules.groupRows.reassignRowToGroup(o.row),i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),i&&(o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0))),o.table.options.rowUpdated.call(o.table,o.getComponent()),o.table.options.dataChanged&&o.table.options.dataChanged.call(o.table,o.table.rowManager.getData()),s()})},l.prototype.getData=function(t){return t&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,t):this.data},l.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},l.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},l.prototype.findNextEditableCell=function(t){var e=!1;if(t<this.cells.length-1)for(var o=t+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&h.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){e=i;break}}}return e},l.prototype.findPrevEditableCell=function(t){var e=!1;if(t>0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&h.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},l.prototype.getCells=function(){return this.cells},l.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},l.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},l.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},l.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},l.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(n=t.getGroup().rows,(i=n.indexOf(t))&&(i=n[i-1])):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()})},l.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},l.prototype.detatchModules=function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)},l.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e<t;e++)this.cells[0].delete()},l.prototype.wipe=function(){if(this.detatchModules(),this.deleteCells(),this.element){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.parentNode&&this.element.parentNode.removeChild(this.element)}this.element=!1,this.modules={}},l.prototype.getGroup=function(){return this.modules.group||!1},l.prototype.getComponent=function(){return this.component||(this.component=new r(this)),this.component};var c=function(t){this._cell=t};c.prototype.getValue=function(){return this._cell.getValue()},c.prototype.getOldValue=function(){return this._cell.getOldValue()},c.prototype.getInitialValue=function(){return this._cell.initialValue},c.prototype.getElement=function(){return this._cell.getElement()},c.prototype.getRow=function(){return this._cell.row.getComponent()},c.prototype.getData=function(){return this._cell.row.getData()},c.prototype.getField=function(){return this._cell.column.getField()},c.prototype.getColumn=function(){return this._cell.column.getComponent()},c.prototype.setValue=function(t,e){void 0===e&&(e=!0),this._cell.setValue(t,e)},c.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},c.prototype.restoreInitialValue=function(){this._cell.setValueActual(this._cell.initialValue)},c.prototype.edit=function(t){return this._cell.edit(t)},c.prototype.cancelEdit=function(){this._cell.cancelEdit()},c.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},c.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},c.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},c.prototype.validate=function(){return this._cell.validate()},c.prototype.clearValidation=function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},c.prototype.nav=function(){return this._cell.nav()},c.prototype.checkHeight=function(){this._cell.checkHeight()},c.prototype.getTable=function(){return this._cell.table},c.prototype._getSelf=function(){return this._cell};var u=function(t,e){this.table=t.table,this.column=t,this.row=e,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()};u.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value},u.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},u.prototype._configureCell=function(){var t=this,e=t.column.cellEvents,o=t.element,i=this.column.getField(),n={top:"flex-start",bottom:"flex-end",middle:"center"},s={left:"flex-start",right:"flex-end",center:"center"};if(o.style.textAlign=t.column.hozAlign,t.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems=n[t.column.vertAlign]||"",t.column.hozAlign&&(o.style.justifyContent=s[t.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),t.column.definition.cssClass){t.column.definition.cssClass.split(" ").forEach(function(t){o.classList.add(t)})}"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",function(e){t._generateTooltip()}),t._bindClickEvents(e),t._bindTouchEvents(e),t._bindMouseEvents(e),t.column.modules.edit&&t.table.modules.edit.bindEditor(t),t.column.definition.rowHandle&&!1!==t.table.options.movableRows&&t.table.modExists("moveRow")&&t.table.modules.moveRow.initializeCell(t),t.column.visible||t.hide()},u.prototype._bindClickEvents=function(t){var e=this,o=e.element;(t.cellClick||e.table.options.cellClick)&&o.addEventListener("click",function(o){var i=e.getComponent();t.cellClick&&t.cellClick.call(e.table,o,i),e.table.options.cellClick&&e.table.options.cellClick.call(e.table,o,i)}),t.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",function(o){var i=e.getComponent();t.cellDblClick&&t.cellDblClick.call(e.table,o,i),e.table.options.cellDblClick&&e.table.options.cellDblClick.call(e.table,o,i)}):o.addEventListener("dblclick",function(t){if(!e.table.modExists("edit")||e.table.modules.edit.currentCell!==e){t.preventDefault();try{if(document.selection){var o=document.body.createTextRange();o.moveToElementText(e.element),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(e.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(t){}}}),(t.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",function(o){var i=e.getComponent();t.cellContext&&t.cellContext.call(e.table,o,i),e.table.options.cellContext&&e.table.options.cellContext.call(e.table,o,i)})},u.prototype._bindMouseEvents=function(t){var e=this,o=e.element;(t.cellMouseEnter||e.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",function(o){var i=e.getComponent();t.cellMouseEnter&&t.cellMouseEnter.call(e.table,o,i),e.table.options.cellMouseEnter&&e.table.options.cellMouseEnter.call(e.table,o,i)}),(t.cellMouseLeave||e.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",function(o){var i=e.getComponent();t.cellMouseLeave&&t.cellMouseLeave.call(e.table,o,i),e.table.options.cellMouseLeave&&e.table.options.cellMouseLeave.call(e.table,o,i)}),(t.cellMouseOver||e.table.options.cellMouseOver)&&o.addEventListener("mouseover",function(o){var i=e.getComponent();t.cellMouseOver&&t.cellMouseOver.call(e.table,o,i),e.table.options.cellMouseOver&&e.table.options.cellMouseOver.call(e.table,o,i)}),(t.cellMouseOut||e.table.options.cellMouseOut)&&o.addEventListener("mouseout",function(o){var i=e.getComponent();t.cellMouseOut&&t.cellMouseOut.call(e.table,o,i),e.table.options.cellMouseOut&&e.table.options.cellMouseOut.call(e.table,o,i)}),(t.cellMouseMove||e.table.options.cellMouseMove)&&o.addEventListener("mousemove",function(o){var i=e.getComponent();t.cellMouseMove&&t.cellMouseMove.call(e.table,o,i),e.table.options.cellMouseMove&&e.table.options.cellMouseMove.call(e.table,o,i)})},u.prototype._bindTouchEvents=function(t){var e,o,i,n=this,s=n.element;(t.cellTap||this.table.options.cellTap)&&(i=!1,s.addEventListener("touchstart",function(t){i=!0},{passive:!0}),s.addEventListener("touchend",function(e){if(i){var o=n.getComponent();t.cellTap&&t.cellTap.call(n.table,e,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,e,o)}i=!1})),(t.cellDblTap||this.table.options.cellDblTap)&&(e=null,s.addEventListener("touchend",function(o){if(e){clearTimeout(e),e=null;var i=n.getComponent();t.cellDblTap&&t.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else e=setTimeout(function(){clearTimeout(e),e=null},300)})),(t.cellTapHold||this.table.options.cellTapHold)&&(o=null,s.addEventListener("touchstart",function(e){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,i=!1;var s=n.getComponent();t.cellTapHold&&t.cellTapHold.call(n.table,e,s),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,e,s)},1e3)},{passive:!0}),s.addEventListener("touchend",function(t){clearTimeout(o),o=null}))},u.prototype._generateContents=function(){var t;switch(t=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value,void 0===t?"undefined":_typeof(t)){case"object":if(t instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(t)}else this.element.innerHTML="",null!=t&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",t);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=t}},u.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},u.prototype._generateTooltip=function(){var t=this.column.tooltip;t?(!0===t?t=this.value:"function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),void 0===t&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")},u.prototype.getElement=function(t){return this.loaded||(this.loaded=!0,t||this.layoutElement()),this.element},u.prototype.getValue=function(){return this.value},u.prototype.getOldValue=function(){return this.oldValue},u.prototype.setValue=function(t,e){var o,i=this.setValueProcessData(t,e);i&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))},u.prototype.setValueProcessData=function(t,e){var o=!1;return this.value!=t&&(o=!0,e&&this.column.modules.mutate&&(t=this.table.modules.mutator.transformCell(this,t))),this.setValueActual(t),
-o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},u.prototype.setValueActual=function(t){this.oldValue=this.value,this.value=t,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,t),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()},u.prototype.layoutElement=function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},u.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},u.prototype.clearWidth=function(){this.width="",this.element.style.width=""},u.prototype.getWidth=function(){return this.width||this.element.offsetWidth},u.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},u.prototype.setMaxWidth=function(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled},u.prototype.checkHeight=function(){this.row.reinitializeHeight()},u.prototype.clearHeight=function(){this.element.style.height="",this.height=null},u.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},u.prototype.getHeight=function(){return this.height||this.element.offsetHeight},u.prototype.show=function(){this.element.style.display=this.column.vertAlign?"inline-flex":""},u.prototype.hide=function(){this.element.style.display="none"},u.prototype.edit=function(t){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,t)},u.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var t=this.table.modules.edit.getCurrentCell();t&&t._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},u.prototype.validate=function(){if(this.column.modules.validate&&this.table.modExists("validate",!0)){return!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}return!0},u.prototype.delete=function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},u.prototype.nav=function(){var t=this,e=!1,o=this.row.getCellIndex(this);return{next:function(){var e,o=this.right();return!!o||!(!(e=t.table.rowManager.nextDisplayRow(t.row,!0))||!(o=e.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var e,o=this.left();return!!o||!(!(e=t.table.rowManager.prevDisplayRow(t.row,!0))||!(o=e.findPrevEditableCell(e.cells.length)))&&(o.edit(),!0)},left:function(){return!!(e=t.row.findPrevEditableCell(o))&&(e.edit(),!0)},right:function(){return!!(e=t.row.findNextEditableCell(o))&&(e.edit(),!0)},up:function(){var e=t.table.rowManager.prevDisplayRow(t.row,!0);e&&e.cells[o].edit()},down:function(){var e=t.table.rowManager.nextDisplayRow(t.row,!0);e&&e.cells[o].edit()}}},u.prototype.getIndex=function(){this.row.getCellIndex(this)},u.prototype.getComponent=function(){return this.component||(this.component=new c(this)),this.component};var d=function(t){this.table=t,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};d.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-footer"),t},d.prototype._initialize=function(t){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},d.prototype.getElement=function(){return this.element},d.prototype.append=function(t,e){this.activate(e),this.element.appendChild(t),this.table.rowManager.adjustTableSize()},d.prototype.prepend=function(t,e){this.activate(e),this.element.insertBefore(t,this.element.firstChild),this.table.rowManager.adjustTableSize()},d.prototype.remove=function(t){t.parentNode.removeChild(t),this.deactivate()},d.prototype.deactivate=function(t){this.element.firstChild&&!t||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},d.prototype.activate=function(t){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),t&&this.links.push(t)},d.prototype.redraw=function(){this.links.forEach(function(t){t.footerRedraw()})};var h=function t(e,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(e)&&(this.initializeOptions(o||{}),this._create()),t.prototype.comms.register(this)};h.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnMaxWidth:!1,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"<div class='tabulator-arrow'></div>",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(t,e){return e},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(t,e){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:!1,dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},h.prototype.initializeOptions=function(t){if(!1!==t.invalidOptionWarnings)for(var e in t)void 0===this.defaultOptions[e]&&console.warn("Invalid table constructor option:",e);for(var e in this.defaultOptions)e in t?this.options[e]=t[e]:Array.isArray(this.defaultOptions[e])?this.options[e]=Object.assign([],this.defaultOptions[e]):"object"===_typeof(this.defaultOptions[e])&&null!==this.defaultOptions[e]?this.options[e]=Object.assign({},this.defaultOptions[e]):this.options[e]=this.defaultOptions[e]},h.prototype.initializeElement=function(t){return"undefined"!=typeof HTMLElement&&t instanceof HTMLElement?(this.element=t,!0):"string"==typeof t?(this.element=document.querySelector(t),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",t),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",t),!1)},h.prototype.rtlCheck=function(){var t=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==t.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}},h.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.dataEdited&&(console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"),this.options.dataChanged=this.options.dataEdited),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},h.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},h.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new t(this),this.rowManager=new s(this),this.footerManager=new d(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new a(this)),this._buildElement(),this._loadInitialData()},h.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},h.prototype._buildElement=function(){var t=this,e=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",e.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",e.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",e.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),o.localize.initialize(),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(var n in i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var s=document.createElement("div");s.classList.add("tabulator-placeholder");var a=document.createElement("span");a.innerHTML=i.placeholder,s.appendChild(a),i.placeholder=s}if(e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(r=o.persistence.load("sort"))&&i.initialSort&&(r=i.initialSort):i.initialSort&&(r=i.initialSort),o.sort.setSort(r)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var l=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(l=o.persistence.load("filter"))&&i.initialFilter&&(l=i.initialFilter):i.initialFilter&&(l=i.initialFilter),o.filter.setFilter(l)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach(function(e){var i=t.columnManager.findColumn(e.field);if(!i)return console.warn("Column Filter Error - No matching column found:",e.field),!1;o.filter.setHeaderFilterValue(i,e.value)}),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},h.prototype._loadInitialData=function(){var t=this;if(t.options.pagination&&t.modExists("page"))if(t.modules.page.reset(!0,!0),"local"==t.options.pagination){if(t.options.data.length)t.rowManager.setData(t.options.data,!1,!0);else{if((t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax"))return void t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)});t.rowManager.setData(t.options.data,!1,!0)}t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}else t.options.ajaxURL?t.modules.page.setPage(t.options.paginationInitialPage).then(function(){}).catch(function(){}):t.rowManager.setData([],!1,!0);else t.options.data.length?t.rowManager.setData(t.options.data):(t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax")?t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){}):t.rowManager.setData(t.options.data,!1,!0)},h.prototype.destroy=function(){var t=this.element;for(h.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach(function(t){t.wipe()}),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();t.firstChild;)t.removeChild(t.firstChild);t.classList.remove("tabulator")},h.prototype._detectBrowser=function(){var t=navigator.userAgent||navigator.vendor||window.opera;t.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},h.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},h.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},h.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",function(t){var s,a=n.files[0],r=new FileReader;r.readAsText(a),r.onload=function(t){try{s=JSON.parse(r.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e.setData(s).then(function(t){o(t)}).catch(function(t){o(t)})},r.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},h.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},h.prototype._setData=function(t,e,o,i,n){var s=this;return"string"!=typeof t?t?s.rowManager.setData(t,i,n):s.modExists("ajax")&&(s.modules.ajax.getUrl||s.options.ajaxURLGenerator)?"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n):s.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?s.rowManager.setData(JSON.parse(t),i,n):s.modExists("ajax",!0)?(e&&s.modules.ajax.setParams(e),o&&s.modules.ajax.setConfig(o),s.modules.ajax.setUrl(t),"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n)):void 0},h.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},h.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},h.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},h.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},h.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},h.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},h.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},h.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},h.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},h.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},h.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},h.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(s,a){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||s(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))})},h.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},h.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},h.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){function n(){++a==t.length&&r&&(s.rowManager.reRenderInPosition(),o())}var s=e,a=0,r=0,l=[];Array.isArray(t)||(t=[t]),t.forEach(function(t){var o=e.rowManager.findRow(t,!0);o?l.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),n())}),l.sort(function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1}),l.forEach(function(t){t.delete().then(function(){r++,n()}).catch(function(t){n(),i(t)})})})},h.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,s){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},h.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(t){n(t)}):s=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},h.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then(function(){i(s.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))})},h.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,s){var a=i.rowManager.findRow(t);a?i.rowManager.scrollToRow(a,e,o).then(function(){n()}).catch(function(t){s(t)}):(console.warn("Scroll Error - No matching row found:",t),s("Scroll Error - No matching row found"))})},h.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},h.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},h.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},h.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},h.prototype.setColumns=function(t){this.columnManager.setColumns(t)},h.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},h.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},h.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},h.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},h.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},h.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},h.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},h.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},h.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,s){var a=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,a).then(function(t){n(t.getComponent())}).catch(function(t){s(t)})})},h.prototype.deleteColumn=function(t){var e=this;return new Promise(function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Column Delete Error - No matching column found:",t),i())})},h.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise(function(i,n){var s=o.columnManager.findColumn(t);s?s.updateDefinition(e).then(function(t){i(t)}).catch(function(t){n(t)}):(console.warn("Column Update Error - No matching column found:",t),n())})},
-h.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},h.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,s){var a=i.columnManager.findColumn(t);a?i.columnManager.scrollToColumn(a,e,o).then(function(){n()}).catch(function(t){s(t)}):(console.warn("Scroll Error - No matching column found:",t),s("Scroll Error - No matching column found"))})},h.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},h.prototype.getLocale=function(){return this.modules.localize.getLocale()},h.prototype.getLang=function(t){return this.modules.localize.getLang(t)},h.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},h.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},h.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},h.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},h.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},h.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},h.prototype.refreshFilter=function(){this.modExists("filter",!0)&&this.rowManager.filterRefresh()},h.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},h.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},h.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},h.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},h.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},h.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},h.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},h.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},h.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},h.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},h.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},h.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},h.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},h.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},h.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},h.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.validate.clearValidation(t._getSelf())}))},h.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach(function(t){var o=t.validate();!0!==o&&(e=e.concat(o))}),!e.length||e},h.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},h.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise(function(t,e){e()})},h.prototype.setPageToRow=function(t){var e=this;return new Promise(function(o,i){e.options.pagination&&e.modExists("page")?(t=e.rowManager.findRow(t),t?e.modules.page.setPageToRow(t).then(function(){o()}).catch(function(){i()}):i()):i()})},h.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then(function(){}).catch(function(){})},h.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},h.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},h.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},h.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},h.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},h.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},h.prototype.setGroupValues=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},h.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},h.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},h.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},h.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},h.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},h.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.edit.clearEdited(t._getSelf())}))},h.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},h.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},h.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},h.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},h.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},h.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},h.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},h.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},h.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},h.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},h.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},h.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},h.prototype.clearHistory=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.clear()},h.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},h.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},h.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},h.prototype.moduleBindings={},h.prototype.extendModule=function(t,e,o){if(h.prototype.moduleBindings[t]){var i=h.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},h.prototype.registerModule=function(t,e){h.prototype.moduleBindings[t]=e},h.prototype.bindModules=function(){this.modules={};for(var t in h.prototype.moduleBindings)this.modules[t]=new h.prototype.moduleBindings[t](this)},h.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},h.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Object.assign(Array.isArray(t)?[]:{},t);for(var o in t)null!=t[o]&&"object"===_typeof(t[o])&&(t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]));return e}},h.prototype.comms={tables:[],register:function(t){h.prototype.comms.tables.push(t)},deregister:function(t){var e=h.prototype.comms.tables.indexOf(t);e>-1&&h.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if(o=document.querySelectorAll(t),o.length)for(var s=0;s<o.length;s++)(i=h.prototype.comms.matchElement(o[s]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&t instanceof HTMLElement||t instanceof h?(i=h.prototype.comms.matchElement(t))&&n.push(i):Array.isArray(t)?t.forEach(function(t){n=n.concat(h.prototype.comms.lookupTable(t))}):e||console.warn("Table Connection Error - Invalid Selector",t);return n},matchElement:function(t){return h.prototype.comms.tables.find(function(e){return t instanceof h?e===t:e.element===t})}},h.prototype.findTable=function(t){var e=h.prototype.comms.lookupTable(t,!0);return!(Array.isArray(e)&&!e.length)&&e};var p=function(t){this.table=t,this.mode=null};p.prototype.initialize=function(t){this.modes[t]?this.mode=t:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+t),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},p.prototype.getMode=function(){return this.mode},p.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex),0===this.mode.indexOf("fitData")&&this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},p.prototype.modes={fitData:function(t){this.table.options.virtualDomHoz?this.table.vdomHoz.fitDataLayoutOverride():t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(t){var e=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,s=!1;t.forEach(function(t,i){t.widthFixed||t.reinitializeWidth(),(e.table.options.responsiveLayout?t.modules.responsive.visible:t.visible)&&(s=t),t.visible&&(o+=t.getWidth())}),s?(n=i-o+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){function e(t){return"string"==typeof t?t.indexOf("%")>-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,s){function a(t){return n*(t.column.definition.widthGrow||1)}function l(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var c=[],u=0,d=0,h=0,p=r,m=0,f=0,g=[];return t.forEach(function(t,e){var o=s?l(t):a(t);t.column.minWidth>=o?c.push(t):t.column.maxWidth&&t.column.maxWidth<o?(t.width=t.column.maxWidth,i-=t.column.maxWidth,(p-=s?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)&&(n=Math.floor(i/p))):(g.push(t),f+=s?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),c.length?(c.forEach(function(t){u+=s?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),d=i-u,h=f?Math.floor(d/f):d,m=d-h*f,m+=o(g,d,h,s)):(m=f?i-Math.floor(i/f)*f:i,g.forEach(function(t){t.width=s?l(t):a(t)})),m}var i=this,n=i.table.element.clientWidth,s=0,a=0,r=0,l=0,c=[],u=[],d=0,h=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),s+=n>i?n:i,t.definition.widthShrink&&(u.push({column:t,width:n>i?n:i}),d+=t.definition.widthShrink)):(c.push({column:t,width:0}),r+=t.definition.widthGrow||1))}),a=n-s,l=Math.floor(a/r);var p=o(c,a,l,!1);c.length&&p>0&&(c[c.length-1].width+=+p),c.forEach(function(t){a-=t.width}),h=Math.abs(p)+a,h>0&&d&&(p=o(u,h,Math.floor(h/d),!0)),u.length&&(u[u.length-1].width-=p),c.forEach(function(t){t.column.setWidth(t.width)}),u.forEach(function(t){t.column.setWidth(t.width)})}},h.prototype.registerModule("layout",p);var m=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={},this.langList={}};m.prototype.initialize=function(){this.langList=h.prototype.helpers.deepClone(this.langs)},m.prototype.setHeaderFilterPlaceholder=function(t){this.langList.default.headerFilters.default=t},m.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langList.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},m.prototype.installLang=function(t,e){this.langList[t]?this._setLangProp(this.langList[t],e):this.langList[t]=e},m.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},m.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langList[t]){var i=t.split("-")[0];o.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=h.prototype.helpers.deepClone(o.langList.default||{}),"default"!=t&&e(o.langList[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},m.prototype.getLocale=function(t){return self.locale},m.prototype.getLang=function(t){return t?this.langList[t]:this.lang},m.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},m.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},m.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},m.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},m.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},h.prototype.registerModule("localize",m);var f=function(t){this.table=t};f.prototype.getConnections=function(t){var e,o=this,i=[];return e=h.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},f.prototype.send=function(t,e,o,i){var n=this,s=this.getConnections(t);s.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!s.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},f.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},h.prototype.registerModule("comms",f);var g=function(t){this.table=t,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};g.prototype.initializeColumn=function(t){var e=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,a="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));t.definition[a]&&(s=e.lookupAccessor(t.definition[a]))&&(o=!0,i[a]={accessor:s,params:t.definition[a+"Params"]||{}})}),o&&(t.modules.accessor=i)},g.prototype.lookupAccessor=function(t){var e=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.accessors[t]?e=this.accessors[t]:console.warn("Accessor Error - No such accessor found, ignoring: ",t);break;case"function":e=t}return e},g.prototype.transformRow=function(t,e){var o="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),i=t.getComponent(),n=h.prototype.helpers.deepClone(t.data||{});return this.table.columnManager.traverse(function(t){var s,a,r,l;t.modules.accessor&&(a=t.modules.accessor[o]||t.modules.accessor.accessor||!1)&&"undefined"!=(s=t.getFieldValue(n))&&(l=t.getComponent(),r="function"==typeof a.params?a.params(s,n,e,l,i):a.params,t.setFieldValue(n,a.accessor(s,n,e,r,l,i)))}),n},g.prototype.accessors={},h.prototype.registerModule("accessor",g);var b=function(t){this.table=t,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};b.prototype.initialize=function(){var t;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(t=document.createElement("template"),t.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=t.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(t=document.createElement("template"),t.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=t.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},b.prototype.createLoaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-loader"),t},b.prototype.createMsgElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-loader-msg"),t.setAttribute("role","alert"),t},b.prototype.setParams=function(t,e){if(e){this.params=this.params||{};for(var o in t)this.params[o]=t[o]}else this.params=t},b.prototype.getParams=function(){return this.params||{}},b.prototype.setConfig=function(t){if(this._loadDefaultConfig(),"string"==typeof t)this.config.method=t;else for(var e in t)this.config[e]=t[e]},b.prototype._loadDefaultConfig=function(t){var e=this;if(!e.config||t){e.config={};for(var o in e.defaultConfig)e.config[o]=e.defaultConfig[o]}},b.prototype.setUrl=function(t){this.url=t},b.prototype.getUrl=function(){return this.url},b.prototype.loadData=function(t,e){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(t,e)},b.prototype.nextPage=function(t){var e;this.loading||(e=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,t<e&&this.table.modules.page.nextPage().then(function(){}).catch(function(){}))},b.prototype.blockActiveRequest=function(){this.requestOrder++},b.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},b.prototype._loadDataStandard=function(t,e){var o=this;return new Promise(function(i,n){o.sendRequest(t).then(function(s){o.table.rowManager.setData(s,t,e).then(function(){i()}).catch(function(t){n(t)})}).catch(function(t){n(t)})})},b.prototype.generateParamsList=function(t,e){var o=this,i=[];if(e=e||"",Array.isArray(t))t.forEach(function(t,n){i=i.concat(o.generateParamsList(t,e?e+"["+n+"]":n))});else if("object"===(void 0===t?"undefined":_typeof(t)))for(var n in t)i=i.concat(o.generateParamsList(t[n],e?e+"["+n+"]":n));else i.push({key:e,value:t});return i},b.prototype.serializeParams=function(t){var e=this.generateParamsList(t),o=[];return e.forEach(function(t){o.push(encodeURIComponent(t.key)+"="+encodeURIComponent(t.value))}),o.join("&")},b.prototype.sendRequest=function(t){var e,o=this,i=this,n=i.url;return i.requestOrder++,e=i.requestOrder,i._loadDefaultConfig(),new Promise(function(s,a){!1!==i.table.options.ajaxRequesting.call(o.table,i.url,i.params)?(i.loading=!0,t||i.showLoader(),o.loaderPromise(n,i.config,i.params).then(function(t){e===i.requestOrder?(i.table.options.ajaxResponse&&(t=i.table.options.ajaxResponse.call(i.table,i.url,i.params,t)),s(t),i.hideLoader(),i.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")}).catch(function(t){console.error("Ajax Load Error: ",t),i.table.options.ajaxError.call(i.table,t),i.showError(),setTimeout(function(){i.hideLoader()},3e3),i.loading=!1,a(t)})):a()})},b.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},b.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},b.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},b.prototype.defaultConfig={method:"GET"},b.prototype.defaultURLGenerator=function(t,e,o){return t&&o&&Object.keys(o).length&&(e.method&&"get"!=e.method.toLowerCase()||(e.method="get",t+=(t.includes("?")?"&":"?")+this.serializeParams(o))),t},b.prototype.defaultLoaderPromise=function(t,e,o){var i,n=this;return new Promise(function(s,a){if(t=n.urlGenerator(t,e,o),"GET"!=e.method.toUpperCase())if(i="object"===_typeof(n.table.options.ajaxContentType)?n.table.options.ajaxContentType:n.contentTypeFormatters[n.table.options.ajaxContentType]){for(var r in i.headers)e.headers||(e.headers={}),void 0===e.headers[r]&&(e.headers[r]=i.headers[r]);e.body=i.body.call(n,t,e,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",n.table.options.ajaxContentType);t?(void 0===e.headers&&(e.headers={}),void 0===e.headers.Accept&&(e.headers.Accept="application/json"),void 0===e.headers["X-Requested-With"]&&(e.headers["X-Requested-With"]="XMLHttpRequest"),void 0===e.mode&&(e.mode="cors"),"cors"==e.mode?(void 0===e.headers["Access-Control-Allow-Origin"]&&(e.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===e.credentials&&(e.credentials="same-origin")):void 0===e.credentials&&(e.credentials="include"),fetch(t,e).then(function(t){t.ok?t.json().then(function(t){s(t)}).catch(function(t){a(t),console.warn("Ajax Load Error - Invalid JSON returned",t)}):(console.error("Ajax Load Error - Connection Error: "+t.status,t.statusText),a(t))}).catch(function(t){console.error("Ajax Load Error - Connection Error: ",t),a(t)})):(console.warn("Ajax Load Error - No URL Set"),s([]))})},b.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(t,e,o){return JSON.stringify(o)}},form:{headers:{},body:function(t,e,o){var i=this.generateParamsList(o),n=new FormData;return i.forEach(function(t){n.append(t.key,t.value)}),n}}},h.prototype.registerModule("ajax",b);var v=function(t){this._row=t};v.prototype.getData=function(t){return this._row.getData(t)},v.prototype.getElement=function(){return this._row.getElement()},v.prototype.getTable=function(){return this._row.table},v.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},v.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},v.prototype._getSelf=function(){return this._row};var y=function(t){this.table=t,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};y.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},y.prototype.initialize=function(){this.genColumn=new n({field:"value"},this)},y.prototype.registerColumnField=function(){},y.prototype.initializeColumn=function(t){var e=t.definition,o={topCalcParams:e.topCalcParams||{},botCalcParams:e.bottomCalcParams||{}};if(e.topCalc){switch(_typeof(e.topCalc)){case"string":this.calculations[e.topCalc]?o.topCalc=this.calculations[e.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",e.topCalc);break;case"function":o.topCalc=e.topCalc}o.topCalc&&(t.modules.columnCalcs=o,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(e.bottomCalc){switch(_typeof(e.bottomCalc)){case"string":this.calculations[e.bottomCalc]?o.botCalc=this.calculations[e.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",e.bottomCalc);break;case"function":o.botCalc=e.bottomCalc}o.botCalc&&(t.modules.columnCalcs=o,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},y.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&this.table.rowManager.adjustTableSize()},y.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},y.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},y.prototype.scrollHorizontal=function(t){this.botInitialized&&this.botRow&&(this.botRow.getElement().style.marginLeft=-t+"px")},y.prototype.recalc=function(t){var e;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),e=this.generateRow("top",this.rowsToData(t)),this.topRow=e;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(e.getElement()),e.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),e=this.generateRow("bottom",this.rowsToData(t)),this.botRow=e;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(e.getElement()),e.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},y.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},y.prototype.recalcAll=function(){var t=this;if((this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs)){table.modules.groupRows.getChildGroups().forEach(function(e){t.recalcGroup(e)})}},y.prototype.recalcGroup=function(t){var e,o;t&&t.calcs&&(t.calcs.bottom&&(e=this.rowsToData(t.rows),
-o=this.generateRowData("bottom",e),t.calcs.bottom.updateData(o),t.calcs.bottom.reinitialize()),t.calcs.top&&(e=this.rowsToData(t.rows),o=this.generateRowData("top",e),t.calcs.top.updateData(o),t.calcs.top.reinitialize()))},y.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},y.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},y.prototype.rowsToData=function(t){var e=this,o=[];return t.forEach(function(t){if(o.push(t.getData()),e.table.options.dataTree&&e.table.options.dataTreeChildColumnCalcs&&t.modules.dataTree.open){var i=e.rowsToData(e.table.modules.dataTree.getFilteredTreeChildren(t));o=o.concat(i)}}),o},y.prototype.generateRow=function(t,e){var o,i=this,n=this.generateRowData(t,e);return i.table.modExists("mutator")&&i.table.modules.mutator.disable(),o=new l(n,this,"calc"),i.table.modExists("mutator")&&i.table.modules.mutator.enable(),o.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),o.component=!1,o.getComponent=function(){return this.component||(this.component=new v(this)),this.component},o.generateCells=function(){var e=[];i.table.columnManager.columnsByIndex.forEach(function(n){i.genColumn.setField(n.getField()),i.genColumn.hozAlign=n.hozAlign,n.definition[t+"CalcFormatter"]&&i.table.modExists("format")?i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter(n.definition[t+"CalcFormatter"]),params:n.definition[t+"CalcFormatterParams"]||{}}:i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter("plaintext"),params:{}},i.genColumn.definition.cssClass=n.definition.cssClass;var s=new u(i.genColumn,o);s.getElement(),s.column=n,s.setWidth(),n.cells.push(s),e.push(s),n.visible||s.hide()}),this.cells=e},o},y.prototype.generateRowData=function(t,e){var o,i,n={},s="top"==t?this.topCalcs:this.botCalcs,a="top"==t?"topCalc":"botCalc";return s.forEach(function(t){var s=[];t.modules.columnCalcs&&t.modules.columnCalcs[a]&&(e.forEach(function(e){s.push(t.getFieldValue(e))}),i=a+"Params",o="function"==typeof t.modules.columnCalcs[i]?t.modules.columnCalcs[i](s,e):t.modules.columnCalcs[i],t.setFieldValue(n,t.modules.columnCalcs[a](s,e,o)))}),n},y.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},y.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},y.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},y.prototype.getResults=function(){var t,e=this,o={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(function(t){o[t.getKey()]=e.getGroupResults(t)})):o={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},o},y.prototype.getGroupResults=function(t){var e=this,o=t._getSelf(),i=t.getSubGroups(),n={};return i.forEach(function(t){n[t.getKey()]=e.getGroupResults(t)}),{top:o.calcs.top?o.calcs.top.getData():{},bottom:o.calcs.bottom?o.calcs.bottom.getData():{},groups:n}},y.prototype.calculations={avg:function(t,e,o){var i=0,n=void 0!==o.precision?o.precision:2;return t.length&&(i=t.reduce(function(t,e){return Number(t)+Number(e)}),i/=t.length,i=!1!==n?i.toFixed(n):i),parseFloat(i).toString()},max:function(t,e,o){var i=null,n=void 0!==o.precision&&o.precision;return t.forEach(function(t){((t=Number(t))>i||null===i)&&(i=t)}),null!==i?!1!==n?i.toFixed(n):i:""},min:function(t,e,o){var i=null,n=void 0!==o.precision&&o.precision;return t.forEach(function(t){((t=Number(t))<i||null===i)&&(i=t)}),null!==i?!1!==n?i.toFixed(n):i:""},sum:function(t,e,o){var i=0,n=void 0!==o.precision&&o.precision;return t.length&&t.forEach(function(t){t=Number(t),i+=isNaN(t)?0:Number(t)}),!1!==n?i.toFixed(n):i},concat:function(t,e,o){var i=0;return t.length&&(i=t.reduce(function(t,e){return String(t)+String(e)})),i},count:function(t,e,o){var i=0;return t.length&&t.forEach(function(t){t&&i++}),i}},h.prototype.registerModule("columnCalcs",y);var w=function(t){this.table=t,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};w.prototype.initialize=function(){var t=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",function(e){var o,i,n;if(!t.blocked){if(e.preventDefault(),t.customSelection)o=t.customSelection,t.table.options.clipboardCopyFormatter&&(o=t.table.options.clipboardCopyFormatter("plain",o));else{var n=t.table.modules.export.generateExportList(t.table.options.clipboardCopyConfig,t.table.options.clipboardCopyStyled,t.rowRange,"clipboard");i=t.table.modules.export.genereateHTMLTable(n),o=i?t.generatePlainContent(n):"",t.table.options.clipboardCopyFormatter&&(o=t.table.options.clipboardCopyFormatter("plain",o),i=t.table.options.clipboardCopyFormatter("html",i))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",o):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",o),i&&e.clipboardData.setData("text/html",i)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",o),i&&e.originalEvent.clipboardData.setData("text/html",i)),t.table.options.clipboardCopied.call(t.table,o,i),t.reset()}}),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",function(e){t.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},w.prototype.reset=function(){this.blocked=!0,this.customSelection=!1},w.prototype.generatePlainContent=function(t){var e=[];return t.forEach(function(t){var o=[];t.columns.forEach(function(e){var i="";if(e)if("group"===t.type&&(e.value=e.component.getKey()),null===e.value)i="";else switch(_typeof(e.value)){case"object":i=JSON.stringify(e.value);break;case"undefined":i="";break;default:i=e.value}o.push(i)}),e.push(o.join("\t"))}),e.join("\n")},w.prototype.copy=function(t,e){var t,o,i;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=t||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?(t=document.createRange(),t.selectNodeContents(this.table.element),o=window.getSelection(),o.toString()&&e&&(this.customSelection=o.toString()),o.removeAllRanges(),o.addRange(t)):void 0!==document.selection&&void 0!==document.body.createTextRange&&(i=document.body.createTextRange(),i.moveToElementText(this.table.element),i.select()),document.execCommand("copy"),o&&o.removeAllRanges())},w.prototype.setPasteAction=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteAction=this.pasteActions[t],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",t);break;case"function":this.pasteAction=t}},w.prototype.setPasteParser=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteParser=this.pasteParsers[t],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",t);break;case"function":this.pasteParser=t}},w.prototype.paste=function(t){var e,o,i;this.checkPaseOrigin(t)&&(e=this.getPasteData(t),o=this.pasteParser.call(this,e),o?(t.preventDefault(),this.table.modExists("mutator")&&(o=this.mutateData(o)),i=this.pasteAction.call(this,o),this.table.options.clipboardPasted.call(this.table,e,o,i)):this.table.options.clipboardPasteError.call(this.table,e))},w.prototype.mutateData=function(t){var e=this,o=[];return Array.isArray(t)?t.forEach(function(t){o.push(e.table.modules.mutator.transformRow(t,"clipboard"))}):o=t,o},w.prototype.checkPaseOrigin=function(t){var e=!0;return("DIV"!=t.target.tagName||this.table.modules.edit.currentCell)&&(e=!1),e},w.prototype.getPasteData=function(t){var e;return window.clipboardData&&window.clipboardData.getData?e=window.clipboardData.getData("Text"):t.clipboardData&&t.clipboardData.getData?e=t.clipboardData.getData("text/plain"):t.originalEvent&&t.originalEvent.clipboardData.getData&&(e=t.originalEvent.clipboardData.getData("text/plain")),e},w.prototype.pasteParsers={table:function(t){var e=[],o=!0,i=this.table.columnManager.columns,n=[],s=[];return t=t.split("\n"),t.forEach(function(t){e.push(t.split("\t"))}),!(!e.length||1===e.length&&e[0].length<2)&&(!0,e[0].forEach(function(t){var e=i.find(function(e){return t&&e.definition.title&&t.trim()&&e.definition.title.trim()===t.trim()});e?n.push(e):o=!1}),o||(o=!0,n=[],e[0].forEach(function(t){var e=i.find(function(e){return t&&e.field&&t.trim()&&e.field.trim()===t.trim()});e?n.push(e):o=!1}),o||(n=this.table.columnManager.columnsByIndex)),o&&e.shift(),e.forEach(function(t){var e={};t.forEach(function(t,o){n[o]&&(e[n[o].field]=t)}),s.push(e)}),s)}},w.prototype.pasteActions={replace:function(t){return this.table.setData(t)},update:function(t){return this.table.updateOrAddData(t)},insert:function(t){return this.table.addData(t)}},h.prototype.registerModule("clipboard",w);var E=function(t){this.table=t,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};E.prototype.initialize=function(){var t=null,e=this.table.columnManager.getFirstVisibileColumn(),o=this.table.options;switch(this.field=o.dataTreeChildField,this.indent=o.dataTreeChildIndent,this.elementField=o.dataTreeElementColumn||!!e&&e.field,o.dataTreeBranchElement&&(!0===o.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof o.dataTreeBranchElement?(t=document.createElement("div"),t.innerHTML=o.dataTreeBranchElement,this.branchEl=t.firstChild):this.branchEl=o.dataTreeBranchElement),o.dataTreeCollapseElement?"string"==typeof o.dataTreeCollapseElement?(t=document.createElement("div"),t.innerHTML=o.dataTreeCollapseElement,this.collapseEl=t.firstChild):this.collapseEl=o.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?(t=document.createElement("div"),t.innerHTML=o.dataTreeExpandElement,this.expandEl=t.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(t,e){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(t,e){return o.dataTreeStartExpanded[e]}}},E.prototype.initializeRow=function(t){var e=t.getData()[this.field],o=Array.isArray(e),i=o||!o&&"object"===(void 0===e?"undefined":_typeof(e))&&null!==e;!i&&t.modules.dataTree&&t.modules.dataTree.branchEl&&t.modules.dataTree.branchEl.parentNode.removeChild(t.modules.dataTree.branchEl),!i&&t.modules.dataTree&&t.modules.dataTree.controlEl&&t.modules.dataTree.controlEl.parentNode.removeChild(t.modules.dataTree.controlEl),t.modules.dataTree={index:t.modules.dataTree?t.modules.dataTree.index:0,open:!!i&&(t.modules.dataTree?t.modules.dataTree.open:this.startOpen(t.getComponent(),0)),controlEl:!(!t.modules.dataTree||!i)&&t.modules.dataTree.controlEl,branchEl:!(!t.modules.dataTree||!i)&&t.modules.dataTree.branchEl,parent:!!t.modules.dataTree&&t.modules.dataTree.parent,children:i}},E.prototype.layoutRow=function(t){var e=this.elementField?t.getCell(this.elementField):t.getCells()[0],o=e.getElement(),i=t.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(t,o),t.getElement().classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),o.insertBefore(i.branchEl,o.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?o.style.paddingRight=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":o.style.paddingLeft=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")},E.prototype.generateControlElement=function(t,e){var o=this,i=t.modules.dataTree,e=e||t.getCells()[0].getElement(),n=i.controlEl;!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",function(e){e.stopPropagation(),o.collapseRow(t)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",function(e){e.stopPropagation(),o.expandRow(t)})),i.controlEl.addEventListener("mousedown",function(t){t.stopPropagation()}),n&&n.parentNode===e?n.parentNode.replaceChild(i.controlEl,n):e.insertBefore(i.controlEl,e.firstChild))},E.prototype.setDisplayIndex=function(t){this.displayIndex=t},E.prototype.getDisplayIndex=function(){return this.displayIndex},E.prototype.getRows=function(t){var e=this,o=[];return t.forEach(function(t,i){var n,s;o.push(t),t instanceof l&&(n=t.modules.dataTree.children,n.index||!1===n.children||(s=e.getChildren(t),s.forEach(function(t){o.push(t)})))}),o},E.prototype.getChildren=function(t){var e=this,o=t.modules.dataTree,i=[],n=[];return!1!==o.children&&o.open&&(Array.isArray(o.children)||(o.children=this.generateChildren(t)),i=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(o.children):o.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(i),i.forEach(function(t){n.push(t),e.getChildren(t).forEach(function(t){n.push(t)})})),n},E.prototype.generateChildren=function(t){var e=this,o=[],i=t.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(function(i){var n=new l(i||{},e.table.rowManager);n.modules.dataTree.index=t.modules.dataTree.index+1,n.modules.dataTree.parent=t,n.modules.dataTree.children&&(n.modules.dataTree.open=e.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)}),o},E.prototype.expandRow=function(t,e){var o=t.modules.dataTree;!1!==o.children&&(o.open=!0,t.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(t.getComponent(),t.modules.dataTree.index))},E.prototype.collapseRow=function(t){var e=t.modules.dataTree;!1!==e.children&&(e.open=!1,t.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(t.getComponent(),t.modules.dataTree.index))},E.prototype.toggleRow=function(t){var e=t.modules.dataTree;!1!==e.children&&(e.open?this.collapseRow(t):this.expandRow(t))},E.prototype.getTreeParent=function(t){return!!t.modules.dataTree.parent&&t.modules.dataTree.parent.getComponent()},E.prototype.getFilteredTreeChildren=function(t){var e,o=t.modules.dataTree,i=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(t)),e=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(o.children):o.children,e.forEach(function(t){t instanceof l&&i.push(t)})),i},E.prototype.rowDelete=function(t){var e,o=t.modules.dataTree.parent;o&&(e=this.findChildIndex(t,o),!1!==e&&o.data[this.field].splice(e,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},E.prototype.addTreeChildRow=function(t,e,o,i){var n=!1;"string"==typeof e&&(e=JSON.parse(e)),Array.isArray(t.data[this.field])||(t.data[this.field]=[],t.modules.dataTree.open=this.startOpen(t.getComponent(),t.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,t))&&t.data[this.field].splice(o?n:n+1,0,e),!1===n&&(o?t.data[this.field].unshift(e):t.data[this.field].push(e)),this.initializeRow(t),this.layoutRow(t),this.table.rowManager.refreshActiveData("tree",!1,!0)},E.prototype.findChildIndex=function(t,e){var o=this,i=!1;return"object"==(void 0===t?"undefined":_typeof(t))?t instanceof l?i=t.data:t instanceof r?i=t._getSelf().data:"undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&e.modules.dataTree&&(i=e.modules.dataTree.children.find(function(e){return e instanceof l&&e.element===t}))&&(i=i.data):i=void 0!==t&&null!==t&&e.data[this.field].find(function(e){return e.data[o.table.options.index]==t}),i&&(Array.isArray(e.data[this.field])&&(i=e.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},E.prototype.getTreeChildren=function(t,e,o){var i=this,n=t.modules.dataTree,s=[];return n.children&&(Array.isArray(n.children)||(n.children=this.generateChildren(t)),n.children.forEach(function(t){t instanceof l&&(s.push(e?t.getComponent():t),o&&(s=s.concat(i.getTreeChildren(t,e,o))))})),s},E.prototype.checkForRestyle=function(t){t.row.cells.indexOf(t)||t.row.reinitialize()},E.prototype.getChildField=function(){return this.field},E.prototype.redrawNeeded=function(t){return!!this.field&&void 0!==t[this.field]||!!this.elementField&&void 0!==t[this.elementField]},h.prototype.registerModule("dataTree",E);var C=function(t){this.table=t};C.prototype.download=function(t,e,o,i,n){function s(o,i){n?!0===n?a.triggerDownload(o,i,t,e,!0):n(o):a.triggerDownload(o,i,t,e)}var a=this,r=!1;if("function"==typeof t?r=t:a.downloaders[t]?r=a.downloaders[t]:console.warn("Download Error - No such download type found: ",t),r){var l=this.generateExportList(i);r.call(this.table,l,o||{},s)}},C.prototype.generateExportList=function(t){var e=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,t||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),e.forEach(function(t){var e;"group"===t.type&&(e=t.columns[0],o&&o[t.indent]&&(e.value=o[t.indent](e.value,t.component._group.getRowCount(),t.component._group.getData(),t.component)))}),e},C.prototype.triggerDownload=function(t,e,o,i,n){var s=document.createElement("a"),a=new Blob([t],{type:e}),i=i||"Tabulator."+("function"==typeof o?"txt":o);(a=this.table.options.downloadReady.call(this.table,t,a))&&(n?window.open(window.URL.createObjectURL(a)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(a,i):(s.setAttribute("href",window.URL.createObjectURL(a)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},C.prototype.commsReceived=function(t,e,o){switch(e){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},C.prototype.downloaders={csv:function(t,e,o){var i=e&&e.delimiter?e.delimiter:",",n=[],s=[];t.forEach(function(t){var e=[];switch(t.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":t.columns.forEach(function(t,e){t&&1===t.depth&&(s[e]=void 0===t.value||null===t.value?"":'"'+String(t.value).split('"').join('""')+'"')});break;case"row":t.columns.forEach(function(t){if(t){switch(_typeof(t.value)){case"object":t.value=JSON.stringify(t.value);break;case"undefined":case"null":t.value=""}e.push('"'+String(t.value).split('"').join('""')+'"')}}),n.push(e.join(i))}}),s.length&&n.unshift(s.join(i)),n=n.join("\n"),e.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(t,e,o){var i=[];t.forEach(function(t){var e={};switch(t.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":t.columns.forEach(function(t){t&&(e[t.component.getField()]=t.value)}),i.push(e)}}),i=JSON.stringify(i,null,"\t"),o(i,"application/json")},pdf:function(t,e,o){function i(t,e){var o=[];return t.columns.forEach(function(t){var i;if(t){switch(_typeof(t.value)){case"object":t.value=JSON.stringify(t.value);break;case"undefined":case"null":t.value=""}i={content:t.value,colSpan:t.width,rowSpan:t.height},e&&(i.styles=e),o.push(i)}else o.push("")}),o}var n=[],s=[],a={},r=e.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},l=e.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=e.jsPDF||{},u=e&&e.title?e.title:"";c.orientation||(c.orientation=e.orientation||"landscape"),c.unit||(c.unit="pt"),t.forEach(function(t){switch(t.type){case"header":n.push(i(t));break;case"group":s.push(i(t,r));break;case"calc":s.push(i(t,l));break;case"row":s.push(i(t))}});var d=new jsPDF(c);e&&e.autoTable&&(a="function"==typeof e.autoTable?e.autoTable(d)||{}:e.autoTable),u&&(a.addPageContent=function(t){d.text(u,40,30)}),a.head=n,a.body=s,d.autoTable(a),e&&e.documentProcessing&&e.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(t,e,o){function i(){var e=[],o=[],i={},n={s:{c:0,r:0},e:{c:t[0]?t[0].columns.reduce(function(t,e){return t+(e&&e.width?e.width:1)},0):0,r:t.length}};return t.forEach(function(t,i){var n=[];t.columns.forEach(function(t,e){t?(n.push(t.value instanceof Date||"object"!==_typeof(t.value)?t.value:JSON.stringify(t.value)),(t.width>1||t.height>-1)&&o.push({s:{r:i,c:e},e:{r:i+t.height-1,c:e+t.width-1}})):n.push("")}),e.push(n)}),XLSX.utils.sheet_add_aoa(i,e),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}var n,s=this,a=e.sheetName||"Sheet1",r=XLSX.utils.book_new();if(r.SheetNames=[],r.Sheets={},e.sheetOnly)return void o(i());if(e.sheets)for(var l in e.sheets)!0===e.sheets[l]?(r.SheetNames.push(l),r.Sheets[l]=i()):(r.SheetNames.push(l),this.modules.comms.send(e.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:s.active,intercept:function(t){r.Sheets[l]=t}}));else r.SheetNames.push(a),r.Sheets[a]=i();e.documentProcessing&&(r=e.documentProcessing(r)),n=XLSX.write(r,{bookType:"xlsx",bookSST:!0,type:"binary"}),o(function(t){for(var e=new ArrayBuffer(t.length),o=new Uint8Array(e),i=0;i!=t.length;++i)o[i]=255&t.charCodeAt(i);return e}(n),"application/octet-stream")},html:function(t,e,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(t),"text/html")}},h.prototype.registerModule("download",C);var x=function(t){this.table=t,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};x.prototype.initializeColumn=function(t){var e=this,o={editor:!1,blocked:!1,check:t.definition.editable,params:t.definition.editorParams||{}};switch(_typeof(t.definition.editor)){case"string":"tick"===t.definition.editor&&(t.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),e.editors[t.definition.editor]?o.editor=e.editors[t.definition.editor]:console.warn("Editor Error - No such editor found: ",t.definition.editor);break;case"function":o.editor=t.definition.editor;break;case"boolean":!0===t.definition.editor&&("function"!=typeof t.definition.formatter?("tick"===t.definition.formatter&&(t.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),e.editors[t.definition.formatter]?o.editor=e.editors[t.definition.formatter]:o.editor=e.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",t.definition.formatter))}o.editor&&(t.modules.edit=o)},x.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},x.prototype.clearEditor=function(t){var e,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,e=o.getElement(),t?o.validate():e.classList.remove("tabulator-validation-fail"),e.classList.remove("tabulator-editing");e.firstChild;)e.removeChild(e.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},x.prototype.cancelEdit=function(){if(this.currentCell){var t=this.currentCell,e=this.currentCell.getComponent();this.clearEditor(!0),t.setValueActual(t.getValue()),t.cellRendered(),("textarea"==t.column.definition.editor||t.column.definition.variableHeight)&&t.row.normalizeHeight(!0),t.column.cellEvents.cellEditCancelled&&t.column.cellEvents.cellEditCancelled.call(this.table,e),this.table.options.cellEditCancelled.call(this.table,e)}},x.prototype.bindEditor=function(t){var e=this,o=t.getElement(!0);o.setAttribute("tabindex",0),o.addEventListener("click",function(t){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})}),o.addEventListener("mousedown",function(t){2===t.button?t.preventDefault():e.mouseClick=!0}),o.addEventListener("focus",function(o){e.recursionBlock||e.edit(t,o,!1)})},x.prototype.focusCellNoEvent=function(t,e){this.recursionBlock=!0,e&&"ie"===this.table.browser||t.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},x.prototype.editCell=function(t,e){this.focusCellNoEvent(t),this.edit(t,!1,e)},x.prototype.focusScrollAdjust=function(t){if("virtual"==this.table.rowManager.getRenderMode()){var e=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=t.row.getElement();i.offsetTop;i.offsetTop<e?this.table.rowManager.element.scrollTop-=e-i.offsetTop:i.offsetTop+i.offsetHeight>o&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o);var n=this.table.rowManager.element.scrollLeft,s=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,a=t.getElement();a.offsetLeft;this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin),s-=parseInt(this.table.modules.frozenColumns.rightMargin)),a.offsetLeft<n?this.table.rowManager.element.scrollLeft-=n-a.offsetLeft:a.offsetLeft+a.offsetWidth>s&&(this.table.rowManager.element.scrollLeft+=a.offsetLeft+a.offsetWidth-s)}},x.prototype.edit=function(t,e,o){function i(e){if(c.currentCell===t){var o=!0;return t.column.modules.validate&&c.table.modExists("validate")&&"manual"!=c.table.options.validationMode&&(o=c.table.modules.validate.validate(t.column.modules.validate,t,e)),!0===o||"highlight"===c.table.options.validationMode?(c.clearEditor(),t.modules.edit||(t.modules.edit={}),t.modules.edit.edited=!0,-1==c.editedCells.indexOf(t)&&c.editedCells.push(t),t.setValue(e,!0),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(t),!0===o||(h.classList.add("tabulator-validation-fail"),c.table.options.validationFailed.call(c.table,t.getComponent(),e,o),!1)):(c.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),c.focusCellNoEvent(t,!0),d(),c.table.options.validationFailed.call(c.table,t.getComponent(),e,o),!1)}}function n(){c.currentCell===t&&(c.cancelEdit(),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(t))}function s(t){d=t}var a,r,l,c=this,u=!0,d=function(){},h=t.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(t.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(e&&e.stopPropagation(),_typeof(t.column.modules.edit.check)){case"function":u=t.column.modules.edit.check(t.getComponent());break;case"boolean":u=t.column.modules.edit.check}if(u||o){if(c.cancelEdit(),c.currentCell=t,this.focusScrollAdjust(t),r=t.getComponent(),this.mouseClick&&(this.mouseClick=!1,t.column.cellEvents.cellClick&&t.column.cellEvents.cellClick.call(this.table,e,r)),t.column.cellEvents.cellEditing&&t.column.cellEvents.cellEditing.call(this.table,r),c.table.options.cellEditing.call(this.table,r),l="function"==typeof t.column.modules.edit.params?t.column.modules.edit.params(r):t.column.modules.edit.params,!1===(a=t.column.modules.edit.editor.call(c,r,s,i,n,l)))return h.blur(),!1;if(!(a instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",a),h.blur(),!1;for(h.classList.add("tabulator-editing"),t.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(a),d();for(var p=h.children,m=0;m<p.length;m++)p[m].addEventListener("click",function(t){t.stopPropagation()});return!0}return this.mouseClick=!1,h.blur(),!1},x.prototype.maskInput=function(t,e){function o(e){var r=i[e];void 0!==r&&r!==a&&r!==n&&r!==s&&(t.value=t.value+""+r,o(e+1))}var i=e.mask,n=void 0!==e.maskLetterChar?e.maskLetterChar:"A",s=void 0!==e.maskNumberChar?e.maskNumberChar:"9",a=void 0!==e.maskWildcardChar?e.maskWildcardChar:"*",r=!1;t.addEventListener("keydown",function(e){var o=t.value.length,l=e.key;if(e.keyCode>46){if(o>=i.length)return e.preventDefault(),e.stopPropagation(),r=!1,!1;switch(i[o]){case n:if(l.toUpperCase()==l.toLowerCase())return e.preventDefault(),e.stopPropagation(),r=!1,!1;break;case s:if(isNaN(l))return e.preventDefault(),e.stopPropagation(),r=!1,!1;break;case a:break;default:if(l!==i[o])return e.preventDefault(),e.stopPropagation(),r=!1,!1}r=!0}}),t.addEventListener("keyup",function(i){i.keyCode>46&&e.maskAutoFill&&o(t.value.length)}),t.placeholder||(t.placeholder=i),e.maskAutoFill&&o(t.value.length)},x.prototype.getEditedCells=function(){var t=[];return this.editedCells.forEach(function(e){t.push(e.getComponent())}),t},x.prototype.clearEdited=function(t){var e;t.modules.edit&&t.modules.edit.edited&&(t.modules.edit.edited=!1,t.modules.validate&&(t.modules.validate.invalid=!1)),(e=this.editedCells.indexOf(t))>-1&&this.editedCells.splice(e,1)},x.prototype.editors={input:function(t,e,o,i,n){function s(t){(null===a||void 0===a)&&""!==r.value||r.value!==a?o(r.value)&&(a=r.value):i()}var a=t.getValue(),r=document.createElement("input");if(r.setAttribute("type",n.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),r.setAttribute(l,r.getAttribute(l)+n.elementAttributes["+"+l])):r.setAttribute(l,n.elementAttributes[l]);return r.value=void 0!==a?a:"",e(function(){r.focus({preventScroll:!0}),r.style.height="100%"}),r.addEventListener("change",s),r.addEventListener("blur",s),r.addEventListener("keydown",function(t){switch(t.keyCode){case 13:s(t);break;case 27:i();break;case 35:case 36:t.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(r,n),r},textarea:function(t,e,o,i,n){function s(e){(null===a||void 0===a)&&""!==c.value||c.value!==a?(o(c.value)&&(a=c.value),setTimeout(function(){t.getRow().normalizeHeight()},300)):i()}var a=t.getValue(),r=n.verticalNavigation||"hybrid",l=String(null!==a&&void 0!==a?a:""),c=(l.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),u=0;if(c.style.display="block",c.style.padding="2px",c.style.height="100%",c.style.width="100%",c.style.boxSizing="border-box",c.style.whiteSpace="pre-wrap",c.style.resize="none",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),c.setAttribute(d,c.getAttribute(d)+n.elementAttributes["+"+d])):c.setAttribute(d,n.elementAttributes[d]);return c.value=l,e(function(){c.focus({preventScroll:!0}),c.style.height="100%",c.scrollHeight,c.style.height=c.scrollHeight+"px",t.getRow().normalizeHeight()}),c.addEventListener("change",s),c.addEventListener("blur",s),c.addEventListener("keyup",function(){c.style.height="";var e=c.scrollHeight;c.style.height=e+"px",e!=u&&(u=e,t.getRow().normalizeHeight())}),
-c.addEventListener("keydown",function(t){switch(t.keyCode){case 27:i();break;case 38:("editor"==r||"hybrid"==r&&c.selectionStart)&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 40:("editor"==r||"hybrid"==r&&c.selectionStart!==c.value.length)&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 35:case 36:t.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(c,n),c},number:function(t,e,o,i,n){function s(){var t=l.value;isNaN(t)||""===t||(t=Number(t)),t!==a?o(t)&&(a=t):i()}var a=t.getValue(),r=n.verticalNavigation||"editor",l=document.createElement("input");if(l.setAttribute("type","number"),void 0!==n.max&&l.setAttribute("max",n.max),void 0!==n.min&&l.setAttribute("min",n.min),void 0!==n.step&&l.setAttribute("step",n.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);l.value=a;var u=function(t){s()};return e(function(){l.removeEventListener("blur",u),l.focus({preventScroll:!0}),l.style.height="100%",l.addEventListener("blur",u)}),l.addEventListener("keydown",function(t){switch(t.keyCode){case 13:s();break;case 27:i();break;case 38:case 40:"editor"==r&&(t.stopImmediatePropagation(),t.stopPropagation());break;case 35:case 36:t.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(l,n),l},range:function(t,e,o,i,n){function s(){var t=r.value;isNaN(t)||""===t||(t=Number(t)),t!=a?o(t)&&(a=t):i()}var a=t.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),void 0!==n.max&&r.setAttribute("max",n.max),void 0!==n.min&&r.setAttribute("min",n.min),void 0!==n.step&&r.setAttribute("step",n.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),r.setAttribute(l,r.getAttribute(l)+n.elementAttributes["+"+l])):r.setAttribute(l,n.elementAttributes[l]);return r.value=a,e(function(){r.focus({preventScroll:!0}),r.style.height="100%"}),r.addEventListener("blur",function(t){s()}),r.addEventListener("keydown",function(t){switch(t.keyCode){case 13:s();break;case 27:i()}}),r},select:function(t,e,o,i,n){function s(e){var o,i={},n=x.table.getData();return o=e?x.table.columnManager.getColumnByField(e):t.getColumn()._getSelf(),o?n.forEach(function(t){var e=o.getFieldValue(t);null!==e&&void 0!==e&&""!==e&&(i[e]=!0)}):console.warn("unable to find matching column to create select lookup list:",e),i}function a(e,o){function i(t){var t={label:t.label,value:t.value,itemParams:t.itemParams,elementAttributes:t.elementAttributes,element:!1};return o.indexOf(t.value)>-1&&c(t),s.push(t),a.push(t),t}var s=[],a=[];if("function"==typeof e&&(e=e(t)),Array.isArray(e))e.forEach(function(t){var e;"object"===(void 0===t?"undefined":_typeof(t))?t.options?(e={label:t.label,group:!0,itemParams:t.itemParams,elementAttributes:t.elementAttributes,element:!1},a.push(e),t.options.forEach(function(t){i(t)})):i(t):(e={label:t,value:t,element:!1},o.indexOf(e.value)>-1&&c(e),s.push(e),a.push(e))});else for(var l in e){var u={label:e[l],value:l,element:!1};o.indexOf(u.value)>-1&&c(u),s.push(u),a.push(u)}n.sortValuesList&&(s.sort(function(t,e){return t.label<e.label?-1:t.label>e.label?1:0}),a.sort(function(t,e){return t.label<e.label?-1:t.label>e.label?1:0}),"asc"!==n.sortValuesList&&(s.reverse(),a.reverse())),S=s,P=a,r()}function r(){for(;k.firstChild;)k.removeChild(k.firstChild);P.forEach(function(e){var o=e.element;if(!o){if(o=document.createElement("div"),e.label=n.listItemFormatter?n.listItemFormatter(e.value,e.label,t,o,e.itemParams):e.label,e.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===e.label?"&nbsp;":e.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===e.label?"&nbsp;":e.label,o.addEventListener("click",function(){F=!0,setTimeout(function(){F=!1},10),z?(d(e),D.focus()):p(e)}),A.indexOf(e)>-1&&o.classList.add("active")),e.elementAttributes&&"object"==_typeof(e.elementAttributes))for(var i in e.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,D.getAttribute(i)+e.elementAttributes["+"+i])):o.setAttribute(i,e.elementAttributes[i]);o.addEventListener("mousedown",function(){_=!1,setTimeout(function(){_=!0},10)}),e.element=o}k.appendChild(o)})}function l(t,e){!z&&H&&H.element&&H.element.classList.remove("active"),H&&H.element&&H.element.classList.remove("focused"),H=t,t.element&&(t.element.classList.add("focused"),e&&t.element.classList.add("active")),t&&t.element&&t.element.scrollIntoView&&t.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function c(t){-1==A.indexOf(t)&&(A.push(t),l(t,!0)),f()}function u(t){var e=A[t];t>-1&&(A.splice(t,1),e.element&&e.element.classList.remove("active"))}function d(t){t||(t=H);var e=A.indexOf(t);e>-1?u(e):(!0!==z&&A.length>=z&&u(0),c(t)),f()}function p(t){y(),t||(t=H),t&&(D.value=t.label,o(t.value)),T=D.value}function m(t){t||y();var e=[];A.forEach(function(t){e.push(t.value)}),T=D.value,o(e)}function f(){var t=[];A.forEach(function(e){t.push(e.label)}),D.value=t.join(", "),!1===x.currentCell&&m(!0)}function g(){for(var t=A.length,e=0;e<t;e++)u(0)}function b(){y(),i()}function v(){if(A=[],!k.parentNode){!0===n.values?a(s(),T):"string"==typeof n.values?a(s(n.values),T):a(n.values||[],T);var t=h.prototype.helpers.elOffset(R);k.style.minWidth=R.offsetWidth+"px",k.style.top=t.top+R.offsetHeight+"px",k.style.left=t.left+"px",k.addEventListener("mousedown",function(t){_=!1,setTimeout(function(){_=!0},10)}),document.body.appendChild(k)}}function y(){k.parentNode&&k.parentNode.removeChild(k),w()}function w(){x.table.rowManager.element.removeEventListener("scroll",b)}function E(t){clearTimeout(B);var e=String.fromCharCode(event.keyCode).toLowerCase();N+=e.toLowerCase();var o=S.find(function(t){return void 0!==t.label&&t.label.toLowerCase().startsWith(N)});o&&l(o,!z),B=setTimeout(function(){N=""},800)}var C=this,x=this,R=t.getElement(),M=t.getValue(),L=n.verticalNavigation||"editor",T=void 0!==M||null===M?Array.isArray(M)?M:[M]:void 0!==n.defaultValue?n.defaultValue:[],D=document.createElement("input"),k=document.createElement("div"),z=n.multiselect,S=[],H={},P=[],A=[],_=!0,F=!1,N="",B=null;if((Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),D.setAttribute("type","text"),D.style.padding="4px",D.style.width="100%",D.style.boxSizing="border-box",D.style.cursor="default",D.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var O in n.elementAttributes)"+"==O.charAt(0)?(O=O.slice(1),D.setAttribute(O,D.getAttribute(O)+n.elementAttributes["+"+O])):D.setAttribute(O,n.elementAttributes[O]);return D.value=void 0!==M||null===M?M:"",D.addEventListener("search",function(t){D.value||(g(),m())}),D.addEventListener("keydown",function(t){var e;switch(t.keyCode){case 38:e=S.indexOf(H),("editor"==L||"hybrid"==L&&e)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e>0&&l(S[e-1],!z));break;case 40:e=S.indexOf(H),("editor"==L||"hybrid"==L&&e<S.length-1)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e<S.length-1&&(-1==e?l(S[0],!z):l(S[e+1],!z)));break;case 37:case 39:t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault();break;case 13:z?d():p();break;case 27:b();break;case 9:break;default:!1===x.currentCell&&t.preventDefault(),t.keyCode>=38&&t.keyCode<=90&&E(t.keyCode)}}),D.addEventListener("blur",function(t){_&&(z?m():b())}),D.addEventListener("focus",function(t){F||v()}),k=document.createElement("div"),k.classList.add("tabulator-edit-select-list"),e(function(){D.style.height="100%",D.focus({preventScroll:!0})}),setTimeout(function(){C.table.rowManager.element.addEventListener("scroll",b)},10),D},autocomplete:function(t,e,o,i,n){function s(){!0===n.values?S=a():"string"==typeof n.values&&(S=a(n.values))}function a(e){var o,i={},s=E.table.getData();return o=e?E.table.columnManager.getColumnByField(e):t.getColumn()._getSelf(),o?(s.forEach(function(t){var e=o.getFieldValue(t);null!==e&&void 0!==e&&""!==e&&(i[e]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create autocomplete lookup list:",e),i}function r(t,e){var o,i,s=[];o=S||(n.values||[]),n.searchFunc?(s=n.searchFunc(t,o),s instanceof Promise?(l(void 0!==n.searchingPlaceholder?n.searchingPlaceholder:"Searching..."),s.then(function(t){d(c(t),e)}).catch(function(t){console.err("error in autocomplete search promise:",t)})):d(c(s),e)):(i=c(o),""===t?n.showListOnEmpty&&(s=i):i.forEach(function(e){null===e.value&&void 0===e.value||(String(e.value).toLowerCase().indexOf(String(t).toLowerCase())>-1||String(e.title).toLowerCase().indexOf(String(t).toLowerCase())>-1)&&s.push(e)}),d(s,e))}function l(t){var e=document.createElement("div");u(),!1!==t&&(e.classList.add("tabulator-edit-select-list-notice"),e.tabIndex=0,t instanceof Node?e.appendChild(t):e.innerHTML=t,T.appendChild(e))}function c(t){var e=[];if(Array.isArray(t))t.forEach(function(t){var o={};"object"===(void 0===t?"undefined":_typeof(t))?(o.title=n.listItemFormatter?n.listItemFormatter(t.value,t.label):t.label,o.value=t.value):(o.title=n.listItemFormatter?n.listItemFormatter(t,t):t,o.value=t),e.push(o)});else for(var o in t){var i={title:n.listItemFormatter?n.listItemFormatter(o,t[o]):t[o],value:o};e.push(i)}return e}function u(){for(;T.firstChild;)T.removeChild(T.firstChild)}function d(t,e){t.length?p(t,e):n.emptyPlaceholder&&l(n.emptyPlaceholder)}function p(t,e){var o=!1;u(),D=t,D.forEach(function(t){var i=t.element;i||(i=document.createElement("div"),i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=t.title,i.addEventListener("click",function(e){g(t),m()}),i.addEventListener("mousedown",function(t){z=!1,setTimeout(function(){z=!0},10)}),t.element=i,e&&t.value==x&&(L.value=t.title,t.element.classList.add("active"),o=!0),t===k&&(t.element.classList.add("active"),o=!0)),T.appendChild(i)}),o||g(!1)}function m(){b(),k?x!==k.value?(x=k.value,L.value=k.title,o(k.value)):i():n.freetext?(x=L.value,o(L.value)):n.allowEmpty&&""===L.value?(x=L.value,o(L.value)):i()}function f(){if(!T.parentNode){for(;T.firstChild;)T.removeChild(T.firstChild);var t=h.prototype.helpers.elOffset(C);T.style.minWidth=C.offsetWidth+"px",T.style.top=t.top+C.offsetHeight+"px",T.style.left=t.left+"px",document.body.appendChild(T)}}function g(t,e){k&&k.element&&k.element.classList.remove("active"),k=t,t&&t.element&&t.element.classList.add("active"),t&&t.element&&t.element.scrollIntoView&&t.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function b(){T.parentNode&&T.parentNode.removeChild(T),y()}function v(){b(),i()}function y(){E.table.rowManager.element.removeEventListener("scroll",v)}var w=this,E=this,C=t.getElement(),x=t.getValue(),R=n.verticalNavigation||"editor",M=void 0!==x||null===x?x:void 0!==n.defaultValue?n.defaultValue:"",L=document.createElement("input"),T=document.createElement("div"),D=[],k=!1,z=!0,S=!1;if(L.setAttribute("type","search"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var H in n.elementAttributes)"+"==H.charAt(0)?(H=H.slice(1),L.setAttribute(H,L.getAttribute(H)+n.elementAttributes["+"+H])):L.setAttribute(H,n.elementAttributes[H]);return T.classList.add("tabulator-edit-select-list"),T.addEventListener("mousedown",function(t){z=!1,setTimeout(function(){z=!0},10)}),L.addEventListener("keydown",function(t){var e;switch(t.keyCode){case 38:e=D.indexOf(k),("editor"==R||"hybrid"==R&&e)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),g(e>0?D[e-1]:!1));break;case 40:e=D.indexOf(k),("editor"==R||"hybrid"==R&&e<D.length-1)&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e<D.length-1&&g(-1==e?D[0]:D[e+1]));break;case 37:case 39:t.stopImmediatePropagation(),t.stopPropagation();break;case 13:m();break;case 27:v();break;case 36:case 35:t.stopImmediatePropagation()}}),L.addEventListener("keyup",function(t){switch(t.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:r(L.value)}}),L.addEventListener("search",function(t){r(L.value)}),L.addEventListener("blur",function(t){z&&m()}),L.addEventListener("focus",function(t){var e=M;s(),f(),L.value=e,r(e,!0)}),e(function(){L.style.height="100%",L.focus({preventScroll:!0})}),n.mask&&this.table.modules.edit.maskInput(L,n),setTimeout(function(){w.table.rowManager.element.addEventListener("scroll",v)},10),s(),L.value=M,r(M,!0),L},star:function(t,e,o,i,n){function s(t){h.forEach(function(e,o){o<t?("ie"==r.table.browser?e.setAttribute("class","tabulator-star-active"):e.classList.replace("tabulator-star-inactive","tabulator-star-active"),e.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==r.table.browser?e.setAttribute("class","tabulator-star-inactive"):e.classList.replace("tabulator-star-active","tabulator-star-inactive"),e.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')})}function a(t){c=t,s(t)}var r=this,l=t.getElement(),c=t.getValue(),u=l.getElementsByTagName("svg").length||5,d=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,h=[],p=document.createElement("div"),m=document.createElementNS("http://www.w3.org/2000/svg","svg");if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",p.style.verticalAlign="middle",p.style.display="inline-block",p.style.padding="4px",m.setAttribute("width",d),m.setAttribute("height",d),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);for(var g=1;g<=u;g++)!function(t){var e=document.createElement("span"),i=m.cloneNode(!0);h.push(i),e.addEventListener("mouseenter",function(e){e.stopPropagation(),e.stopImmediatePropagation(),s(t)}),e.addEventListener("mousemove",function(t){t.stopPropagation(),t.stopImmediatePropagation()}),e.addEventListener("click",function(e){e.stopPropagation(),e.stopImmediatePropagation(),o(t),l.blur()}),e.appendChild(i),p.appendChild(e)}(g);return c=Math.min(parseInt(c),u),s(c),p.addEventListener("mousemove",function(t){s(0)}),p.addEventListener("click",function(t){o(0)}),l.addEventListener("blur",function(t){i()}),l.addEventListener("keydown",function(t){switch(t.keyCode){case 39:a(c+1);break;case 37:a(c-1);break;case 13:o(c);break;case 27:i()}}),p},progress:function(t,e,o,i,n){function s(){var t=window.getComputedStyle(l,null),e=d*Math.round(m.offsetWidth/((l.clientWidth-parseInt(t.getPropertyValue("padding-left"))-parseInt(t.getPropertyValue("padding-right")))/100))+u;o(e),l.setAttribute("aria-valuenow",e),l.setAttribute("aria-label",h)}var a,r,l=t.getElement(),c=void 0===n.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,d=(c-u)/100,h=t.getValue()||0,p=document.createElement("div"),m=document.createElement("div");if(p.style.position="absolute",p.style.right="0",p.style.top="0",p.style.bottom="0",p.style.width="5px",p.classList.add("tabulator-progress-handle"),m.style.display="inline-block",m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),m.setAttribute(f,m.getAttribute(f)+n.elementAttributes["+"+f])):m.setAttribute(f,n.elementAttributes[f]);return l.style.padding="4px 4px",h=Math.min(parseFloat(h),c),h=Math.max(parseFloat(h),u),h=Math.round((h-u)/d),m.style.width=h+"%",l.setAttribute("aria-valuemin",u),l.setAttribute("aria-valuemax",c),m.appendChild(p),p.addEventListener("mousedown",function(t){a=t.screenX,r=m.offsetWidth}),p.addEventListener("mouseover",function(){p.style.cursor="ew-resize"}),l.addEventListener("mousemove",function(t){a&&(m.style.width=r+t.screenX-a+"px")}),l.addEventListener("mouseup",function(t){a&&(t.stopPropagation(),t.stopImmediatePropagation(),a=!1,r=!1,s())}),l.addEventListener("keydown",function(t){switch(t.keyCode){case 39:t.preventDefault(),m.style.width=m.clientWidth+l.clientWidth/100+"px";break;case 37:t.preventDefault(),m.style.width=m.clientWidth-l.clientWidth/100+"px";break;case 9:case 13:s();break;case 27:i()}}),l.addEventListener("blur",function(){i()}),m},tickCross:function(t,e,o,i,n){function s(t){return l?t?u?c:r.checked:r.checked&&!u?(r.checked=!1,r.indeterminate=!0,u=!0,c):(u=!1,r.checked):r.checked}var a=t.getValue(),r=document.createElement("input"),l=n.tristate,c=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),r.setAttribute(d,r.getAttribute(d)+n.elementAttributes["+"+d])):r.setAttribute(d,n.elementAttributes[d]);return r.value=a,!l||void 0!==a&&a!==c&&""!==a||(u=!0,r.indeterminate=!0),"firefox"!=this.table.browser&&e(function(){r.focus({preventScroll:!0})}),r.checked=!0===a||"true"===a||"True"===a||1===a,e(function(){r.focus()}),r.addEventListener("change",function(t){o(s())}),r.addEventListener("blur",function(t){o(s(!0))}),r.addEventListener("keydown",function(t){13==t.keyCode&&o(s()),27==t.keyCode&&i()}),r}},h.prototype.registerModule("edit",x);var R=function(t,e,o,i){this.type=t,this.columns=e,this.component=o||!1,this.indent=i||0},M=function(t,e,o,i,n){this.value=t,this.component=e||!1,this.width=o,this.height=i,this.depth=n},L=function(t){this.table=t,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};L.prototype.generateExportList=function(t,e,o,i){this.cloneTableStyle=e,this.config=t||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},L.prototype.genereateTable=function(t,e,o,i){var n=this.generateExportList(t,e,o,i);return this.genereateTableElement(n)},L.prototype.rowLookup=function(t){var e=this,o=[];if("function"==typeof t)t.call(this.table).forEach(function(t){(t=e.table.rowManager.findRow(t))&&o.push(t)});else switch(t){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],o)},L.prototype.generateColumnGroupHeaders=function(){var t=this,e=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var i=t.processColumnGroup(o);i&&e.push(i)}),e},L.prototype.processColumnGroup=function(t){var e=this,o=t.columns,i=0,n=t.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||t.definition.title,s={title:n,column:t,depth:1};if(o.length){if(s.subGroups=[],s.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(s.width+=o.width,s.subGroups.push(o),o.depth>i&&(i=o.depth))}),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(t))return!1;s.width=1}return s},L.prototype.columnVisCheck=function(t){return!1!==t.definition[this.colVisProp]&&(t.visible||!t.visible&&t.definition[this.colVisProp])},L.prototype.headersToExportRows=function(t){function e(t,n){var s=i-n;if(void 0===o[n]&&(o[n]=[]),t.height=t.subGroups?1:s-t.depth+1,o[n].push(t),t.height>1)for(var a=1;a<t.height;a++)void 0===o[n+a]&&(o[n+a]=[]),o[n+a].push(!1);if(t.width>1)for(var r=1;r<t.width;r++)o[n].push(!1);t.subGroups&&t.subGroups.forEach(function(t){e(t,n+1)})}var o=[],i=0,n=[];return t.forEach(function(t){t.depth>i&&(i=t.depth)}),t.forEach(function(t){e(t,0)}),o.forEach(function(t){var e=[];t.forEach(function(t){t?e.push(new M(t.title,t.column.getComponent(),t.width,t.height,t.depth)):e.push(null)}),n.push(new R("header",e))}),n},L.prototype.bodyToExportRows=function(t){var e=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach(function(t){e.columnVisCheck(t)&&o.push(t.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&t.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&t.push(this.table.modules.columnCalcs.botRow)),t=t.filter(function(t){switch(t.type){case"group":return!1!==e.config.rowGroups;case"calc":return!1!==e.config.columnCalcs;case"row":return!(e.table.options.dataTree&&!1===e.config.dataTree&&t.modules.dataTree.parent)}return!0}),t.forEach(function(t,n){var s=t.getData(e.colVisProp),a=[],r=0;switch(t.type){case"group":r=t.level,a.push(new M(t.key,t.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(t){a.push(new M(t._column.getFieldValue(s),t,1,1))}),e.table.options.dataTree&&!1!==e.config.dataTree&&(r=t.modules.dataTree.index)}i.push(new R(t.type,a,t.getComponent(),r))}),i},L.prototype.genereateTableElement=function(t){var e=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r={};return r.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(r.treeElementField=this.table.modules.dataTree.elementField),r.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r.groupHeader&&!Array.isArray(r.groupHeader)&&(r.groupHeader=[r.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),t.forEach(function(t,o){switch(t.type){case"header":i.appendChild(e.genereateHeaderElement(t,r,s));break;case"group":n.appendChild(e.genereateGroupElement(t,r,s));break;case"calc":n.appendChild(e.genereateCalcElement(t,r,s));break;case"row":var a=e.genereateRowElement(t,r,s);e.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(a)}}),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},L.prototype.lookupTableStyles=function(){var t={};return this.cloneTableStyle&&window.getComputedStyle&&(t.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),t.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),t.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),t.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),t.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],t.firstRow&&(t.styleCells=t.firstRow.getElementsByClassName("tabulator-cell"),t.firstCell=t.styleCells[0],t.lastCell=t.styleCells[t.styleCells.length-1])),t},L.prototype.genereateHeaderElement=function(t,e,o){var i=this,n=document.createElement("tr");return t.columns.forEach(function(t){if(t){var e=document.createElement("th"),o=t.component._column.definition.cssClass?t.component._column.definition.cssClass.split(" "):[];e.colSpan=t.width,e.rowSpan=t.height,e.innerHTML=t.value,i.cloneTableStyle&&(e.style.boxSizing="border-box"),o.forEach(function(t){e.classList.add(t)}),i.mapElementStyles(t.component.getElement(),e,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(t.component._column.contentElement,e,["padding-top","padding-left","padding-right","padding-bottom"]),t.component._column.visible?i.mapElementStyles(t.component.getElement(),e,["width"]):t.component._column.definition.width&&(e.style.width=t.component._column.definition.width+"px"),t.component._column.parent&&i.mapElementStyles(t.component._column.parent.groupElement,e,["border-top"]),n.appendChild(e)}}),n},L.prototype.genereateGroupElement=function(t,e,o){var i=document.createElement("tr"),n=document.createElement("td"),s=t.columns[0];return i.classList.add("tabulator-print-table-row"),e.groupHeader&&e.groupHeader[t.indent]?s.value=e.groupHeader[t.indent](s.value,t.component._group.getRowCount(),t.component._group.getData(),t.component):!1===e.groupHeader?s.value=s.value:s.value=t.component._group.generator(s.value,t.component._group.getRowCount(),t.component._group.getData(),t.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+t.indent),s.component.isVisible()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},L.prototype.genereateCalcElement=function(t,e,o){var i=this.genereateRowElement(t,e,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},L.prototype.genereateRowElement=function(t,e,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),t.columns.forEach(function(a){if(a){var r=document.createElement("td"),l=a.component._column,c=a.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return r},getColumn:function(){return l.getComponent()},getData:function(){return t.component.getData()},getRow:function(){return t.component},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach(function(t){r.classList.add(t)}),n.table.modExists("format")&&!1!==n.config.formatCells)c=n.table.modules.format.formatExportValue(u,n.colVisProp);else switch(void 0===c?"undefined":_typeof(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}c instanceof Node?r.appendChild(c):r.innerHTML=c,o.firstCell&&(n.mapElementStyles(o.firstCell,r,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(r.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(e.treeElementField&&e.treeElementField==l.field||!e.treeElementField&&0==i)&&(t.component._row.modules.dataTree.controlEl&&r.insertBefore(t.component._row.modules.dataTree.controlEl.cloneNode(!0),r.firstChild),t.component._row.modules.dataTree.branchEl&&r.insertBefore(t.component._row.modules.dataTree.branchEl.cloneNode(!0),r.firstChild)),s.appendChild(r),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback(),e.rowFormatter&&!1!==n.config.formatCells&&e.rowFormatter(t.component)}}),s},L.prototype.genereateHTMLTable=function(t){var e=document.createElement("div");return e.appendChild(this.genereateTableElement(t)),e.innerHTML},L.prototype.getHtml=function(t,e,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,e,t,i||"htmlOutput");return this.genereateHTMLTable(n)},L.prototype.mapElementStyles=function(t,e,o){if(this.cloneTableStyle&&t&&e){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(t);o.forEach(function(t){e.style[i[t]]=n.getPropertyValue(t)})}}},h.prototype.registerModule("export",L);var T=function(t){this.table=t,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};T.prototype.initializeColumn=function(t,e){function o(e){var o,a="input"==t.modules.filter.tagType&&"text"==t.modules.filter.attrType||"textarea"==t.modules.filter.tagType?"partial":"match",r="",l="";if(void 0===t.modules.filter.prevSuccess||t.modules.filter.prevSuccess!==e){if(t.modules.filter.prevSuccess=e,t.modules.filter.emptyFunc(e))delete n.headerFilters[s];else{switch(t.modules.filter.value=e,_typeof(t.definition.headerFilterFunc)){case"string":n.filters[t.definition.headerFilterFunc]?(r=t.definition.headerFilterFunc,o=function(o){var i=t.definition.headerFilterFuncParams||{},s=t.getFieldValue(o);return i="function"==typeof i?i(e,s,o):i,n.filters[t.definition.headerFilterFunc](e,s,o,i)}):console.warn("Header Filter Error - Matching filter function not found: ",t.definition.headerFilterFunc);break;case"function":o=function(o){var i=t.definition.headerFilterFuncParams||{},n=t.getFieldValue(o);return i="function"==typeof i?i(e,n,o):i,t.definition.headerFilterFunc(e,n,o,i)},r=o}if(!o)switch(a){case"partial":o=function(o){var i=t.getFieldValue(o);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(e).toLowerCase())>-1},r="like";break;default:o=function(o){return t.getFieldValue(o)==e},r="="}n.headerFilters[s]={value:e,func:o,type:r,params:i||{}}}l=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==l&&(n.prevHeaderFilterChangeCheck=l,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,s=t.getField();t.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(t)},T.prototype.generateHeaderFilterElement=function(t,e,o){function i(){}var n,s,a,r,l,c,u,d=this,h=this,p=t.modules.filter.success,m=t.getField();if(t.modules.filter.headerElement&&t.modules.filter.headerElement.parentNode&&t.contentElement.removeChild(t.modules.filter.headerElement.parentNode),m){
-switch(t.modules.filter.emptyFunc=t.definition.headerFilterEmptyCheck||function(t){return!t&&"0"!==t},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(t.definition.headerFilter)){case"string":h.table.modules.edit.editors[t.definition.headerFilter]?(s=h.table.modules.edit.editors[t.definition.headerFilter],"tick"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(t){return!0!==t&&!1!==t})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",t.definition.editor);break;case"function":s=t.definition.headerFilter;break;case"boolean":t.modules.edit&&t.modules.edit.editor?s=t.modules.edit.editor:t.definition.formatter&&h.table.modules.edit.editors[t.definition.formatter]?(s=h.table.modules.edit.editors[t.definition.formatter],"tick"!==t.definition.formatter&&"tickCross"!==t.definition.formatter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(t){return!0!==t&&!1!==t})):s=h.table.modules.edit.editors.input}if(s){if(r={getValue:function(){return void 0!==e?e:""},getField:function(){return t.definition.field},getElement:function(){return n},getColumn:function(){return t.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=t.definition.headerFilterParams||{},u="function"==typeof u?u.call(h.table):u,!(a=s.call(this.table.modules.edit,r,function(){},p,i,u)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(a instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",a);m?h.table.modules.localize.bind("headerFilters|columns|"+t.definition.field,function(t){a.setAttribute("placeholder",void 0!==t&&t?t:h.table.modules.localize.getText("headerFilters|default"))}):h.table.modules.localize.bind("headerFilters|default",function(t){a.setAttribute("placeholder",void 0!==h.column.definition.headerFilterPlaceholder&&h.column.definition.headerFilterPlaceholder?h.column.definition.headerFilterPlaceholder:t)}),a.addEventListener("click",function(t){t.stopPropagation(),a.focus()}),a.addEventListener("focus",function(t){var e=d.table.columnManager.element.scrollLeft;e!==d.table.rowManager.element.scrollLeft&&(d.table.rowManager.scrollHorizontal(e),d.table.columnManager.scrollHorizontal(e))}),l=!1,c=function(t){l&&clearTimeout(l),l=setTimeout(function(){p(a.value)},h.table.options.headerFilterLiveFilterDelay)},t.modules.filter.headerElement=a,t.modules.filter.attrType=a.hasAttribute("type")?a.getAttribute("type").toLowerCase():"",t.modules.filter.tagType=a.tagName.toLowerCase(),!1!==t.definition.headerFilterLiveFilter&&("autocomplete"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter&&("autocomplete"!==t.definition.editor&&"tickCross"!==t.definition.editor||!0!==t.definition.headerFilter)&&(a.addEventListener("keyup",c),a.addEventListener("search",c),"number"==t.modules.filter.attrType&&a.addEventListener("change",function(t){p(a.value)}),"text"==t.modules.filter.attrType&&"ie"!==this.table.browser&&a.setAttribute("type","search")),"input"!=t.modules.filter.tagType&&"select"!=t.modules.filter.tagType&&"textarea"!=t.modules.filter.tagType||a.addEventListener("mousedown",function(t){t.stopPropagation()})),n.appendChild(a),t.contentElement.appendChild(n),o||h.headerFilterColumns.push(t)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",t.definition.title)},T.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(t){t.modules.filter&&t.modules.filter.headerElement&&(t.modules.filter.headerElement.style.display="none")})},T.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(t){t.modules.filter&&t.modules.filter.headerElement&&(t.modules.filter.headerElement.style.display="")})},T.prototype.setHeaderFilterFocus=function(t){t.modules.filter&&t.modules.filter.headerElement?t.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",t.getField())},T.prototype.getHeaderFilterValue=function(t){if(t.modules.filter&&t.modules.filter.headerElement)return t.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",t.getField())},T.prototype.setHeaderFilterValue=function(t,e){t&&(t.modules.filter&&t.modules.filter.headerElement?(this.generateHeaderFilterElement(t,e,!0),t.modules.filter.success(e)):console.warn("Column Filter Error - No header filter set on column:",t.getField()))},T.prototype.reloadHeaderFilter=function(t){t&&(t.modules.filter&&t.modules.filter.headerElement?this.generateHeaderFilterElement(t,t.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",t.getField()))},T.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},T.prototype.setFilter=function(t,e,o,i){var n=this;n.filterList=[],Array.isArray(t)||(t=[{field:t,type:e,value:o,params:i}]),n.addFilter(t)},T.prototype.addFilter=function(t,e,o,i){var n=this;Array.isArray(t)||(t=[{field:t,type:e,value:o,params:i}]),t.forEach(function(t){(t=n.findFilter(t))&&(n.filterList.push(t),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},T.prototype.findFilter=function(t){var e,o=this;if(Array.isArray(t))return this.findSubFilters(t);var i=!1;return"function"==typeof t.field?i=function(e){return t.field(e,t.type||{})}:o.filters[t.type]?(e=o.table.columnManager.getColumnByField(t.field),i=e?function(i){return o.filters[t.type](t.value,e.getFieldValue(i),i,t.params||{})}:function(e){return o.filters[t.type](t.value,e[t.field],e,t.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",t.type),t.func=i,!!t.func&&t},T.prototype.findSubFilters=function(t){var e=this,o=[];return t.forEach(function(t){(t=e.findFilter(t))&&o.push(t)}),!!o.length&&o},T.prototype.getFilters=function(t,e){var o=[];return t&&(o=this.getHeaderFilters()),e&&o.forEach(function(t){"function"==typeof t.type&&(t.type="function")}),o=o.concat(this.filtersToArray(this.filterList,e))},T.prototype.filtersToArray=function(t,e){var o=this,i=[];return t.forEach(function(t){var n;Array.isArray(t)?i.push(o.filtersToArray(t,e)):(n={field:t.field,type:t.type,value:t.value},e&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},T.prototype.getHeaderFilters=function(){var t=[];for(var e in this.headerFilters)t.push({field:e,type:this.headerFilters[e].type,value:this.headerFilters[e].value});return t},T.prototype.removeFilter=function(t,e,o){var i=this;Array.isArray(t)||(t=[{field:t,type:e,value:o}]),t.forEach(function(t){var e=-1;e="object"==_typeof(t.field)?i.filterList.findIndex(function(e){return t===e}):i.filterList.findIndex(function(e){return t.field===e.field&&t.type===e.type&&t.value===e.value}),e>-1?(i.filterList.splice(e,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",t.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},T.prototype.clearFilter=function(t){this.filterList=[],t&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},T.prototype.clearHeaderFilter=function(){var t=this;this.headerFilters={},t.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(e){e.modules.filter.value=null,e.modules.filter.prevSuccess=void 0,t.reloadHeaderFilter(e)}),this.changed=!0},T.prototype.search=function(t,e,o,i){var n=this,s=[],a=[];return Array.isArray(e)||(e=[{field:e,type:o,value:i}]),e.forEach(function(t){(t=n.findFilter(t))&&a.push(t)}),this.table.rowManager.rows.forEach(function(e){var o=!0;a.forEach(function(t){n.filterRecurse(t,e.getData())||(o=!1)}),o&&s.push("data"===t?e.getData("data"):e.getComponent())}),s},T.prototype.filter=function(t,e){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=t.slice(0):t.forEach(function(t){o.filterRow(t)&&i.push(t)}),o.table.options.dataFiltered&&(i.forEach(function(t){n.push(t.getComponent())}),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},T.prototype.filterRow=function(t,e){var o=this,i=!0,n=t.getData();o.filterList.forEach(function(t){o.filterRecurse(t,n)||(i=!1)});for(var s in o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},T.prototype.filterRecurse=function(t,e){var o=this,i=!1;return Array.isArray(t)?t.forEach(function(t){o.filterRecurse(t,e)&&(i=!0)}):i=t.func(e),i},T.prototype.filters={"=":function(t,e,o,i){return e==t},"<":function(t,e,o,i){return e<t},"<=":function(t,e,o,i){return e<=t},">":function(t,e,o,i){return e>t},">=":function(t,e,o,i){return e>=t},"!=":function(t,e,o,i){return e!=t},regex:function(t,e,o,i){return"string"==typeof t&&(t=new RegExp(t)),t.test(e)},like:function(t,e,o,i){return null===t||void 0===t?e===t:void 0!==e&&null!==e&&String(e).toLowerCase().indexOf(t.toLowerCase())>-1},keywords:function(t,e,o,i){var n=t.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null===e||void 0===e?"":e).toLowerCase(),a=[];return n.forEach(function(t){s.includes(t)&&a.push(!0)}),i.matchAll?a.length===n.length:!!a.length},starts:function(t,e,o,i){return null===t||void 0===t?e===t:void 0!==e&&null!==e&&String(e).toLowerCase().startsWith(t.toLowerCase())},ends:function(t,e,o,i){return null===t||void 0===t?e===t:void 0!==e&&null!==e&&String(e).toLowerCase().endsWith(t.toLowerCase())},in:function(t,e,o,i){return Array.isArray(t)?!t.length||t.indexOf(e)>-1:(console.warn("Filter Error - filter value is not an array:",t),!1)}},h.prototype.registerModule("filter",T);var D=function(t){this.table=t};D.prototype.initializeColumn=function(t){t.modules.format=this.lookupFormatter(t,""),void 0!==t.definition.formatterPrint&&(t.modules.format.print=this.lookupFormatter(t,"Print")),void 0!==t.definition.formatterClipboard&&(t.modules.format.clipboard=this.lookupFormatter(t,"Clipboard")),void 0!==t.definition.formatterHtmlOutput&&(t.modules.format.htmlOutput=this.lookupFormatter(t,"HtmlOutput"))},D.prototype.lookupFormatter=function(t,e){var o={params:t.definition["formatter"+e+"Params"]||{}},i=t.definition["formatter"+e];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},D.prototype.cellRendered=function(t){t.modules.format&&t.modules.format.renderedCallback&&!t.modules.format.rendered&&(t.modules.format.renderedCallback(),t.modules.format.rendered=!0)},D.prototype.formatValue=function(t){function e(e){t.modules.format||(t.modules.format={}),t.modules.format.renderedCallback=e,t.modules.format.rendered=!1}var o=t.getComponent(),i="function"==typeof t.column.modules.format.params?t.column.modules.format.params(o):t.column.modules.format.params;return t.column.modules.format.formatter.call(this,o,i,e)},D.prototype.formatExportValue=function(t,e){var o,i=t.column.modules.format[e];if(i){var n=function(e){t.modules.format||(t.modules.format={}),t.modules.format.renderedCallback=e,t.modules.format.rendered=!1};return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,t.getComponent(),o,n)}return this.formatValue(t)},D.prototype.sanitizeHTML=function(t){if(t){var e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(t).replace(/[&<>"'`=\/]/g,function(t){return e[t]})}return t},D.prototype.emptyToSpace=function(t){return null===t||void 0===t||""===t?"&nbsp;":t},D.prototype.getFormatter=function(t){var t;switch(void 0===t?"undefined":_typeof(t)){case"string":this.formatters[t]?t=this.formatters[t]:(console.warn("Formatter Error - No such formatter found: ",t),t=this.formatters.plaintext);break;case"function":t=t;break;default:t=this.formatters.plaintext}return t},D.prototype.formatters={plaintext:function(t,e,o){return this.emptyToSpace(this.sanitizeHTML(t.getValue()))},html:function(t,e,o){return t.getValue()},textarea:function(t,e,o){return t.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(t.getValue()))},money:function(t,e,o){var i,n,s,a,r=parseFloat(t.getValue()),l=e.decimal||".",c=e.thousand||",",u=e.symbol||"",d=!!e.symbolAfter,h=void 0!==e.precision?e.precision:2;if(isNaN(r))return this.emptyToSpace(this.sanitizeHTML(t.getValue()));for(i=!1!==h?r.toFixed(h):r,i=String(i).split("."),n=i[0],s=i.length>1?l+i[1]:"",a=/(\d+)(\d{3})/;a.test(n);)n=n.replace(a,"$1"+c+"$2");return d?n+s+u:u+n+s},link:function(t,e,o){var i,n=t.getValue(),s=e.urlPrefix||"",a=e.download,r=n,l=document.createElement("a");if(e.labelField&&(i=t.getData(),r=i[e.labelField]),e.label)switch(_typeof(e.label)){case"string":r=e.label;break;case"function":r=e.label(t)}if(r){if(e.urlField&&(i=t.getData(),n=i[e.urlField]),e.url)switch(_typeof(e.url)){case"string":n=e.url;break;case"function":n=e.url(t)}return l.setAttribute("href",s+n),e.target&&l.setAttribute("target",e.target),e.download&&(a="function"==typeof a?a(t):!0===a?"":a,l.setAttribute("download",a)),l.innerHTML=this.emptyToSpace(this.sanitizeHTML(r)),l}return"&nbsp;"},image:function(t,e,o){var i=document.createElement("img");switch(i.setAttribute("src",t.getValue()),_typeof(e.height)){case"number":i.style.height=e.height+"px";break;case"string":i.style.height=e.height}switch(_typeof(e.width)){case"number":i.style.width=e.width+"px";break;case"string":i.style.width=e.width}return i.addEventListener("load",function(){t.getRow().normalizeHeight()}),i},tickCross:function(t,e,o){var i=t.getValue(),n=t.getElement(),s=e.allowEmpty,a=e.allowTruthy,r=void 0!==e.tickElement?e.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',l=void 0!==e.crossElement?e.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return a&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),r||""):!s||"null"!==i&&""!==i&&null!==i&&void 0!==i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(t,e,o){var i=e.inputFormat||"YYYY-MM-DD hh:mm:ss",n=e.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==e.invalidPlaceholder?e.invalidPlaceholder:"",a=t.getValue(),r=moment(a,i);return r.isValid()?e.timezone?r.tz(e.timezone).format(n):r.format(n):!0===s?a:"function"==typeof s?s(a):s},datetimediff:function(t,e,o){var i=e.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==e.invalidPlaceholder?e.invalidPlaceholder:"",s=void 0!==e.suffix&&e.suffix,a=void 0!==e.unit?e.unit:void 0,r=void 0!==e.humanize&&e.humanize,l=void 0!==e.date?e.date:moment(),c=t.getValue(),u=moment(c,i);return u.isValid()?r?moment.duration(u.diff(l)).humanize(s):u.diff(l,a)+(s?" "+s:""):!0===n?c:"function"==typeof n?n(c):n},lookup:function(t,e,o){var i=t.getValue();return void 0===e[i]?(console.warn("Missing display value for "+i),i):e[i]},star:function(t,e,o){var i=t.getValue(),n=t.getElement(),s=e&&e.stars?e.stars:5,a=document.createElement("span"),r=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.verticalAlign="middle",r.setAttribute("width","14"),r.setAttribute("height","14"),r.setAttribute("viewBox","0 0 512 512"),r.setAttribute("xml:space","preserve"),r.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var c=r.cloneNode(!0);c.innerHTML=l<=i?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',a.appendChild(c)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),a},traffic:function(t,e,o){var i,n,s=this.sanitizeHTML(t.getValue())||0,a=document.createElement("span"),r=e&&e.max?e.max:100,l=e&&e.min?e.min:0,c=e&&void 0!==e.color?e.color:["red","orange","green"],u="#666666";if(!isNaN(s)&&void 0!==t.getValue()){switch(a.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=r?parseFloat(s):r,n=parseFloat(n)>=l?parseFloat(n):l,i=(r-l)/100,n=Math.round((n-l)/i),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(s);break;case"object":if(Array.isArray(c)){var d=100/c.length,h=Math.floor(n/d);h=Math.min(h,c.length-1),h=Math.max(h,0),u=c[h];break}}return a.style.backgroundColor=u,a}},progress:function(t,e,o){var i,n,s,a,r,l=this.sanitizeHTML(t.getValue())||0,u=t.getElement(),d=e&&e.max?e.max:100,h=e&&e.min?e.min:0,p=e&&e.legendAlign?e.legendAlign:"center";switch(n=parseFloat(l)<=d?parseFloat(l):d,n=parseFloat(n)>=h?parseFloat(n):h,i=(d-h)/100,n=Math.round((n-h)/i),_typeof(e.color)){case"string":s=e.color;break;case"function":s=e.color(l);break;case"object":if(Array.isArray(e.color)){var m=100/e.color.length,f=Math.floor(n/m);f=Math.min(f,e.color.length-1),f=Math.max(f,0),s=e.color[f];break}default:s="#2DC214"}switch(_typeof(e.legend)){case"string":a=e.legend;break;case"function":a=e.legend(l);break;case"boolean":a=l;break;default:a=!1}switch(_typeof(e.legendColor)){case"string":r=e.legendColor;break;case"function":r=e.legendColor(l);break;case"object":if(Array.isArray(e.legendColor)){var m=100/e.legendColor.length,f=Math.floor(n/m);f=Math.min(f,e.legendColor.length-1),f=Math.max(f,0),r=e.legendColor[f]}break;default:r="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=n+"%",g.style.backgroundColor=s,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",h),a){var b=document.createElement("div");b.style.position="absolute",b.style.top="4px",b.style.left=0,b.style.textAlign=p,b.style.width="100%",b.style.color=r,b.innerHTML=a}return o(function(){if(!(t instanceof c)){var e=document.createElement("div");e.style.position="absolute",e.style.top="4px",e.style.bottom="4px",e.style.left="4px",e.style.right="4px",u.appendChild(e),u=e}u.appendChild(g),a&&u.appendChild(b)}),""},color:function(t,e,o){return t.getElement().style.backgroundColor=this.sanitizeHTML(t.getValue()),""},buttonTick:function(t,e,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(t,e,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(t,e,o){return this.table.rowManager.activeRows.indexOf(t.getRow()._getSelf())+1},handle:function(t,e,o){return t.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(t,e,o){function i(t){var e=s.element;s.open=t,e&&(s.open?(n.classList.add("open"),e.style.display=""):(n.classList.remove("open"),e.style.display="none"))}var n=document.createElement("div"),s=t.getRow()._row.modules.responsiveLayout;return n.classList.add("tabulator-responsive-collapse-toggle"),n.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",t.getElement().classList.add("tabulator-row-handle"),n.addEventListener("click",function(t){t.stopImmediatePropagation(),i(!s.open)}),i(s.open),n},rowSelection:function(t,e,o){var i=this,n=document.createElement("input");if(n.type="checkbox",this.table.modExists("selectRow",!0))if(n.addEventListener("click",function(t){t.stopPropagation()}),"function"==typeof t.getRow){var s=t.getRow();s instanceof r?(n.addEventListener("change",function(t){s.toggleSelect()}),n.checked=s.isSelected&&s.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(s,n)):n=""}else n.addEventListener("change",function(t){i.table.modules.selectRow.selectedRows.length?i.table.deselectRow():i.table.selectRow(e.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(n);return n}},h.prototype.registerModule("format",D);var k=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};k.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},k.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.isGroup||(this.frozenCheck(t)?(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right")},k.prototype.frozenCheck=function(t){return t.parent.isGroup&&t.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),t.parent.isGroup?this.frozenCheck(t.parent):t.definition.frozen},k.prototype.scrollHorizontal=function(){var t,e=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){e.layout()},100),t=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),t.forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},k.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},k.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},k.prototype.layoutColumnPosition=function(t){var e=this,o=[];this.leftColumns.forEach(function(i,n){if(i.modules.frozen.margin=e._calcSpace(e.leftColumns,n)+e.table.columnManager.scrollLeft+"px",n==e.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=e.getColGroupParentElement(i);o.includes(s)||(e.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else e.layoutElement(i.getElement(),i);t&&i.cells.forEach(function(t){e.layoutElement(t.getElement(!0),i)})}),this.rightColumns.forEach(function(o,i){o.modules.frozen.margin=e.rightPadding-e._calcSpace(e.rightColumns,i+1)+"px",i==e.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?e.layoutElement(e.getColGroupParentElement(o),o):e.layoutElement(o.getElement(),o),t&&o.cells.forEach(function(t){e.layoutElement(t.getElement(!0),o)})})},k.prototype.getColGroupParentElement=function(t){return t.parent.isGroup?this.getColGroupParentElement(t.parent):t.getElement()},k.prototype.layout=function(){var t=this;t.active&&(this.calcMargins(),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},k.prototype.layoutRow=function(t){var e=this;t.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var i=t.getCell(o);i&&e.layoutElement(i.getElement(!0),o)}),this.rightColumns.forEach(function(o){var i=t.getCell(o);i&&e.layoutElement(i.getElement(!0),o)})},k.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin,t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},k.prototype._calcSpace=function(t,e){for(var o=0,i=0;i<e;i++)t[i].visible&&(o+=t[i].getWidth());return o},h.prototype.registerModule("frozenColumns",k);var z=function(t){this.table=t,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};z.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},z.prototype.setDisplayIndex=function(t){this.displayIndex=t},z.prototype.getDisplayIndex=function(){return this.displayIndex},z.prototype.isFrozen=function(){return!!this.rows.length},z.prototype.getRows=function(t){var e=t.slice(0);return this.rows.forEach(function(t){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),e},z.prototype.freezeRow=function(t){t.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(t.modules.frozen=!0,this.topElement.appendChild(t.getElement()),t.initialize(),t.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(t),this.table.rowManager.refreshActiveData("display"),this.styleRows())},z.prototype.unfreezeRow=function(t){this.rows.indexOf(t);t.modules.frozen?(t.modules.frozen=!1,this.detachRow(t),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")},z.prototype.detachRow=function(t){var e=this.rows.indexOf(t);if(e>-1){var o=t.getElement();o.parentNode.removeChild(o),this.rows.splice(e,1)}},z.prototype.styleRows=function(t){var e=this;this.rows.forEach(function(t,o){e.table.rowManager.styleRow(t,o)})},h.prototype.registerModule("frozenRows",z);var S=function(t){this._group=t,this.type="GroupComponent"};S.prototype.getKey=function(){return this._group.key},S.prototype.getField=function(){return this._group.field},S.prototype.getElement=function(){return this._group.element},S.prototype.getRows=function(){return this._group.getRows(!0)},S.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},S.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},S.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},S.prototype.isVisible=function(){return this._group.visible},S.prototype.show=function(){this._group.show()},S.prototype.hide=function(){this._group.hide()},S.prototype.toggle=function(){this._group.toggleVisibility()},S.prototype._getSelf=function(){return this._group},S.prototype.getTable=function(){return this._group.groupManager.table};var H=function(t,e,o,i,n,s,a){this.groupManager=t,this.parent=e,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o<t.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=a,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=a?a.visible:void 0!==t.startOpen[o]?t.startOpen[o]:t.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};H.prototype.wipe=function(){this.groupList.length?this.groupList.forEach(function(t){t.wipe()}):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)},H.prototype.createElements=function(){var t=document.createElement("div");t.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(t),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},H.prototype.createValueGroups=function(){var t=this,e=this.level+1
-;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]&&this.groupManager.allowedValues[e].forEach(function(o){t._createGroup(o,e)})},H.prototype.addBindings=function(){var t,e,o,i,n=this;n.groupManager.table.options.groupClick&&n.element.addEventListener("click",function(t){n.groupManager.table.options.groupClick.call(n.groupManager.table,t,n.getComponent())}),n.groupManager.table.options.groupDblClick&&n.element.addEventListener("dblclick",function(t){n.groupManager.table.options.groupDblClick.call(n.groupManager.table,t,n.getComponent())}),n.groupManager.table.options.groupContext&&n.element.addEventListener("contextmenu",function(t){n.groupManager.table.options.groupContext.call(n.groupManager.table,t,n.getComponent())}),(n.groupManager.table.options.groupContextMenu||n.groupManager.table.options.groupClickMenu)&&n.groupManager.table.modExists("menu")&&n.groupManager.table.modules.menu.initializeGroup.call(n.groupManager.table.modules.menu,n),n.groupManager.table.options.groupTap&&(o=!1,n.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),n.element.addEventListener("touchend",function(t){o&&n.groupManager.table.options.groupTap(t,n.getComponent()),o=!1})),n.groupManager.table.options.groupDblTap&&(t=null,n.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.groupManager.table.options.groupDblTap(e,n.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),n.groupManager.table.options.groupTapHold&&(e=null,n.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.groupManager.table.options.groupTapHold(t,n.getComponent())},1e3)},{passive:!0}),n.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),n.groupManager.table.options.groupToggleElement&&(i="arrow"==n.groupManager.table.options.groupToggleElement?n.arrowElement:n.element,i.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),n.toggleVisibility()}))},H.prototype._createGroup=function(t,e){var o=e+"_"+t,i=new H(this.groupManager,this,e,t,this.groupManager.groupIDLookups[e].field,this.groupManager.headerGenerator[e]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[o]);this.groups[o]=i,this.groupList.push(i)},H.prototype._addRowToGroup=function(t){var e=this.level+1;if(this.hasSubGroups){var o=this.groupManager.groupIDLookups[e].func(t.getData()),i=e+"_"+o;this.groupManager.allowedValues&&this.groupManager.allowedValues[e]?this.groups[i]&&this.groups[i].addRow(t):(this.groups[i]||this._createGroup(o,e),this.groups[i].addRow(t))}},H.prototype._addRow=function(t){this.rows.push(t),t.modules.group=this},H.prototype.insertRow=function(t,e,o){var i=this.conformRowData({});t.updateData(i);var n=this.rows.indexOf(e);n>-1?o?this.rows.splice(n+1,0,t):this.rows.splice(n,0,t):o?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},H.prototype.scrollHeader=function(t){this.arrowElement.style.marginLeft=t,this.groupList.forEach(function(e){e.scrollHeader(t)})},H.prototype.getRowIndex=function(t){},H.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},H.prototype.removeRow=function(t){var e=this.rows.indexOf(t),o=t.getElement();e>-1&&this.rows.splice(e,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},H.prototype.removeGroup=function(t){var e,o=t.level+"_"+t.key;this.groups[o]&&(delete this.groups[o],e=this.groupList.indexOf(t),e>-1&&this.groupList.splice(e,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},H.prototype.getHeadersAndRows=function(t){var e=[];return e.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(o){e=e.concat(o.getHeadersAndRows(t))}):(!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top)),e=e.concat(this.rows),!t&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!t&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),e.push(this.calcs.top))),!t&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),e.push(this.calcs.bottom)))),e},H.prototype.getData=function(t,e){var o=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach(function(t){o.push(t.getData(e||"data"))}),o},H.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach(function(e){t+=e.getRowCount()}):t=this.rows.length,t},H.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},H.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){t.detachElement()})}):this.rows.forEach(function(t){var e=t.getElement();e.parentNode.removeChild(e)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},H.prototype.show=function(){var t=this;if(t.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var e=t.getElement();this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){var o=t.getElement();e.parentNode.insertBefore(o,e.nextSibling),t.initialize(),e=o})}):t.rows.forEach(function(t){var o=t.getElement();e.parentNode.insertBefore(o,e.nextSibling),t.initialize(),e=o}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},H.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach(function(e){t.push(e.getData())}),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},H.prototype.getRowGroup=function(t){var e=!1;return this.groupList.length?this.groupList.forEach(function(o){var i=o.getRowGroup(t);i&&(e=i)}):this.rows.find(function(e){return e===t})&&(e=this),e},H.prototype.getSubGroups=function(t){var e=[];return this.groupList.forEach(function(o){e.push(t?o.getComponent():o)}),e},H.prototype.getRows=function(t){var e=[];return this.rows.forEach(function(o){e.push(t?o.getComponent():o)}),e},H.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach(function(e){t.push(e.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},H.prototype.getPath=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return t.unshift(this.key),this.parent&&this.parent.getPath(t),t},H.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var t=0;t<this.element.childNodes.length;++t)this.element.childNodes[t].parentNode.removeChild(this.element.childNodes[t]);return this.generateGroupHeaderContents(),this.element},H.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},H.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},H.prototype.initialize=function(t){this.initialized&&!t||(this.normalizeHeight(),this.initialized=!0)},H.prototype.reinitialize=function(){this.initialized=!1,this.height=0,h.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},H.prototype.setHeight=function(t){this.height!=t&&(this.height=t,this.outerHeight=this.element.offsetHeight)},H.prototype.getHeight=function(){return this.outerHeight},H.prototype.getGroup=function(){return this},H.prototype.reinitializeHeight=function(){},H.prototype.calcHeight=function(){},H.prototype.setCellHeight=function(){},H.prototype.clearCellHeight=function(){},H.prototype.getComponent=function(){return this.component||(this.component=new S(this)),this.component};var P=function(t){this.table=t,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};P.prototype.initialize=function(){var t=this,e=t.table.options.groupBy,o=t.table.options.groupStartOpen,i=t.table.options.groupHeader;if(this.allowedValues=t.table.options.groupValues,Array.isArray(e)&&Array.isArray(i)&&e.length>i.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",function(e,o){t.headerGenerator[0]=function(t,i,n){return(void 0===t?"":t)+"<span>("+i+" "+(1===i?e:o.groups.items)+")</span>"}}),this.groupIDLookups=[],Array.isArray(e)||e)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var n=this.table.columnManager.getRealColumns();n.forEach(function(e){e.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),e.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(e)||(e=[e]),e.forEach(function(e,o){var i,n;"function"==typeof e?i=e:(n=t.table.columnManager.getColumnByField(e),i=n?function(t){return n.getFieldValue(t)}:function(t){return t[e]}),t.groupIDLookups.push({field:"function"!=typeof e&&e,func:i,values:!!t.allowedValues&&t.allowedValues[o]})}),o&&(Array.isArray(o)||(o=[o]),o.forEach(function(t){t="function"==typeof t?t:function(){return!0}}),t.startOpen=o),i&&(t.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},P.prototype.setDisplayIndex=function(t){this.displayIndex=t},P.prototype.getDisplayIndex=function(){return this.displayIndex},P.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},P.prototype.getGroups=function(t){var e=[];return this.groupList.forEach(function(o){e.push(t?o.getComponent():o)}),e},P.prototype.getChildGroups=function(t){var e=this,o=[];return t||(t=this),t.groupList.forEach(function(t){t.groupList.length?o=o.concat(e.getChildGroups(t)):o.push(t)}),o},P.prototype.wipe=function(){this.groupList.forEach(function(t){t.wipe()})},P.prototype.pullGroupListData=function(t){var e=this,o=[];return t.forEach(function(t){var i={};i.level=0,i.rowCount=0,i.headerContent="";var n=[];t.hasSubGroups?(n=e.pullGroupListData(t.groupList),i.level=t.level,i.rowCount=n.length-t.groupList.length,i.headerContent=t.generator(t.key,i.rowCount,t.rows,t),o.push(i),o=o.concat(n)):(i.level=t.level,i.headerContent=t.generator(t.key,t.rows.length,t.rows,t),i.rowCount=t.getRows().length,o.push(i),t.getRows().forEach(function(t){o.push(t.getData("data"))}))}),o},P.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},P.prototype.getRowGroup=function(t){var e=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(t);i&&(e=i)}),e},P.prototype.countGroups=function(){return this.groupList.length},P.prototype.generateGroups=function(t){var e=this,o=e.groups;e.groups={},e.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(t){e.createGroup(t,0,o)}),t.forEach(function(t){e.assignRowToExistingGroup(t,o)})):t.forEach(function(t){e.assignRowToGroup(t,o)})},P.prototype.createGroup=function(t,e,o){var i,n=e+"_"+t;o=o||[],i=new H(this,!1,e,t,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},P.prototype.assignRowToExistingGroup=function(t,e){var o=this.groupIDLookups[0].func(t.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(t)},P.prototype.assignRowToGroup=function(t,e){var o=this.groupIDLookups[0].func(t.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,e),this.groups["0_"+o].addRow(t),!i},P.prototype.reassignRowToGroup=function(t){var e=t.getGroup(),o=e.getPath(),i=this.getExpectedPath(t);o.length==i.length&&o.every(function(t,e){return t===i[e]})||(e.removeRow(t),this.assignRowToGroup(t,self.groups),this.table.rowManager.refreshActiveData("group",!1,!0))},P.prototype.getExpectedPath=function(t){var e=[],o=t.getData();return this.groupIDLookups.forEach(function(t){e.push(t.func(o))}),e},P.prototype.updateGroupRows=function(t){var e=this,o=[];if(e.groupList.forEach(function(t){o=o.concat(t.getHeadersAndRows())}),t){var i=e.table.rowManager.setDisplayRows(o,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),e.table.rowManager.refreshActiveData("group",!0,!0)}return o},P.prototype.scrollHeaders=function(t){this.table.options.virtualDomHoz&&(t-=this.table.vdomHoz.vDomPadLeft),t+="px",this.groupList.forEach(function(e){e.scrollHeader(t)})},P.prototype.removeGroup=function(t){var e,o=t.level+"_"+t.key;this.groups[o]&&(delete this.groups[o],(e=this.groupList.indexOf(t))>-1&&this.groupList.splice(e,1))},h.prototype.registerModule("groupRows",P);var A=function(t){this.table=t,this.history=[],this.index=-1};A.prototype.clear=function(){this.history=[],this.index=-1},A.prototype.action=function(t,e,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:e,data:o}),this.index++},A.prototype.getHistoryUndoSize=function(){return this.index+1},A.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},A.prototype.clearComponentHistory=function(t){var e=this.history.findIndex(function(e){return e.component===t});e>-1&&(this.history.splice(e,1),e<=this.index&&this.index--,this.clearComponentHistory(t))},A.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},A.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},A.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var e=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,e)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posFrom],!t.data.after),this.table.rowManager.redraw()}},A.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var e=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(t.component,e)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.posTo],t.data.after),this.table.rowManager.redraw()}},A.prototype._rebindRow=function(t,e){this.history.forEach(function(o){if(o.component instanceof l)o.component===t&&(o.component=e);else if(o.component instanceof u&&o.component.row===t){var i=o.component.column.getField();i&&(o.component=e.getCell(i))}})},h.prototype.registerModule("history",A);var _=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};_.prototype.parseTable=function(){var t=this,e=t.table.element,o=t.table.options,i=(o.columns,e.getElementsByTagName("th")),n=e.getElementsByTagName("tbody")[0],s=[];t.hasIndex=!1,t.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],t._extractOptions(e,o),i.length?t._extractHeaders(i,n):t._generateBlankHeaders(i,n);for(var a=0;a<n.length;a++){var r=n[a],l=r.getElementsByTagName("td"),c={};t.hasIndex||(c[o.index]=a);for(var u=0;u<l.length;u++){var d=l[u];void 0!==this.fieldIndex[u]&&(c[this.fieldIndex[u]]=d.innerHTML)}s.push(c)}var h=document.createElement("div"),p=e.attributes;for(var u in p)"object"==_typeof(p[u])&&h.setAttribute(p[u].name,p[u].value);e.parentNode.replaceChild(h,e),o.data=s,t.table.options.htmlImported.call(this.table),this.table.element=h},_.prototype._extractOptions=function(t,e,o){var i=t.attributes,n=o?Object.assign([],o):Object.keys(e),s={};n.forEach(function(t){s[t.toLowerCase()]=t});for(var a in i){var r,l=i[a];l&&"object"==(void 0===l?"undefined":_typeof(l))&&l.name&&0===l.name.indexOf("tabulator-")&&(r=l.name.replace("tabulator-",""),void 0!==s[r]&&(e[s[r]]=this._attribValue(l.value)))}},_.prototype._attribValue=function(t){return"true"===t||"false"!==t&&t},_.prototype._findCol=function(t){return this.table.options.columns.find(function(e){return e.title===t})||!1},_.prototype._extractHeaders=function(t,e){for(var o=0;o<t.length;o++){var i,s=t[o],a=!1,r=this._findCol(s.textContent);r?a=!0:r={title:s.textContent.trim()},r.field||(r.field=s.textContent.trim().toLowerCase().replace(" ","_")),i=s.getAttribute("width"),i&&!r.width&&(r.width=i),s.attributes,this._extractOptions(s,r,n.prototype.defaultOptionList),this.fieldIndex[o]=r.field,r.field==this.table.options.index&&(this.hasIndex=!0),a||this.table.options.columns.push(r)}},_.prototype._generateBlankHeaders=function(t,e){for(var o=0;o<t.length;o++){var i=t[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var s=i.getAttribute("width");s&&(n.width=s),this.table.options.columns.push(n)}},h.prototype.registerModule("htmlTableImport",_);var F=function(t){this.table=t,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};F.prototype.initialize=function(){var t=this.table.options.keybindings,e={};if(this.watchKeys={},this.pressedKeys=[],!1!==t){for(var o in this.bindings)e[o]=this.bindings[o];if(Object.keys(t).length)for(var i in t)e[i]=t[i];this.mapBindings(e),this.bindEvents()}},F.prototype.mapBindings=function(t){var e=this,o=this;for(var i in t)!function(i){e.actions[i]?t[i]&&("object"!==_typeof(t[i])&&(t[i]=[t[i]]),t[i].forEach(function(t){o.mapBinding(i,t)})):console.warn("Key Binding Error - no such action:",i)}(i)},F.prototype.mapBinding=function(t,e){var o=this,i={action:this.actions[t],keys:[],ctrl:!1,shift:!1,meta:!1};e.toString().toLowerCase().split(" ").join("").split("+").forEach(function(t){switch(t){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:t=parseInt(t),i.keys.push(t),o.watchKeys[t]||(o.watchKeys[t]=[]),o.watchKeys[t].push(i)}})},F.prototype.bindEvents=function(){var t=this;this.keyupBinding=function(e){var o=e.keyCode,i=t.watchKeys[o];i&&(t.pressedKeys.push(o),i.forEach(function(o){t.checkBinding(e,o)}))},this.keydownBinding=function(e){var o=e.keyCode;if(t.watchKeys[o]){var i=t.pressedKeys.indexOf(o);i>-1&&t.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},F.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},F.prototype.checkBinding=function(t,e){var o=this,i=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&t.metaKey==e.meta&&(e.keys.forEach(function(t){-1==o.pressedKeys.indexOf(t)&&(i=!1)}),i&&e.action.call(o,t),!0)},F.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},F.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,o=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(o>=0?e.element.scrollTop=o:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,o=e.scrollTop+e.height,i=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(o<=i?e.element.scrollTop=o:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(t.preventDefault(),e=o.nav(),e.next()||i&&(o.getElement().firstChild.blur(),i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i)),i.then(function(){setTimeout(function(){e.next()})})))},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},h.prototype.registerModule("keybindings",F);var N=function(t){this.table=t,this.menuElements=[],this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1,this.positionReversedX=!1};N.prototype.initializeColumnHeader=function(t){var e,o=this;t.definition.headerContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,t.definition.headerContextMenu)),this.tapHold(t,t.definition.headerContextMenu)),t.definition.headerMenu&&(e=document.createElement("span"),e.classList.add("tabulator-header-menu-button"),e.innerHTML="&vellip;",e.addEventListener("click",function(e){e.stopPropagation(),e.preventDefault(),o.LoadMenuEvent(t,t.definition.headerMenu,e)}),t.titleElement.insertBefore(e,t.titleElement.firstChild))},N.prototype.LoadMenuEvent=function(t,e,o){e="function"==typeof e?e.call(this.table,t.getComponent(),o):e,this.loadMenu(o,t,e)},N.prototype.tapHold=function(t,e){var o=this,i=t.getElement(),n=null,s=!1;i.addEventListener("touchstart",function(i){clearTimeout(n),s=!1,n=setTimeout(function(){clearTimeout(n),n=null,s=!0,o.LoadMenuEvent(t,e,i)},1e3)},{passive:!0}),i.addEventListener("touchend",function(t){clearTimeout(n),n=null,s&&t.preventDefault()})},N.prototype.initializeCell=function(t){t.column.definition.contextMenu&&(t.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,t.column.definition.contextMenu)),this.tapHold(t,t.column.definition.contextMenu)),t.column.definition.clickMenu&&t.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,t,t.column.definition.clickMenu))},N.prototype.initializeRow=function(t){this.table.options.rowContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,this.table.options.rowContextMenu)),this.tapHold(t,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&t.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,t,this.table.options.rowClickMenu))},N.prototype.initializeGroup=function(t){this.table.options.groupContextMenu&&(t.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,t,this.table.options.groupContextMenu)),this.tapHold(t,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&t.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,t,this.table.options.groupClickMenu))},N.prototype.loadMenu=function(t,e,o,i){var n=this,s=!(t instanceof MouseEvent),a=document.createElement("div");if(a.classList.add("tabulator-menu"),s||t.preventDefault(),o&&o.length){if(!i){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){n.nestedMenuBlock=!1},100);this.hideMenu(),this.menuElements=[]}o.forEach(function(t){var o=document.createElement("div"),i=t.label,s=t.disabled;t.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof i&&(i=i.call(n.table,e.getComponent())),i instanceof Node?o.appendChild(i):o.innerHTML=i,"function"==typeof s&&(s=s.call(n.table,e.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",function(t){t.stopPropagation()})):t.menu&&t.menu.length?o.addEventListener("click",function(i){i.stopPropagation(),n.hideOldSubMenus(a),n.loadMenu(i,e,t.menu,o)}):t.action&&o.addEventListener("click",function(o){t.action(o,e.getComponent())}),t.menu&&t.menu.length&&o.classList.add("tabulator-menu-item-submenu")),a.appendChild(o)}),a.addEventListener("click",function(t){n.hideMenu()}),this.menuElements.push(a),this.positionMenu(a,i,s,t)}},N.prototype.hideOldSubMenus=function(t){var e=this.menuElements.indexOf(t);if(e>-1)for(var o=this.menuElements.length-1;o>e;o--){var i=this.menuElements[o];i.parentNode&&i.parentNode.removeChild(i),this.menuElements.pop()}},N.prototype.positionMenu=function(t,e,o,i){var n,s,a,r=this,l=Math.max(document.body.offsetHeight,window.innerHeight);e?(a=h.prototype.helpers.elOffset(e),n=a.left+e.offsetWidth,s=a.top-1):(n=o?i.touches[0].pageX:i.pageX,s=o?i.touches[0].pageY:i.pageY,this.positionReversedX=!1),t.style.top=s+"px",t.style.left=n+"px",setTimeout(function(){r.table.rowManager.element.addEventListener("scroll",r.blurEvent),document.body.addEventListener("click",r.blurEvent),document.body.addEventListener("contextmenu",r.blurEvent),window.addEventListener("resize",r.blurEvent),document.body.addEventListener("keydown",r.escEvent)},100),document.body.appendChild(t),s+t.offsetHeight>=l&&(t.style.top="",t.style.bottom=e?l-a.top-e.offsetHeight-1+"px":l-s+"px"),(n+t.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(t.style.left="",t.style.right=e?document.documentElement.offsetWidth-a.left+"px":document.documentElement.offsetWidth-n+"px",this.positionReversedX=!0)},N.prototype.isOpen=function(){return!!this.menuElements.length},N.prototype.escMenu=function(t){27==t.keyCode&&this.hideMenu()},N.prototype.hideMenu=function(){this.menuElements.forEach(function(t){t.parentNode&&t.parentNode.removeChild(t)}),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)},N.prototype.menus={},h.prototype.registerModule("menu",N);var B=function(t){this.table=t,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};B.prototype.createPlaceholderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.classList.add("tabulator-col-placeholder"),t},B.prototype.initializeColumn=function(t){var e,o=this,i={};t.modules.frozen||(e=t.getElement(),i.mousemove=function(i){t.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-h.prototype.helpers.elOffset(e).left+o.table.columnManager.element.scrollLeft>t.getWidth()/2?o.toCol===t&&o.toColAfter||(e.parentNode.insertBefore(o.placeholderElement,e.nextSibling),o.moveColumn(t,!0)):(o.toCol!==t||o.toColAfter)&&(e.parentNode.insertBefore(o.placeholderElement,e),o.moveColumn(t,!1)))}.bind(o),e.addEventListener("mousedown",function(e){o.touchMove=!1,1===e.which&&(o.checkTimeout=setTimeout(function(){o.startMove(e,t)},o.checkPeriod))}),e.addEventListener("mouseup",function(t){1===t.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(t)),
-t.modules.moveColumn=i},B.prototype.bindTouchEvents=function(t){var e,o,i,n,s,a,r,l=this,c=t.getElement(),u=!1;c.addEventListener("touchstart",function(c){l.checkTimeout=setTimeout(function(){l.touchMove=!0,e=t,o=t.nextColumn(),n=o?o.getWidth()/2:0,i=t.prevColumn(),s=i?i.getWidth()/2:0,a=0,r=0,u=!1,l.startMove(c,t)},l.checkPeriod)},{passive:!0}),c.addEventListener("touchmove",function(c){var d,h;l.moving&&(l.moveHover(c),u||(u=c.touches[0].pageX),d=c.touches[0].pageX-u,d>0?o&&d-a>n&&(h=o)!==t&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement().nextSibling),l.moveColumn(h,!0)):i&&-d-r>s&&(h=i)!==t&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement()),l.moveColumn(h,!1)),h&&(e=h,o=h.nextColumn(),a=n,n=o?o.getWidth()/2:0,i=h.prevColumn(),r=s,s=i?i.getWidth()/2:0))},{passive:!0}),c.addEventListener("touchend",function(t){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&l.endMove(t)})},B.prototype.startMove=function(t,e){var o=e.getElement();this.moving=e,this.startX=(this.touchMove?t.touches[0].pageX:t.pageX)-h.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=e.getWidth()+"px",this.placeholderElement.style.height=e.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(t)},B.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(t){t.modules.moveColumn.mousemove&&t.getElement().addEventListener("mousemove",t.modules.moveColumn.mousemove)})},B.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(t){t.modules.moveColumn.mousemove&&t.getElement().removeEventListener("mousemove",t.modules.moveColumn.mousemove)})},B.prototype.moveColumn=function(t,e){var o=this.moving.getCells();this.toCol=t,this.toColAfter=e,e?t.getCells().forEach(function(t,e){var i=t.getElement(!0);i.parentNode.insertBefore(o[e].getElement(),i.nextSibling)}):t.getCells().forEach(function(t,e){var i=t.getElement(!0);i.parentNode.insertBefore(o[e].getElement(),i)})},B.prototype.endMove=function(t){(1===t.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},B.prototype.moveHover=function(t){var e,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?t.touches[0].pageX:t.pageX)-h.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-n<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){e=Math.max(0,n-5),o.table.rowManager.getElement().scrollLeft=e,o.autoScrollTimeout=!1},1))),n+i.clientWidth-s<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){e=Math.min(i.clientWidth,n+5),o.table.rowManager.getElement().scrollLeft=e,o.autoScrollTimeout=!1},1)))},h.prototype.registerModule("moveColumn",B);var O=function(t){this.table=t,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};O.prototype.createPlaceholderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.classList.add("tabulator-row-placeholder"),t},O.prototype.initialize=function(t){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},O.prototype.setHandle=function(t){this.hasHandle=t},O.prototype.initializeGroupHeader=function(t){var e=this,o={};o.mouseup=function(t){e.tableRowDrop(t,row)}.bind(e),o.mousemove=function(o){if(o.pageY-h.prototype.helpers.elOffset(t.element).top+e.table.rowManager.element.scrollTop>t.getHeight()/2){if(e.toRow!==t||!e.toRowAfter){var i=t.getElement();i.parentNode.insertBefore(e.placeholderElement,i.nextSibling),e.moveRow(t,!0)}}else if(e.toRow!==t||e.toRowAfter){var i=t.getElement();i.previousSibling&&(i.parentNode.insertBefore(e.placeholderElement,i),e.moveRow(t,!1))}}.bind(e),t.modules.moveRow=o},O.prototype.initializeRow=function(t){var e,o=this,i={};i.mouseup=function(e){o.tableRowDrop(e,t)}.bind(o),i.mousemove=function(e){var i=t.getElement();e.pageY-h.prototype.helpers.elOffset(i).top+o.table.rowManager.element.scrollTop>t.getHeight()/2?o.toRow===t&&o.toRowAfter||(i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(t,!0)):(o.toRow!==t||o.toRowAfter)&&(i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(t,!1))}.bind(o),this.hasHandle||(e=t.getElement(),e.addEventListener("mousedown",function(e){1===e.which&&(o.checkTimeout=setTimeout(function(){o.startMove(e,t)},o.checkPeriod))}),e.addEventListener("mouseup",function(t){1===t.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(t,t.getElement())),t.modules.moveRow=i},O.prototype.initializeCell=function(t){var e=this,o=t.getElement(!0);o.addEventListener("mousedown",function(o){1===o.which&&(e.checkTimeout=setTimeout(function(){e.startMove(o,t.row)},e.checkPeriod))}),o.addEventListener("mouseup",function(t){1===t.which&&e.checkTimeout&&clearTimeout(e.checkTimeout)}),this.bindTouchEvents(t.row,o)},O.prototype.bindTouchEvents=function(t,e){var o,i,n,s,a,r,l,c=this,u=!1;e.addEventListener("touchstart",function(e){c.checkTimeout=setTimeout(function(){c.touchMove=!0,o=t,i=t.nextRow(),s=i?i.getHeight()/2:0,n=t.prevRow(),a=n?n.getHeight()/2:0,r=0,l=0,u=!1,c.startMove(e,t)},c.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,e.addEventListener("touchmove",function(e){var d,h;c.moving&&(e.preventDefault(),c.moveHover(e),u||(u=e.touches[0].pageY),d=e.touches[0].pageY-u,d>0?i&&d-r>s&&(h=i)!==t&&(u=e.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement().nextSibling),c.moveRow(h,!0)):n&&-d-l>a&&(h=n)!==t&&(u=e.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement()),c.moveRow(h,!1)),h&&(o=h,i=h.nextRow(),r=s,s=i?i.getHeight()/2:0,n=h.prevRow(),l=a,a=n?n.getHeight()/2:0))}),e.addEventListener("touchend",function(t){c.checkTimeout&&clearTimeout(c.checkTimeout),c.moving&&(c.endMove(t),c.touchMove=!1)})},O.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(t){"row"!==t.type&&"group"!==t.type||!t.modules.moveRow.mousemove||t.getElement().addEventListener("mousemove",t.modules.moveRow.mousemove)})},O.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(t){"row"!==t.type&&"group"!==t.type||!t.modules.moveRow.mousemove||t.getElement().removeEventListener("mousemove",t.modules.moveRow.mousemove)})},O.prototype.startMove=function(t,e){var o=e.getElement();this.setStartPosition(t,e),this.moving=e,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=e.getWidth()+"px",this.placeholderElement.style.height=e.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(e)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(t)},O.prototype.setStartPosition=function(t,e){var o,i,n=this.touchMove?t.touches[0].pageX:t.pageX,s=this.touchMove?t.touches[0].pageY:t.pageY;o=e.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},O.prototype.endMove=function(t){t&&1!==t.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},O.prototype.moveRow=function(t,e){this.toRow=t,this.toRowAfter=e},O.prototype.moveHover=function(t){this.connection?this.moveHoverConnections.call(this,t):this.moveHoverTable.call(this,t)},O.prototype.moveHoverTable=function(t){var e=this.table.rowManager.getElement(),o=e.scrollTop,i=(this.touchMove?t.touches[0].pageY:t.pageY)-e.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},O.prototype.moveHoverConnections=function(t){this.hoverElement.style.left=this.startX+(this.touchMove?t.touches[0].pageX:t.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?t.touches[0].pageY:t.pageY)+"px"},O.prototype.elementRowDrop=function(t,e,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(t,e,!!o&&o.getComponent())},O.prototype.connectToTables=function(t){var e,o=this;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:t})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(t){"string"==typeof t?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(t))):o.connectionElements.push(t)}),this.connectionElements.forEach(function(t){var e=function(e){o.elementRowDrop(e,t,o.moving)};t.addEventListener("mouseup",e),t.tabulatorElementDropEvent=e,t.classList.add("tabulator-movingrow-receiving")}))},O.prototype.disconnectFromTables=function(){var t;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(t){t.classList.remove("tabulator-movingrow-receiving"),t.removeEventListener("mouseup",t.tabulatorElementDropEvent),delete t.tabulatorElementDropEvent})},O.prototype.connect=function(t,e){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=t,this.connectedRow=e,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().addEventListener("mouseup",t.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,e,t),!0)},O.prototype.disconnect=function(t){var e=this;t===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),e.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().removeEventListener("mouseup",t.modules.moveRow.mouseup)}),e.table.element.removeEventListener("mouseup",e.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,t)):console.warn("Move Row Error - trying to disconnect from non connected table")},O.prototype.dropComplete=function(t,e,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),e?e.getComponent():void 0,t):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),e?e.getComponent():void 0,t)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),e?e.getComponent():void 0,t);this.endMove()},O.prototype.tableRowDrop=function(t,e){var o=!1,i=!1;switch(console.trace("drop"),t.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:e,success:i})},O.prototype.receivers={insert:function(t,e,o){return this.table.addRow(t.getData(),void 0,e),!0},add:function(t,e,o){return this.table.addRow(t.getData()),!0},update:function(t,e,o){return!!e&&(e.update(t.getData()),!0)},replace:function(t,e,o){return!!e&&(this.table.addRow(t.getData(),void 0,e),e.delete(),!0)}},O.prototype.senders={delete:function(t,e,o){t.delete()}},O.prototype.commsReceived=function(t,e,o){switch(e){case"connect":return this.connect(t,o.row);case"disconnect":return this.disconnect(t);case"dropcomplete":return this.dropComplete(t,o.row,o.success)}},h.prototype.registerModule("moveRow",O);var I=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};I.prototype.initializeColumn=function(t){var e=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,a="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));t.definition[a]&&(s=e.lookupMutator(t.definition[a]))&&(o=!0,i[a]={mutator:s,params:t.definition[a+"Params"]||{}})}),o&&(t.modules.mutate=i)},I.prototype.lookupMutator=function(t){var e=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?e=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":e=t}return e},I.prototype.transformRow=function(t,e,o){var i,n=this,s="mutator"+(e.charAt(0).toUpperCase()+e.slice(1));return this.enabled&&n.table.columnManager.traverse(function(n){var a,r,l;n.modules.mutate&&(a=n.modules.mutate[s]||n.modules.mutate.mutator||!1)&&(i=n.getFieldValue(void 0!==o?o:t),"data"!=e&&void 0===i||(l=n.getComponent(),r="function"==typeof a.params?a.params(i,t,e,l):a.params,n.setFieldValue(t,a.mutator(i,t,e,r,l))))}),t},I.prototype.transformCell=function(t,e){var o=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,t.row.getData()),t.column.setFieldValue(i,e),o.mutator(e,i,"edit",o.params,t.getComponent())):e},I.prototype.enable=function(){this.enabled=!0},I.prototype.disable=function(){this.enabled=!1},I.prototype.mutators={},h.prototype.registerModule("mutator",I);var V=function(t){this.table=t,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};V.prototype.createElements=function(){var t;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),t=document.createElement("button"),t.classList.add("tabulator-page"),t.setAttribute("type","button"),t.setAttribute("role","button"),t.setAttribute("aria-label",""),t.setAttribute("title",""),this.firstBut=t.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=t.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=t.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=t.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},V.prototype.generatePageSizeSelectList=function(){var t=this,e=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))e=this.table.options.paginationSizeSelector,this.pageSizes=e,-1==this.pageSizes.indexOf(this.size)&&e.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){e=[];for(var o=1;o<5;o++)e.push(this.size*o);this.pageSizes=e}else e=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);e.forEach(function(e){var o=document.createElement("option");o.value=e,!0===e?t.table.modules.localize.bind("pagination|all",function(t){o.innerHTML=t}):o.innerHTML=e,t.pageSizeSelect.appendChild(o)}),this.pageSizeSelect.value=this.size}},V.prototype.initialize=function(t){var e,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",function(t){n.firstBut.innerHTML=t}),n.table.modules.localize.bind("pagination|first_title",function(t){n.firstBut.setAttribute("aria-label",t),n.firstBut.setAttribute("title",t)}),n.table.modules.localize.bind("pagination|prev",function(t){n.prevBut.innerHTML=t}),n.table.modules.localize.bind("pagination|prev_title",function(t){n.prevBut.setAttribute("aria-label",t),n.prevBut.setAttribute("title",t)}),n.table.modules.localize.bind("pagination|next",function(t){n.nextBut.innerHTML=t}),n.table.modules.localize.bind("pagination|next_title",function(t){n.nextBut.setAttribute("aria-label",t),n.nextBut.setAttribute("title",t)}),n.table.modules.localize.bind("pagination|last",function(t){n.lastBut.innerHTML=t}),n.table.modules.localize.bind("pagination|last_title",function(t){n.lastBut.setAttribute("aria-label",t),n.lastBut.setAttribute("title",t)}),n.firstBut.addEventListener("click",function(){n.setPage(1).then(function(){}).catch(function(){})}),n.prevBut.addEventListener("click",function(){n.previousPage().then(function(){}).catch(function(){})}),n.nextBut.addEventListener("click",function(){n.nextPage().then(function(){}).catch(function(){})}),n.lastBut.addEventListener("click",function(){n.setPage(n.max).then(function(){}).catch(function(){})}),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(e=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",function(t){n.pageSizeSelect.setAttribute("aria-label",t),n.pageSizeSelect.setAttribute("title",t),e.innerHTML=t}),n.element.appendChild(e),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",function(t){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then(function(){}).catch(function(){})})),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||t||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:(o=document.createElement("div"),o.classList.add("tabulator-row"),o.style.visibility=t,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},V.prototype.initializeProgressive=function(t){this.initialize(!0),this.mode="progressive_"+t,this.progressiveLoad=!0},V.prototype.setDisplayIndex=function(t){this.displayIndex=t},V.prototype.getDisplayIndex=function(){return this.displayIndex},V.prototype.setMaxRows=function(t){this.max=t?!0===this.size?1:Math.ceil(t/this.size):1,this.page>this.max&&(this.page=this.max)},V.prototype.reset=function(t,e){return("local"==this.mode||t)&&(this.page=1),e&&(this.initialLoad=!0),!0},V.prototype.setMaxPage=function(t){t=parseInt(t),this.max=t||1,this.page>this.max&&(this.page=this.max,this.trigger())},V.prototype.setPage=function(t){var e=this,o=this;switch(t){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,n){t=parseInt(t),t>0&&t<=e.max?(e.page=t,e.trigger().then(function(){i()}).catch(function(){n()}),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+e.max+":",t),n())})},V.prototype.setPageToRow=function(t){var e=this;return new Promise(function(o,i){var n=e.table.rowManager.getDisplayRows(e.displayIndex-1),s=n.indexOf(t);if(s>-1){var a=!0===e.size?1:Math.ceil((s+1)/e.size);e.setPage(a).then(function(){o()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},V.prototype.setPageSize=function(t){!0!==t&&(t=parseInt(t)),t>0&&(this.size=t),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},V.prototype._setPageButtons=function(){for(var t=this,e=Math.floor((this.count-1)/2),o=Math.ceil((this.count-1)/2),i=this.max-this.page+e+1<this.count?this.max-this.count+1:Math.max(this.page-e,1),n=this.page<=o?Math.min(this.count,this.max):Math.min(this.page+o,this.max);t.pagesElement.firstChild;)t.pagesElement.removeChild(t.pagesElement.firstChild);1==t.page?(t.firstBut.disabled=!0,t.prevBut.disabled=!0):(t.firstBut.disabled=!1,t.prevBut.disabled=!1),t.page==t.max?(t.lastBut.disabled=!0,t.nextBut.disabled=!0):(t.lastBut.disabled=!1,t.nextBut.disabled=!1);for(var s=i;s<=n;s++)s>0&&s<=t.max&&t.pagesElement.appendChild(t._generatePageButton(s));this.footerRedraw()},V.prototype._generatePageButton=function(t){var e=this,o=document.createElement("button");return o.classList.add("tabulator-page"),t==e.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),e.table.modules.localize.bind("pagination|page_title",function(e){o.setAttribute("aria-label",e+" "+t),o.setAttribute("title",e+" "+t)}),o.setAttribute("data-page",t),o.textContent=t,o.addEventListener("click",function(o){e.setPage(t).then(function(){}).catch(function(){})}),o},V.prototype.previousPage=function(){var t=this;return new Promise(function(e,o){t.page>1?(t.page--,t.trigger().then(function(){e()}).catch(function(){o()}),t.table.options.persistence&&t.table.modExists("persistence",!0)&&t.table.modules.persistence.config.page&&t.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())})},V.prototype.nextPage=function(){var t=this;return new Promise(function(e,o){t.page<t.max?(t.page++,t.trigger().then(function(){e()}).catch(function(){o()}),t.table.options.persistence&&t.table.modExists("persistence",!0)&&t.table.modules.persistence.config.page&&t.table.modules.persistence.save("page")):(t.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+t.max+":",t.max+1),o())})},V.prototype.getPage=function(){return this.page},V.prototype.getPageMax=function(){return this.max},V.prototype.getPageSize=function(t){return this.size},V.prototype.getMode=function(){return this.mode},V.prototype.getRows=function(t){var e,o,i;if("local"==this.mode){e=[],!0===this.size?(o=0,i=t.length):(o=this.size*(this.page-1),i=o+parseInt(this.size)),this._setPageButtons();for(var n=o;n<i;n++)t[n]&&e.push(t[n]);return e}return this._setPageButtons(),t.slice(0)},V.prototype.trigger=function(){var t,e=this;return new Promise(function(o,i){switch(e.mode){case"local":t=e.table.rowManager.scrollLeft,e.table.rowManager.refreshActiveData("page"),e.table.rowManager.scrollHorizontal(t),e.table.options.pageLoaded.call(e.table,e.getPage()),o();break;case"remote":case"progressive_load":case"progressive_scroll":e.table.modules.ajax.blockActiveRequest(),e._getRemotePage().then(function(){o()}).catch(function(){i()});break;default:console.warn("Pagination Error - no such pagination mode:",e.mode),i()}})},V.prototype._getRemotePage=function(){var t,e,o=this,i=this;return new Promise(function(n,s){if(i.table.modExists("ajax",!0)||s(),t=h.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),e=i.table.modules.ajax.getParams(),e[o.dataSentNames.page]=i.page,o.size&&(e[o.dataSentNames.size]=o.size),o.table.options.ajaxSorting&&o.table.modExists("sort")){var a=i.table.modules.sort.getSort();a.forEach(function(t){delete t.column}),e[o.dataSentNames.sorters]=a}if(o.table.options.ajaxFiltering&&o.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);e[o.dataSentNames.filters]=r}i.table.modules.ajax.setParams(e),i.table.modules.ajax.sendRequest(o.progressiveLoad).then(function(t){i._parseRemoteData(t),n()}).catch(function(t){s()}),i.table.modules.ajax.setParams(t)})},V.prototype._parseRemoteData=function(t){var e,t,o,i=this;if(void 0===t[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),t[this.dataReceivedNames.data]){if(this.max=parseInt(t[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(t[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(t[this.dataReceivedNames.data]),this.page<this.max&&setTimeout(function(){i.nextPage().then(function(){}).catch(function(){})},i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":t=this.table.rowManager.getData().concat(t[this.dataReceivedNames.data]),this.table.rowManager.setData(t,!0,this.initialLoad&&1==this.page),o=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+o&&i.nextPage().then(function(){}).catch(function(){})}else e=this.table.rowManager.scrollLeft,this.table.rowManager.setData(t[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(e),this.table.columnManager.scrollHorizontal(e),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},V.prototype.footerRedraw=function(){var t=this.table.footerManager.element;Math.ceil(t.clientWidth)-t.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(t.clientWidth)-t.scrollWidth<0&&(this.pagesElement.style.display="none"))},V.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},V.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},h.prototype.registerModule("page",V);var j=function(t){this.table=t,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};j.prototype.localStorageTest=function(){var t="_tabulator_test";try{return window.localStorage.setItem(t,t),window.localStorage.removeItem(t),!0}catch(t){return!1}},j.prototype.initialize=function(){var t,e=this.table.options.persistenceMode,o=this.table.options.persistenceID;this.mode=!0!==e?e:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(o||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,
-columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(t=this.retreiveData("page"))&&(void 0===t.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=t.paginationSize),void 0===t.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=t.paginationInitialPage)),this.config.group&&(t=this.retreiveData("group"))&&(void 0===t.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=t.groupBy),void 0===t.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=t.groupStartOpen),void 0===t.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=t.groupHeader)),this.config.columns&&this.load("columns",this.table.options.columns)},j.prototype.initializeColumn=function(t){var e,o,i=this;this.config.columns&&(this.defWatcherBlock=!0,e=t.getDefinition(),o=!0===this.config.columns?Object.keys(e):this.config.columns,o.forEach(function(t){var o=Object.getOwnPropertyDescriptor(e,t),n=e[t];o&&Object.defineProperty(e,t,{set:function(t){n=t,i.defWatcherBlock||i.save("columns"),o.set&&o.set(t)},get:function(){return o.get&&o.get(),n}})}),this.defWatcherBlock=!1)},j.prototype.load=function(t,e){var o=this.retreiveData(t);return e&&(o=o?this.mergeDefinition(e,o):e),o},j.prototype.retreiveData=function(t){return!!this.readFunc&&this.readFunc(this.id,t)},j.prototype.mergeDefinition=function(t,e){var o=this,i=[];return e=e||[],e.forEach(function(e,n){var s,a=o._findColumn(t,e);a&&(!0===o.config.columns||void 0==o.config.columns?(s=Object.keys(a),s.push("width")):s=o.config.columns,s.forEach(function(t){"columns"!==t&&void 0!==e[t]&&(a[t]=e[t])}),a.columns&&(a.columns=o.mergeDefinition(a.columns,e.columns)),i.push(a))}),t.forEach(function(t,n){o._findColumn(e,t)||(i.length>n?i.splice(n,0,t):i.push(t))}),i},j.prototype._findColumn=function(t,e){var o=e.columns?"group":e.field?"field":"object";return t.find(function(t){switch(o){case"group":return t.title===e.title&&t.columns.length===e.columns.length;case"field":return t.field===e.field;case"object":return t===e}})},j.prototype.save=function(t){var e={};switch(t){case"columns":e=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":e=this.table.modules.filter.getFilters();break;case"sort":e=this.validateSorters(this.table.modules.sort.getSort());break;case"group":e=this.getGroupConfig();break;case"page":e=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,t,e)},j.prototype.validateSorters=function(t){return t.forEach(function(t){t.column=t.field,delete t.field}),t},j.prototype.getGroupConfig=function(){var t={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(t.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(t.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(t.groupHeader=this.table.options.groupHeader)),t},j.prototype.getPageConfig=function(){var t={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(t.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(t.paginationInitialPage=this.table.modules.page.getPage())),t},j.prototype.parseColumns=function(t){var e=this,o=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return t.forEach(function(t){var n,s={},a=t.getDefinition();t.isGroup?(s.title=a.title,s.columns=e.parseColumns(t.getColumns())):(s.field=t.getField(),!0===e.config.columns||void 0==e.config.columns?(n=Object.keys(a),n.push("width")):n=e.config.columns,n.forEach(function(e){switch(e){case"width":s.width=t.getWidth();break;case"visible":s.visible=t.visible;break;default:"function"!=typeof a[e]&&-1===i.indexOf(e)&&(s[e]=a[e])}})),o.push(s)}),o},j.prototype.readers={local:function(t,e){var o=localStorage.getItem(t+"-"+e);return!!o&&JSON.parse(o)},cookie:function(t,e){var o,i,n=document.cookie,s=t+"-"+e,a=n.indexOf(s+"=");return a>-1&&(n=n.substr(a),o=n.indexOf(";"),o>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},j.prototype.writers={local:function(t,e,o){localStorage.setItem(t+"-"+e,JSON.stringify(o))},cookie:function(t,e,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=t+"-"+e+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},h.prototype.registerModule("persistence",j);var W=function(t){this.table=t,this.element=!1,this.manualBlock=!1};W.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},W.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},W.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},W.prototype.printFullscreen=function(t,e,o){var i,n,s=window.scrollX,a=window.scrollY,r=document.createElement("div"),l=document.createElement("div"),c=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==e?e:this.table.options.printStyled,t,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof i?r.innerHTML=i:r.appendChild(i),this.element.appendChild(r)),this.element.appendChild(c),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof n?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,c),window.print(),this.cleanup(),window.scrollTo(s,a),this.manualBlock=!1},h.prototype.registerModule("print",W);var G=function(t){this.table=t,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};G.prototype.watchData=function(t){var e,o=this;this.currentVersion++,e=this.currentVersion,o.unwatchData(),o.data=t,o.origFuncs.push=t.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||e!==o.currentVersion||i.forEach(function(t){o.table.rowManager.addRowActual(t,!1)}),o.origFuncs.push.apply(t,arguments)}}),o.origFuncs.unshift=t.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||e!==o.currentVersion||i.forEach(function(t){o.table.rowManager.addRowActual(t,!0)}),o.origFuncs.unshift.apply(t,arguments)}}),o.origFuncs.shift=t.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||e!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(t)}}),o.origFuncs.pop=t.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||e!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(t)}}),o.origFuncs.splice=t.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?t.length+n[0]:n[0],a=n[1],r=!!n[2]&&n.slice(2);if(!o.blocked&&e===o.currentVersion){if(r&&(i=!!t[s]&&o.table.rowManager.getRowFromDataObject(t[s]),i?r.forEach(function(t){o.table.rowManager.addRowActual(t,!0,i,!0)}):(r=r.slice().reverse(),r.forEach(function(t){o.table.rowManager.addRowActual(t,!0,!1,!0)}))),0!==a){var l=t.slice(s,void 0===n[1]?n[1]:s+a);l.forEach(function(t,e){var i=o.table.rowManager.getRowFromDataObject(t);i&&i.deleteActual(e!==l.length-1)})}(r||0!==a)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(t,arguments)}})},G.prototype.unwatchData=function(){if(!1!==this.data)for(var t in this.origFuncs)Object.defineProperty(this.data,t,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},G.prototype.watchRow=function(t){var e=t.getData();this.blocked=!0;for(var o in e)this.watchKey(t,e,o);this.table.options.dataTree&&this.watchTreeChildren(t),this.blocked=!1},G.prototype.watchTreeChildren=function(t){function e(){o.table.modules.dataTree.initializeRow(t),o.table.modules.dataTree.layoutRow(t),o.table.rowManager.refreshActiveData("tree",!1,!0)}var o=this,i=t.getData()[this.table.options.dataTreeChildField],n={};i&&(n.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:function(){var t=n.push.apply(i,arguments);return e(),t}}),n.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:function(){var t=n.unshift.apply(i,arguments);return e(),t}}),n.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:function(){var t=n.shift.call(i);return e(),t}}),n.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:function(){var t=n.pop.call(i);return e(),t}}),n.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:function(){var t=n.splice.apply(i,arguments);return e(),t}}))},G.prototype.watchKey=function(t,e,o){var i=this,n=Object.getOwnPropertyDescriptor(e,o),s=e[o],a=this.currentVersion;Object.defineProperty(e,o,{set:function(e){if(s=e,!i.blocked&&a===i.currentVersion){var r={};r[o]=e,t.updateData(r)}n.set&&n.set(e)},get:function(){return n.get&&n.get(),s}})},G.prototype.unwatchRow=function(t){var e=t.getData();for(var o in e)Object.defineProperty(e,o,{value:e[o]})},G.prototype.block=function(){this.blocked=!0},G.prototype.unblock=function(){this.blocked=!1},h.prototype.registerModule("reactiveData",G);var U=function(t){this.table=t,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};U.prototype.initializeColumn=function(t,e,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===t&&(n="textarea"==e.definition.formatter||e.definition.variableHeight,e.modules.resize={variableHeight:n}),!0===s||s==t){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var r=document.createElement("div");r.className="tabulator-col-resize-handle prev",a.addEventListener("click",function(t){t.stopPropagation()});var l=function(t){var o=e.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=e,i._mouseDown(t,o,a))};a.addEventListener("mousedown",l),a.addEventListener("touchstart",l,{passive:!0}),a.addEventListener("dblclick",function(t){var o=e.getLastColumn();o&&i._checkResizability(o)&&(t.stopPropagation(),o.reinitializeWidth(!0))}),r.addEventListener("click",function(t){t.stopPropagation()});var c=function(t){var o,n,s;(o=e.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=e,i._mouseDown(t,s,r)))};r.addEventListener("mousedown",c),r.addEventListener("touchstart",c,{passive:!0}),r.addEventListener("dblclick",function(t){var o,n,s;(o=e.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(t.stopPropagation(),s.reinitializeWidth(!0)))}),o.appendChild(a),o.appendChild(r)}},U.prototype._checkResizability=function(t){return void 0!==t.definition.resizable?t.definition.resizable:this.table.options.resizableColumns},U.prototype._mouseDown=function(t,e,o){function i(t){s.table.rtl?e.setWidth(s.startWidth-((void 0===t.screenX?t.touches[0].screenX:t.screenX)-s.startX)):e.setWidth(s.startWidth+((void 0===t.screenX?t.touches[0].screenX:t.screenX)-s.startX)),s.table.options.virtualDomHoz&&s.table.vdomHoz.reinitialize(!0),!s.table.browserSlow&&e.modules.resize&&e.modules.resize.variableHeight&&e.checkCellHeights()}function n(t){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&e.modules.resize&&e.modules.resize.variableHeight&&e.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,e.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),t.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===t.screenX?t.touches[0].screenX:t.screenX,s.startWidth=e.getWidth(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},h.prototype.registerModule("resizeColumns",U);var X=function(t){this.table=t,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};X.prototype.initializeRow=function(t){var e=this,o=t.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",function(t){t.stopPropagation()});var s=function(o){e.startRow=t,e._mouseDown(o,t,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",function(t){t.stopPropagation()});var a=function(o){var i=e.table.rowManager.prevDisplayRow(t);i&&(e.startRow=i,e._mouseDown(o,i,n))};n.addEventListener("mousedown",a),n.addEventListener("touchstart",a,{passive:!0}),o.appendChild(i),o.appendChild(n)},X.prototype._mouseDown=function(t,e,o){function i(t){e.setHeight(s.startHeight+((void 0===t.screenY?t.touches[0].screenY:t.screenY)-s.startY))}function n(t){document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.rowResized.call(this.table,e.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),t.stopPropagation(),s.startY=void 0===t.screenY?t.touches[0].screenY:t.screenY,s.startHeight=e.getHeight(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},h.prototype.registerModule("resizeRows",X);var q=function(t){this.table=t,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};q.prototype.initialize=function(t){var e,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(t){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var e=Math.floor(t[0].contentRect.height),n=Math.floor(t[0].contentRect.width);o.tableHeight==e&&o.tableWidth==n||(o.tableHeight=e,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())}}),this.observer.observe(i.element),e=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(e.getPropertyValue("max-height")||e.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(t){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var e=Math.floor(t[0].contentRect.height),n=Math.floor(t[0].contentRect.width);o.containerHeight==e&&o.containerWidth==n||(o.containerHeight=e,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&(i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())},window.addEventListener("resize",this.binding))},q.prototype.clearBindings=function(t){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},h.prototype.registerModule("resizeTable",q);var Y=function(t){this.table=t,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};Y.prototype.initialize=function(){var t=this,e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,e.push(o),o.visible||"collapse"!==t.mode||t.hiddenColumns.push(o))}),e=e.reverse(),e=e.sort(function(t,e){return e.modules.responsive.order-t.modules.responsive.order||e.modules.responsive.index-t.modules.responsive.index}),this.columns=e,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0,o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if(n=o.next(),n.done)break;s=n.value}var a=s;if("responsiveCollapse"==a.definition.formatter){this.collapseHandleColumn=a;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},Y.prototype.initializeColumn=function(t){var e=t.getDefinition();t.modules.responsive={order:void 0===e.responsive?1:e.responsive,visible:!1!==e.visible}},Y.prototype.initializeRow=function(t){var e;"calc"!==t.type&&(e=document.createElement("div"),e.classList.add("tabulator-responsive-collapse"),t.modules.responsiveLayout={element:e,open:this.collapseStartOpen},this.collapseStartOpen||(e.style.display="none"))},Y.prototype.layoutRow=function(t){var e=t.getElement();t.modules.responsiveLayout&&(e.appendChild(t.modules.responsiveLayout.element),this.generateCollapsedRowContent(t))},Y.prototype.updateColumnVisibility=function(t,e){t.modules.responsive&&(t.modules.responsive.visible=e,this.initialize())},Y.prototype.hideColumn=function(t){var e=this.hiddenColumns.length;t.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(t),this.generateCollapsedContent(),this.collapseHandleColumn&&!e&&this.collapseHandleColumn.show())},Y.prototype.showColumn=function(t){var e;t.show(!1,!0),t.setWidth(t.getWidth()),"collapse"===this.mode&&(e=this.hiddenColumns.indexOf(t),e>-1&&this.hiddenColumns.splice(e,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},Y.prototype.update=function(){for(var t=this,e=!0;e;){var o="fitColumns"==t.table.modules.layout.getMode()?t.table.columnManager.getFlexBaseWidth():t.table.columnManager.getWidth(),i=(t.table.options.headerVisible?t.table.columnManager.element.clientWidth:t.table.element.clientWidth)-o;if(i<0){var n=t.columns[t.index];n?(t.hideColumn(n),t.index++):e=!1}else{var s=t.columns[t.index-1];s&&i>0&&i>=s.getWidth()?(t.showColumn(s),t.index--):e=!1}t.table.rowManager.activeRowsCount||t.table.rowManager.renderEmptyScroll()}},Y.prototype.generateCollapsedContent=function(){var t=this;this.table.rowManager.getDisplayRows().forEach(function(e){t.generateCollapsedRowContent(e)})},Y.prototype.generateCollapsedRowContent=function(t){var e,o;if(t.modules.responsiveLayout){for(e=t.modules.responsiveLayout.element;e.firstChild;)e.removeChild(e.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(t)),o&&e.appendChild(o)}},Y.prototype.generateCollapsedRowData=function(t){var e,o=this,i=t.getData(),n=[];return this.hiddenColumns.forEach(function(s){var a=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(e={value:!1,data:{},getValue:function(){return a},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return t.getComponent()},getColumn:function(){return s.getComponent()}},n.push({title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,e,s.modules.format.params)})):n.push({title:s.definition.title,value:a}))}),n},Y.prototype.formatCollapsedData=function(t){var e=document.createElement("table"),o="";return t.forEach(function(t){var e=document.createElement("div");t.value instanceof Node&&(e.appendChild(t.value),t.value=e.innerHTML),o+="<tr><td><strong>"+t.title+"</strong></td><td>"+t.value+"</td></tr>"}),e.innerHTML=o,Object.keys(t).length?e:""},h.prototype.registerModule("responsiveLayout",Y);var K=function(t){this.table=t,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};K.prototype.clearSelectionData=function(t){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t||this._rowSelectionChanged()},K.prototype.initializeRow=function(t){var e=this,o=t.getElement(),i=function t(){setTimeout(function(){e.selecting=!1},50),document.body.removeEventListener("mouseup",t)};t.modules.select={selected:!1},e.table.options.selectableCheck.call(this.table,t.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),e.table.options.selectable&&"highlight"!=e.table.options.selectable&&("click"===e.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){e.table._clearSelection(),e.lastClickedRow=e.lastClickedRow||t;var i=e.table.rowManager.getDisplayRowIndex(e.lastClickedRow),n=e.table.rowManager.getDisplayRowIndex(t),s=i<=n?i:n,a=i>=n?i:n,r=e.table.rowManager.getDisplayRows().slice(0),l=r.splice(s,a-s+1);o.ctrlKey||o.metaKey?(l.forEach(function(o){o!==e.lastClickedRow&&(!0===e.table.options.selectable||e.isRowSelected(t)?e.toggleRow(o):e.selectedRows.length<e.table.options.selectable&&e.toggleRow(o))}),e.lastClickedRow=t):(e.deselectRows(void 0,!0),!0!==e.table.options.selectable&&l.length>e.table.options.selectable&&(l=l.slice(0,e.table.options.selectable)),e.selectRows(l)),e.table._clearSelection()}else o.ctrlKey||o.metaKey?(e.toggleRow(t),e.lastClickedRow=t):(e.deselectRows(void 0,!0),e.selectRows(t),e.lastClickedRow=t)}):(o.addEventListener("click",function(o){e.table.modExists("edit")&&e.table.modules.edit.getCurrentCell()||e.table._clearSelection(),e.selecting||e.toggleRow(t)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return e.table._clearSelection(),e.selecting=!0,e.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),e.toggleRow(t),!1}),o.addEventListener("mouseenter",function(o){e.selecting&&(e.table._clearSelection(),e.toggleRow(t),e.selectPrev[1]==t&&e.toggleRow(e.selectPrev[0]))}),o.addEventListener("mouseout",function(o){e.selecting&&(e.table._clearSelection(),e.selectPrev.unshift(t))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},K.prototype.toggleRow=function(t){this.table.options.selectableCheck.call(this.table,t.getComponent())&&(t.modules.select&&t.modules.select.selected?this._deselectRow(t):this._selectRow(t))},K.prototype.selectRows=function(t){var e,o=this;switch(void 0===t?"undefined":_typeof(t)){case"undefined":this.table.rowManager.rows.forEach(function(t){o._selectRow(t,!0,!0)}),this._rowSelectionChanged();break;case"string":e=this.table.rowManager.findRow(t),e?this._selectRow(e,!0,!0):this.table.rowManager.getRows(t).forEach(function(t){o._selectRow(t,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(t)?(t.forEach(function(t){o._selectRow(t,!0,!0)}),this._rowSelectionChanged()):this._selectRow(t,!1,!0)}},K.prototype._selectRow=function(t,e,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(t);i?-1==this.selectedRows.indexOf(i)&&(i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),i.getElement().classList.add("tabulator-selected"),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),e||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(e)):e||console.warn("Selection Error - No such row found, ignoring selection:"+t)},K.prototype.isRowSelected=function(t){return-1!==this.selectedRows.indexOf(t)},K.prototype.deselectRows=function(t,e){var o,i=this;if(void 0===t){o=i.selectedRows.length;for(var n=0;n<o;n++)i._deselectRow(i.selectedRows[0],!0);i._rowSelectionChanged(e)}else Array.isArray(t)?(t.forEach(function(t){i._deselectRow(t,!0)}),i._rowSelectionChanged(e)):i._deselectRow(t,e)},K.prototype._deselectRow=function(t,e){var o,i=this,n=i.table.rowManager.findRow(t);n?(o=i.selectedRows.findIndex(function(t){return t==n}))>-1&&(n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),n.getElement().classList.remove("tabulator-selected"),i.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),e||i.table.options.rowDeselected.call(this.table,n.getComponent()),i._rowSelectionChanged(e)):e||console.warn("Deselection Error - No such row found, ignoring selection:"+t)},K.prototype.getSelectedData=function(){var t=[];return this.selectedRows.forEach(function(e){t.push(e.getData())}),t},K.prototype.getSelectedRows=function(){var t=[];return this.selectedRows.forEach(function(e){t.push(e.getComponent())}),t},K.prototype._rowSelectionChanged=function(t){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),t||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},K.prototype.registerRowSelectCheckbox=function(t,e){t._row.modules.select||(t._row.modules.select={}),t._row.modules.select.checkboxEl=e},K.prototype.registerHeaderSelectCheckbox=function(t){this.headerCheckboxElement=t},K.prototype.childRowSelection=function(t,e){var o=this.table.modules.dataTree.getChildren(t);if(e)for(var i=o,n=Array.isArray(i),s=0,i=n?i:i[Symbol.iterator]();;){var a;if(n){if(s>=i.length)break;a=i[s++]}else{if(s=i.next(),s.done)break;a=s.value}var r=a;this._selectRow(r,!0)}else for(var l=o,c=Array.isArray(l),u=0,l=c?l:l[Symbol.iterator]();;){var d;if(c){if(u>=l.length)break;d=l[u++]}else{if(u=l.next(),u.done)break;d=u.value}var h=d;this._deselectRow(h,!0)}},h.prototype.registerModule("selectRow",K);var J=function(t){this.table=t,this.sortList=[],this.changed=!1};J.prototype.initializeColumn=function(t,e){var o,i,n=this,s=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?s=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":s=t.definition.sorter}t.modules.sort={sorter:s,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc",tristate:void 0!==t.definition.headerSortTristate?t.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===t.definition.headerSort?!1!==this.table.options.headerSort:!1!==t.definition.headerSort)&&(o=t.getElement(),o.classList.add("tabulator-sortable"),i=document.createElement("div"),i.classList.add("tabulator-col-sorter"),"object"==_typeof(this.table.options.headerSortElement)?i.appendChild(this.table.options.headerSortElement):i.innerHTML=this.table.options.headerSortElement,e.appendChild(i),t.modules.sort.element=i,o.addEventListener("click",function(e){var o="",i=[],s=!1;if(t.modules.sort){if(t.modules.sort.tristate)o="none"==t.modules.sort.dir?t.modules.sort.startingDir:t.modules.sort.dir==t.modules.sort.startingDir?"asc"==t.modules.sort.dir?"desc":"asc":"none";else switch(t.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=t.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(i=n.getSort(),s=i.findIndex(function(e){return e.field===t.getField()}),s>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:t,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(t,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},J.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},J.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},J.prototype.setSort=function(t,e){var o=this,i=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=o.table.columnManager.findColumn(t.column),e?(t.column=e,i.push(t),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},J.prototype.clear=function(){this.setSort([])},J.prototype.findSorter=function(t){var e,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),t.getField()))switch(e=t.getFieldValue(o),void 0===e?"undefined":_typeof(e)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},J.prototype.sort=function(t){var e=this,o=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,i=[],n=[];e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?o.forEach(function(t,o){e.setColumnHeader(t.column,t.dir)}):(o.forEach(function(t,o){var n=t.column.modules.sort;t.column&&n&&(n.sorter||(n.sorter=e.findSorter(t.column)),
-t.params="function"==typeof n.params?n.params(t.column.getComponent(),t.dir):n.params,i.push(t)),e.setColumnHeader(t.column,t.dir)}),i.length&&e._sortItems(t,i)),e.table.options.dataSorted&&(t.forEach(function(t){n.push(t.getComponent())}),e.table.options.dataSorted.call(e.table,e.getSort(),n))},J.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},J.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},J.prototype._sortItems=function(t,e){var o=this,i=e.length-1;t.sort(function(t,n){for(var s,a=i;a>=0;a--){var r=e[a];if(0!==(s=o._sortRow(t,n,r.column,r.dir,r.params)))break}return s})},J.prototype._sortRow=function(t,e,o,i,n){var s="asc"==i?t:e,a="asc"==i?e:t;return t=o.getFieldValue(s.getData()),e=o.getFieldValue(a.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",o.modules.sort.sorter.call(this,t,e,void 0,void 0,o.getComponent(),i,n)},J.prototype.sorters={number:function(t,e,o,i,n,s,a){var r=a.alignEmptyValues,l=a.decimalSeparator,c=a.thousandSeparator,u=0;if(t=String(t),e=String(e),c&&(t=t.split(c).join(""),e=e.split(c).join("")),l&&(t=t.split(l).join("."),e=e.split(l).join(".")),t=parseFloat(t),e=parseFloat(e),isNaN(t))u=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;u=1}return("top"===r&&"desc"===s||"bottom"===r&&"asc"===s)&&(u*=-1),u},string:function(t,e,o,i,n,s,a){var r,l=a.alignEmptyValues,c=0;if(t){if(e){switch(_typeof(a.locale)){case"boolean":a.locale&&(r=this.table.modules.localize.getLocale());break;case"string":r=a.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),r)}c=1}else c=e?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c},date:function(t,e,o,i,n,s,a){return a.format||(a.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,o,i,n,s,a)},time:function(t,e,o,i,n,s,a){return a.format||(a.format="HH:mm"),this.sorters.datetime.call(this,t,e,o,i,n,s,a)},datetime:function(t,e,o,i,n,s,a){var r=a.format||"DD/MM/YYYY HH:mm:ss",l=a.alignEmptyValues,c=0;if("undefined"!=typeof moment){if(t=moment(t,r),e=moment(e,r),t.isValid()){if(e.isValid())return t-e;c=1}else c=e.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,o,i,n,s,a){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,o,i,n,s,a){function r(t){switch(u){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,c=0,u=a.type||"length",d=a.alignEmptyValues,h=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?r(t):0,c=e?r(e):0,l-c;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(h*=-1),h},exists:function(t,e,o,i,n,s,a){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,o,i,n,s,a){var r,l,c,u,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=a.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(r=String(t).toLowerCase(),l=String(e).toLowerCase(),r===l)return 0;if(!m.test(r)||!m.test(l))return r>l?1:-1;for(r=r.match(p),l=l.match(p),d=r.length>l.length?l.length:r.length;h<d;)if(c=r[h],u=l[h++],c!==u)return isFinite(c)&&isFinite(u)?("0"===c.charAt(0)&&(c="."+c),"0"===u.charAt(0)&&(u="."+u),c-u):c>u?1:-1;return r.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},h.prototype.registerModule("sort",J);var $=function(t){this.table=t,this.invalidCells=[]};return $.prototype.initializeColumn=function(t){var e,o=this,i=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(e=o._extractValidator(t))&&i.push(e)}):(e=this._extractValidator(t.definition.validator))&&i.push(e),t.modules.validate=!!i.length&&i)},$.prototype._extractValidator=function(t){var e,o,i;switch(void 0===t?"undefined":_typeof(t)){case"string":return i=t.indexOf(":"),i>-1?(e=t.substring(0,i),o=t.substring(i+1)):e=t,this._buildValidator(e,o);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},$.prototype._buildValidator=function(t,e){var o="function"==typeof t?t:this.validators[t];return o?{type:"function"==typeof t?"function":t,func:o,params:e}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},$.prototype.validate=function(t,e,o){var i=this,n=[],s=this.invalidCells.indexOf(e);return t&&t.forEach(function(t){t.func.call(i,e.getComponent(),o,t.params)||n.push({type:t.type,parameters:t.params})}),n=!n.length||n,e.modules.validate||(e.modules.validate={}),!0===n?(e.modules.validate.invalid=!1,e.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(e.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&e.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(e)),n},$.prototype.getInvalidCells=function(){var t=[];return this.invalidCells.forEach(function(e){t.push(e.getComponent())}),t},$.prototype.clearValidation=function(t){var e;t.modules.validate&&t.modules.validate.invalid&&(t.getElement().classList.remove("tabulator-validation-fail"),t.modules.validate.invalid=!1,(e=this.invalidCells.indexOf(t))>-1&&this.invalidCells.splice(e,1))},$.prototype.validators={integer:function(t,e,o){return""===e||null===e||void 0===e||"number"==typeof(e=Number(e))&&isFinite(e)&&Math.floor(e)===e},float:function(t,e,o){return""===e||null===e||void 0===e||"number"==typeof(e=Number(e))&&isFinite(e)&&e%1!=0},numeric:function(t,e,o){return""===e||null===e||void 0===e||!isNaN(e)},string:function(t,e,o){return""===e||null===e||void 0===e||isNaN(e)},max:function(t,e,o){return""===e||null===e||void 0===e||parseFloat(e)<=o},min:function(t,e,o){return""===e||null===e||void 0===e||parseFloat(e)>=o},starts:function(t,e,o){return""===e||null===e||void 0===e||String(e).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(t,e,o){return""===e||null===e||void 0===e||String(e).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(t,e,o){return""===e||null===e||void 0===e||String(e).length>=o},maxLength:function(t,e,o){return""===e||null===e||void 0===e||String(e).length<=o},in:function(t,e,o){return""===e||null===e||void 0===e||("string"==typeof o&&(o=o.split("|")),""===e||o.indexOf(e)>-1)},regex:function(t,e,o){return""===e||null===e||void 0===e||new RegExp(o).test(e)},unique:function(t,e,o){if(""===e||null===e||void 0===e)return!0;var i=!0,n=t.getData(),s=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var o=t.getData();o!==n&&e==s.getFieldValue(o)&&(i=!1)}),i},required:function(t,e,o){return""!==e&&null!==e&&void 0!==e}},h.prototype.registerModule("validate",$),h});
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e,t){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Tabulator=t()}(this,function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=t[n];if(e.call(i,s,n,t))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null==this)throw new TypeError('"this" is null or not defined');var t=Object(this),o=t.length>>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var s=t[n];if(e.call(i,s,n,t))return s;n++}}}),String.prototype.includes||(String.prototype.includes=function(e,t){if(e instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===t&&(t=0),-1!==this.indexOf(e,t)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e,t){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;for(var n=0|t,s=Math.max(n>=0?n:i-Math.abs(n),0);s<i;){if(function(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)}(o[s],e))return!0;s++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null===e||void 0===e)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(e),i=1;i<arguments.length;i++){var n=arguments[i];if(null!==n&&void 0!==n)for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}return o},writable:!0,configurable:!0});var t=function(e){this.table=e,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};t.prototype.createHeadersElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-headers"),e},t.prototype.createHeaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-header"),this.table.options.headerVisible||e.classList.add("tabulator-header-hidden"),e},t.prototype.initialize=function(){},t.prototype.setRowManager=function(e){this.rowManager=e},t.prototype.getElement=function(){return this.element},t.prototype.getHeadersElement=function(){return this.headersElement},t.prototype.scrollHorizontal=function(e){var t=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=e,e>o?(t=e-o,this.element.style.marginLeft=-t+"px"):this.element.style.marginLeft=0,this.scrollLeft=e,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},t.prototype.generateColumnsFromRowData=function(e){var t,o,i=[],n=this.table.options.autoColumnsDefinitions;if(e&&e.length){t=e[0];for(var s in t){var a={field:s,title:s},r=t[s];switch(void 0===r?"undefined":_typeof(r)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(r)?"array":"string";break;default:o=isNaN(r)||""===r?r.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}a.sorter=o,i.push(a)}if(n)switch(void 0===n?"undefined":_typeof(n)){case"function":this.table.options.columns=n.call(this.table,i);break;case"object":Array.isArray(n)?i.forEach(function(e){var t=n.find(function(t){return t.field===e.field});t&&Object.assign(e,t)}):i.forEach(function(e){n[e.field]&&Object.assign(e,n[e.field])}),this.table.options.columns=i}else this.table.options.columns=i;this.setColumns(this.table.options.columns)}},t.prototype.setColumns=function(e,t){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),e.forEach(function(e,t){o._addColumn(e)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),o.redraw(!0)},t.prototype._addColumn=function(e,t,o){var i=new n(e,this),s=i.getElement(),a=o?this.findColumnIndex(o):o;if(o&&a>-1){var r=this.columns.indexOf(o.getTopColumn()),l=o.getElement();t?(this.columns.splice(r,0,i),l.parentNode.insertBefore(s,l)):(this.columns.splice(r+1,0,i),l.parentNode.insertBefore(s,l.nextSibling))}else t?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},t.prototype.registerColumnField=function(e){e.definition.field&&(this.columnsByField[e.definition.field]=e)},t.prototype.registerColumnPosition=function(e){this.columnsByIndex.push(e)},t.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(e){e.reRegisterPosition()})},t.prototype._verticalAlignHeaders=function(){var e=this,t=0;e.columns.forEach(function(e){var o;e.clearVerticalAlign(),(o=e.getHeight())>t&&(t=o)}),e.columns.forEach(function(o){o.verticalAlign(e.table.options.columnHeaderVertAlign,t)}),e.rowManager.adjustTableSize()},t.prototype.findColumn=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e)))return this.columnsByField[e]||!1;if(e instanceof n)return e;if(e instanceof o)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.columns.find(function(t){return t.element===e})||!1}return!1},t.prototype.getColumnByField=function(e){return this.columnsByField[e]},t.prototype.getColumnsByFieldRoot=function(e){var t=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===e&&o.push(t.columnsByField[i])}),o},t.prototype.getColumnByIndex=function(e){return this.columnsByIndex[e]},t.prototype.getFirstVisibileColumn=function(e){var e=this.columnsByIndex.findIndex(function(e){return e.visible});return e>-1&&this.columnsByIndex[e]},t.prototype.getColumns=function(){return this.columns},t.prototype.findColumnIndex=function(e){return this.columnsByIndex.findIndex(function(t){return e===t})},t.prototype.getRealColumns=function(){return this.columnsByIndex},t.prototype.traverse=function(e){this.columnsByIndex.forEach(function(t,o){e(t,o)})},t.prototype.getDefinitions=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){(!e||e&&t.visible)&&o.push(t.getDefinition())}),o},t.prototype.getDefinitionTree=function(){var e=this,t=[];return e.columns.forEach(function(e){t.push(e.getDefinition(!0))}),t},t.prototype.getComponents=function(e){var t=this,o=[];return(e?t.columns:t.columnsByIndex).forEach(function(e){o.push(e.getComponent())}),o},t.prototype.getWidth=function(){var e=0;return this.columnsByIndex.forEach(function(t){t.visible&&(e+=t.getWidth())}),e},t.prototype.moveColumn=function(e,t,o){this.moveColumnActual(e,t,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t.element.parentNode.insertBefore(e.element,t.element),o&&t.element.parentNode.insertBefore(t.element,e.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},t.prototype.moveColumnActual=function(e,t,o){e.parent.isGroup?this._moveColumnInArray(e.parent.columns,e,t,o):this._moveColumnInArray(this.columns,e,t,o),this._moveColumnInArray(this.columnsByIndex,e,t,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,e.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},t.prototype._moveColumnInArray=function(e,t,o,i,n){var s,a=this,r=e.indexOf(t),l=[];r>-1&&(e.splice(r,1),s=e.indexOf(o),s>-1?i&&(s+=1):s=r,e.splice(s,0,t),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach(function(e){l=l.concat(a.table.modules.dataTree.getTreeChildren(e,!1,!0))}),l=l.concat(this.table.rowManager.rows),l.forEach(function(e){if(e.cells.length){var t=e.cells.splice(r,1)[0];e.cells.splice(s,0,t)}})))},t.prototype.scrollToColumn=function(e,t,o){var i=this,n=0,s=0,a=0,r=e.getElement();return new Promise(function(l,c){if(void 0===t&&(t=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),e.visible){switch(t){case"middle":case"center":a=-i.element.clientWidth/2;break;case"right":a=r.clientWidth-i.headersElement.clientWidth}if(!o&&(s=r.offsetLeft)>0&&s+r.offsetWidth<i.element.clientWidth)return!1;n=r.offsetLeft+a,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),l()}else console.warn("Scroll Error - Column not visible"),c("Scroll Error - Column not visible")})},t.prototype.generateCells=function(e){var t=this,o=[];return t.columnsByIndex.forEach(function(t){o.push(t.generateCell(e))}),o},t.prototype.getFlexBaseWidth=function(){var e=this,t=e.table.element.clientWidth,o=0;return e.rowManager.element.scrollHeight>e.rowManager.element.clientHeight&&(t-=e.rowManager.element.offsetWidth-e.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,a;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?e.table.options.columnMinWidth:parseInt(i.minWidth),a="string"==typeof n?n.indexOf("%")>-1?t/100*parseInt(n):parseInt(n):n,o+=a>s?a:s)}),o},t.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var a=i._addColumn(e,t,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(!0),"fitColumns"!=i.table.modules.layout.getMode()&&a.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(),n(a)})},t.prototype.deregisterColumn=function(e){var t,o=e.getField();o&&delete this.columnsByField[o],t=this.columnsByIndex.indexOf(e),t>-1&&this.columnsByIndex.splice(t,1),t=this.columns.indexOf(e),t>-1&&this.columns.splice(t,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()},t.prototype.redraw=function(e){e&&(h.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():e?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var o=function(e){this._column=e,this.type="ColumnComponent"};o.prototype.getElement=function(){return this._column.getElement()},o.prototype.getDefinition=function(){return this._column.getDefinition()},o.prototype.getField=function(){return this._column.getField()},o.prototype.getCells=function(){var e=[];return this._column.cells.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},o.prototype.isVisible=function(){return this._column.visible},o.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.show()}):this._column.show()},o.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(e){e.hide()}):this._column.hide()},o.prototype.toggle=function(){this._column.visible?this.hide():this.show()},o.prototype.delete=function(){return this._column.delete()},o.prototype.getSubColumns=function(){var e=[];return this._column.columns.length&&this._column.columns.forEach(function(t){e.push(t.getComponent())}),e},o.prototype.getParentColumn=function(){return this._column.parent instanceof n&&this._column.parent.getComponent()},o.prototype._getSelf=function(){return this._column},o.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},o.prototype.getTable=function(){return this._column.table},o.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},o.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},o.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},o.prototype.setHeaderFilterValue=function(e){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,e)},o.prototype.move=function(e,t){var o=this._column.table.columnManager.findColumn(e);o?this._column.table.columnManager.moveColumn(this._column,o,t):console.warn("Move Error - No matching column found:",o)},o.prototype.getNextColumn=function(){var e=this._column.nextColumn();return!!e&&e.getComponent()},o.prototype.getPrevColumn=function(){var e=this._column.prevColumn();return!!e&&e.getComponent()},o.prototype.updateDefinition=function(e){return this._column.updateDefinition(e)},o.prototype.getWidth=function(){return this._column.getWidth()},o.prototype.setWidth=function(e){var t;return t=!0===e?this._column.reinitializeWidth(!0):this._column.setWidth(e),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),t},o.prototype.validate=function(){return this._column.validate()};var n=function e(t,o){var i=this;this.table=o.table,this.definition=t,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),t.columns?(this.isGroup=!0,t.columns.forEach(function(t,o){var n=new e(t,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),t.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};n.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.setAttribute("role","columnheader"),e.setAttribute("aria-sort","none"),e},n.prototype.createGroupElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col-group-cols"),e},n.prototype.checkDefinition=function(){var e=this;Object.keys(this.definition).forEach(function(t){-1===e.defaultOptionList.indexOf(t)&&console.warn("Invalid column definition option in '"+(e.field||e.definition.title)+"' column:",t)})},n.prototype.setField=function(e){this.field=e,this.fieldStructure=e?this.table.options.nestedFieldSeparator?e.split(this.table.options.nestedFieldSeparator):[e]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},n.prototype.registerColumnPosition=function(e){this.parent.registerColumnPosition(e)},n.prototype.registerColumnField=function(e){this.parent.registerColumnField(e)},n.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(e){e.reRegisterPosition()}):this.registerColumnPosition(this)},n.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},n.prototype.setTooltip=function(){var e=this,t=e.definition,o=t.headerTooltip||!1===t.tooltip?t.headerTooltip:e.table.options.tooltipsHeader;o?!0===o?t.field?e.table.modules.localize.bind("columns|"+t.field,function(o){e.element.setAttribute("title",o||t.title)}):e.element.setAttribute("title",t.title):("function"==typeof o&&!1===(o=o(e.getComponent()))&&(o=""),e.element.setAttribute("title",o)):e.element.setAttribute("title","")},n.prototype._buildHeader=function(){for(var e=this,t=e.definition;e.element.firstChild;)e.element.removeChild(e.element.firstChild);t.headerVertical&&(e.element.classList.add("tabulator-col-vertical"),"flip"===t.headerVertical&&e.element.classList.add("tabulator-col-vertical-flip")),e.contentElement=e._bindEvents(),e.contentElement=e._buildColumnHeaderContent(),e.element.appendChild(e.contentElement),e.isGroup?e._buildGroupHeader():e._buildColumnHeader(),e.setTooltip(),e.table.options.resizableColumns&&e.table.modExists("resizeColumns")&&e.table.modules.resizeColumns.initializeColumn("header",e,e.element),t.headerFilter&&e.table.modExists("filter")&&e.table.modExists("edit")&&(void 0!==t.headerFilterPlaceholder&&t.field&&e.table.modules.localize.setHeaderFilterColumnPlaceholder(t.field,t.headerFilterPlaceholder),e.table.modules.filter.initializeColumn(e)),e.table.modExists("frozenColumns")&&e.table.modules.frozenColumns.initializeColumn(e),e.table.options.movableColumns&&!e.isGroup&&e.table.modExists("moveColumn")&&e.table.modules.moveColumn.initializeColumn(e),(t.topCalc||t.bottomCalc)&&e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.initializeColumn(e),e.table.modExists("persistence")&&e.table.modules.persistence.config.columns&&e.table.modules.persistence.initializeColumn(e),e.element.addEventListener("mouseenter",function(t){e.setTooltip()})},n.prototype._bindEvents=function(){var e,t,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(e){n.headerClick(e,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(e){n.headerDblClick(e,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(e){n.headerContext(e,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&n.headerTap(e,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.headerDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),"function"==typeof n.headerTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.headerTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},n.prototype._buildColumnHeader=function(){var e=this,t=this.definition,o=this.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(t.headerContextMenu||t.headerClickMenu||t.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==t.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==t.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==t.visible&&(t.visible?this.show(!0):this.hide(!0)),t.cssClass){t.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}t.field&&this.element.setAttribute("tabulator-field",t.field),this.setMinWidth(void 0===t.minWidth?this.table.options.columnMinWidth:parseInt(t.minWidth)),(t.maxWidth||this.table.options.columnMaxWidth)&&!1!==t.maxWidth&&this.setMaxWidth(void 0===t.maxWidth?this.table.options.columnMaxWidth:parseInt(t.maxWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign},n.prototype._buildColumnHeaderContent=function(){var e=(this.definition,this.table,document.createElement("div"));return e.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),e.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),e},n.prototype._buildColumnHeaderTitle=function(){var e=this,t=e.definition,o=e.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),t.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(e){e.stopPropagation(),n.focus()}),n.addEventListener("change",function(){t.title=n.value,o.options.columnTitleChanged.call(e.table,e.getComponent())}),i.appendChild(n),t.field?o.modules.localize.bind("columns|"+t.field,function(e){n.value=e||t.title||"&nbsp;"}):n.value=t.title||"&nbsp;"}else t.field?o.modules.localize.bind("columns|"+t.field,function(o){e._formatColumnHeaderTitle(i,o||t.title||"&nbsp;")}):e._formatColumnHeaderTitle(i,t.title||"&nbsp;");return i},n.prototype._formatColumnHeaderTitle=function(e,t){var o,i,n,s,a,r=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),a=function(e){r.titleFormatterRendered=e},s={getValue:function(){return t},getElement:function(){return e}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,s,n,a),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?e.appendChild(i):(e.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":e.innerHTML="";break;default:e.innerHTML=i}else e.innerHTML=t},n.prototype._buildGroupHeader=function(){var e=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(t){e.element.classList.add(t)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign,this.element.appendChild(this.groupElement)},n.prototype._getFlatData=function(e){return e[this.field]},n.prototype._getNestedData=function(e){for(var t,o=e,i=this.fieldStructure,n=i.length,s=0;s<n&&(o=o[i[s]],t=o,o);s++);return t},n.prototype._setFlatData=function(e,t){this.field&&(e[this.field]=t)},n.prototype._setNestedData=function(e,t){for(var o=e,i=this.fieldStructure,n=i.length,s=0;s<n;s++)if(s==n-1)o[i[s]]=t;else{if(!o[i[s]]){if(void 0===t)break;o[i[s]]={}}o=o[i[s]]}},n.prototype.attachColumn=function(e){var t=this;t.groupElement?(t.columns.push(e),t.groupElement.appendChild(e.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},n.prototype.verticalAlign=function(e,t){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:t||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===e||(this.element.style.paddingTop="bottom"===e?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach(function(t){t.verticalAlign(e)})},n.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach(function(e){e.clearVerticalAlign()})},n.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},n.prototype.getElement=function(){return this.element},n.prototype.getGroupElement=function(){return this.groupElement},n.prototype.getField=function(){return this.field},n.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},n.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},n.prototype.getColumns=function(){return this.columns},n.prototype.getCells=function(){return this.cells},n.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},n.prototype.getDefinition=function(e){var t=[];return this.isGroup&&e&&(this.columns.forEach(function(e){t.push(e.getDefinition(!0))}),this.definition.columns=t),this.definition},n.prototype.checkColumnVisibility=function(){var e=!1;this.columns.forEach(function(t){t.visible&&(e=!0)}),e?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},n.prototype.show=function(e,t){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(e){e.show()}),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!t&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),e||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},n.prototype.hide=function(e,t){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(e){e.hide()}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!t&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),e||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},n.prototype.matchChildWidths=function(){var e=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}),this.contentElement.style.maxWidth=e-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},n.prototype.removeChild=function(e){var t=this.columns.indexOf(e);t>-1&&this.columns.splice(t,1),this.columns.length||this.delete()},n.prototype.setWidth=function(e){this.widthFixed=!0,this.setWidthActual(e)},n.prototype.setWidthActual=function(e){isNaN(e)&&(e=Math.floor(this.table.element.clientWidth/100*parseInt(e))),e=Math.max(this.minWidth,e),this.maxWidth&&(e=Math.min(this.maxWidth,e)),this.width=e,this.widthStyled=e?e+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(e){e.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},n.prototype.checkCellHeights=function(){var e=[]
+;this.cells.forEach(function(t){t.row.heightInitialized&&(null!==t.row.getElement().offsetParent?(e.push(t.row),t.row.clearCellHeight()):t.row.heightInitialized=!1)}),e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()})},n.prototype.getWidth=function(){var e=0;return this.isGroup?this.columns.forEach(function(t){t.visible&&(e+=t.getWidth())}):e=this.width,e},n.prototype.getHeight=function(){return this.element.offsetHeight},n.prototype.setMinWidth=function(e){this.minWidth=e,this.minWidthStyled=e?e+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(e){e.setMinWidth()})},n.prototype.setMaxWidth=function(e){this.maxWidth=e,this.maxWidthStyled=e?e+"px":"",this.element.style.maxWidth=this.maxWidthStyled,this.cells.forEach(function(e){e.setMaxWidth()})},n.prototype.delete=function(){var e=this;return new Promise(function(t,o){e.isGroup&&e.columns.forEach(function(e){e.delete()}),e.table.modExists("edit")&&e.table.modules.edit.currentCell.column===e&&e.table.modules.edit.cancelEdit();for(var i=e.cells.length,n=0;n<i;n++)e.cells[0].delete();e.element.parentNode&&e.element.parentNode.removeChild(e.element),e.element=!1,e.contentElement=!1,e.titleElement=!1,e.groupElement=!1,e.parent.isGroup&&e.parent.removeChild(e),e.table.columnManager.deregisterColumn(e),e.table.options.virtualDomHoz&&e.table.vdomHoz.reinitialize(!0),t()})},n.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},n.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},n.prototype.generateCell=function(e){var t=this,o=new u(t,e);return this.cells.push(o),o},n.prototype.nextColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._nextVisibleColumn(e+1)},n.prototype._nextVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._nextVisibleColumn(e+1)},n.prototype.prevColumn=function(){var e=this.table.columnManager.findColumnIndex(this);return e>-1&&this._prevVisibleColumn(e-1)},n.prototype._prevVisibleColumn=function(e){var t=this.table.columnManager.getColumnByIndex(e);return!t||t.visible?t:this._prevVisibleColumn(e-1)},n.prototype.reinitializeWidth=function(e){this.widthFixed=!1,void 0===this.definition.width||e||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},n.prototype.fitToData=function(){var e=this;this.widthFixed||(this.element.style.width="",e.cells.forEach(function(e){e.clearWidth()}));var t=this.element.offsetWidth;e.width&&this.widthFixed||(e.cells.forEach(function(e){var o=e.getWidth();o>t&&(t=o)}),t&&e.setWidthActual(t+1))},n.prototype.updateDefinition=function(e){var t=this;return new Promise(function(o,i){var n;t.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):t.parent.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},t.getDefinition()),n=Object.assign(n,e),t.table.columnManager.addColumn(n,!1,t).then(function(e){n.field==t.field&&(t.field=!1),t.delete().then(function(){o(e.getComponent())}).catch(function(e){i(e)})}).catch(function(e){i(e)}))})},n.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},n.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","maxWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],n.prototype.getComponent=function(){return this.component||(this.component=new o(this)),this.component};var s=function(e){this.table=e,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};s.prototype.createHolderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-tableHolder"),e.setAttribute("tabindex",0),e},s.prototype.createTableElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-table"),e},s.prototype.getElement=function(){return this.element},s.prototype.getTableElement=function(){return this.tableElement},s.prototype.getRowPosition=function(e,t){return t?this.activeRows.indexOf(e):this.rows.indexOf(e)},s.prototype.setColumnManager=function(e){this.columnManager=e},s.prototype.initialize=function(){var e=this;e.setRenderMode(),e.element.appendChild(e.tableElement),e.firstRender=!0,e.element.addEventListener("scroll",function(){var t=e.element.scrollLeft;e.scrollLeft!=t&&(e.columnManager.scrollHorizontal(t),e.table.options.groupBy&&e.table.modules.groupRows.scrollHeaders(t),e.table.modExists("columnCalcs")&&e.table.modules.columnCalcs.scrollHorizontal(t),e.table.options.scrollHorizontal(t)),e.scrollLeft=t}),"virtual"===this.renderMode&&e.element.addEventListener("scroll",function(){var t=e.element.scrollTop,o=e.scrollTop>t;e.scrollTop!=t?(e.scrollTop=t,e.scrollVertical(o),"scroll"==e.table.options.ajaxProgressiveLoad&&e.table.modules.ajax.nextPage(e.element.scrollHeight-e.element.clientHeight-t),e.table.options.scrollVertical(t)):e.scrollTop=t})},s.prototype.findRow=function(e){var t=this;if("object"!=(void 0===e?"undefined":_typeof(e))){if(void 0===e||null===e)return!1;return t.rows.find(function(o){return o.data[t.table.options.index]==e})||!1}if(e instanceof l)return e;if(e instanceof r)return e._getSelf()||!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement){return t.rows.find(function(t){return t.getElement()===e})||!1}return!1},s.prototype.getRowFromDataObject=function(e){return this.rows.find(function(t){return t.data===e})||!1},s.prototype.getRowFromPosition=function(e,t){return t?this.activeRows[e]:this.rows[e]},s.prototype.scrollToRow=function(e,t,o){var i,n=this,s=this.getDisplayRows().indexOf(e),a=e.getElement(),r=0;return new Promise(function(e,l){if(s>-1){if(void 0===t&&(t=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===t)switch(n.renderMode){case"classic":i=h.prototype.helpers.elOffset(a).top,t=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":t=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&h.prototype.helpers.elVisible(a)&&(r=h.prototype.helpers.elOffset(a).top-h.prototype.helpers.elOffset(n.element).top)>0&&r<n.element.clientHeight-a.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=h.prototype.helpers.elOffset(a).top-h.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(s,!0)}switch(t){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(a.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-a.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-a.offsetTop)+a.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+a.offsetHeight}e()}else console.warn("Scroll Error - Row not visible"),l("Scroll Error - Row not visible")})},s.prototype.setData=function(e,t,o){var i=this,n=this;return new Promise(function(s,a){t&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(e,!0):i.reRenderInPosition(function(){n._setDataActual(e)}):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(e),i.resetScroll(),i._setDataActual(e)),s()})},s.prototype._setDataActual=function(e,t){var o=this;o.table.options.dataLoading.call(this.table,e),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(e)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(e),e.forEach(function(e,t){if(e&&"object"===(void 0===e?"undefined":_typeof(e))){var i=new l(e,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",e)}),o.refreshActiveData(!1,!1,t),o.table.options.dataLoaded.call(this.table,e)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===e?"undefined":_typeof(e),"\nData:     ",e)},s.prototype._wipeElements=function(){this.rows.forEach(function(e){e.wipe()}),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()},s.prototype.deleteRow=function(e,t){var o=this.rows.indexOf(e),i=this.activeRows.indexOf(e);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(t){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,e.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},s.prototype.addRow=function(e,t,o,i){var n=this.addRowActual(e,t,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:e,pos:t,index:o}),n},s.prototype.addRows=function(e,t,o){var i=this,n=this,s=0,a=[];return new Promise(function(r,l){t=i.findAddRowPos(t),Array.isArray(e)||(e=[e]),s=e.length-1,(void 0===o&&t||void 0!==o&&!t)&&e.reverse(),e.forEach(function(e,i){var s=n.addRow(e,t,o,!0);a.push(s)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),r(a)})},s.prototype.findAddRowPos=function(e){return void 0===e&&(e=this.table.options.addRowPos),"pos"===e&&(e=!0),"bottom"===e&&(e=!1),e},s.prototype.addRowActual=function(e,t,o,i){var n,s,a=e instanceof l?e:new l(e||{},this),r=this.findAddRowPos(t),c=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(s=this.getDisplayRows(),r?s.length?o=s[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],r=!1):s.length&&(o=s[s.length-1],r=!(s.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(a);var u=a.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?r?u[0]!==a&&(o=u[0],this._moveRowInArray(a.getGroup().rows,a,o,!r)):u[u.length-1]!==a&&(o=u[u.length-1],this._moveRowInArray(a.getGroup().rows,a,o,!r)):this._moveRowInArray(a.getGroup().rows,a,o,!r))}return o&&(c=this.rows.indexOf(o)),o&&c>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(e){var t=e.indexOf(o);t>-1&&e.splice(r?t:t+1,0,a)}),n>-1&&this.activeRows.splice(r?n:n+1,0,a),this.rows.splice(r?c:c+1,0,a)):r?(this.displayRowIterator(function(e){e.unshift(a)}),this.activeRows.unshift(a),this.rows.unshift(a)):(this.displayRowIterator(function(e){e.push(a)}),this.activeRows.push(a),this.rows.push(a)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,a.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),i||this.reRenderInPosition(),a},s.prototype.moveRow=function(e,t,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",e,{posFrom:this.getRowPosition(e),posTo:this.getRowPosition(t),to:t,after:o}),this.moveRowActual(e,t,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,e.getComponent())},s.prototype.moveRowActual=function(e,t,o){var i=this;if(this._moveRowInArray(this.rows,e,t,o),this._moveRowInArray(this.activeRows,e,t,o),this.displayRowIterator(function(n){i._moveRowInArray(n,e,t,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&t instanceof H&&(t=this.table.rowManager.prevDisplayRow(e)||t);var n=t.getGroup(),s=e.getGroup();n===s?this._moveRowInArray(n.rows,e,t,o):(s&&s.removeRow(e),n.insertRow(e,t,o))}},s.prototype._moveRowInArray=function(e,t,o,i){var n,s,a,r;if(t!==o&&(n=e.indexOf(t),n>-1&&(e.splice(n,1),s=e.indexOf(o),s>-1?i?e.splice(s+1,0,t):e.splice(s,0,t):e.splice(n,0,t)),e===this.getDisplayRows())){a=n<s?n:s,r=s>n?s:n+1;for(var l=a;l<=r;l++)e[l]&&this.styleRow(e[l],l)}},s.prototype.clearData=function(){this.setData([])},s.prototype.getRowIndex=function(e){return this.findRowIndex(e,this.rows)},s.prototype.getDisplayRowIndex=function(e){var t=this.getDisplayRows().indexOf(e);return t>-1&&t},s.prototype.nextDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof l&&"row"==i.type?i:this.nextDisplayRow(i,t)},s.prototype.prevDisplayRow=function(e,t){var o=this.getDisplayRowIndex(e),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!t||!i||i instanceof l&&"row"==i.type?i:this.prevDisplayRow(i,t)},s.prototype.findRowIndex=function(e,t){var o;return!!((e=this.findRow(e))&&(o=t.indexOf(e))>-1)&&o},s.prototype.getData=function(e,t){var o=[];return this.getRows(e).forEach(function(e){"row"==e.type&&o.push(e.getData(t||"data"))}),o},s.prototype.getComponents=function(e){var t=[];return this.getRows(e).forEach(function(e){t.push(e.getComponent())}),t},s.prototype.getDataCount=function(e){return this.getRows(e).length},s.prototype._genRemoteRequest=function(){var e=this,t=this.table,o=t.options,i={};if(t.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(e){delete e.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=s}this.table.modules.ajax.setParams(i,!0)}t.modules.ajax.sendRequest().then(function(t){e._setDataActual(t,!0)}).catch(function(e){})},s.prototype.filterRefresh=function(){var e=this.table,t=e.options,o=this.scrollLeft;t.ajaxFiltering?"remote"==t.pagination&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):t.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},s.prototype.sorterRefresh=function(e){var t=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(e?"filter":"sort"),this.scrollHorizontal(i)},s.prototype.scrollHorizontal=function(e){this.scrollLeft=e,this.element.scrollLeft=e,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(e),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(e)},s.prototype.refreshActiveData=function(e,t,o){var i,n=this,s=this.table,a=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||a.indexOf(e)<a.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:e,skipStage:t,renderInPosition:o}));switch(n.table.modExists("edit")&&n.table.modules.edit.cancelEdit(),e||(e="all"),s.options.selectable&&!s.options.selectablePersistence&&s.modExists("selectRow")&&s.modules.selectRow.deselectRows(),e){case"all":case"filter":t?t=!1:s.modExists("filter")?n.setActiveRows(s.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":t?t=!1:s.modExists("sort")&&s.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":t?t=!1:this.table.modExists("frozenRows")&&s.modules.frozenRows.isFrozen()&&(s.modules.frozenRows.getDisplayIndex()||s.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.frozenRows.setDisplayIndex(i));case"group":t?t=!1:s.options.groupBy&&s.modExists("groupRows")&&(s.modules.groupRows.getDisplayIndex()||s.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.groupRows.setDisplayIndex(i));case"tree":t?t=!1:s.options.dataTree&&s.modExists("dataTree")&&(s.modules.dataTree.getDisplayIndex()||s.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&s.modules.dataTree.setDisplayIndex(i)),s.options.pagination&&s.modExists("page")&&!o&&"local"==s.modules.page.getMode()&&s.modules.page.reset();case"page":t?t=!1:s.options.pagination&&s.modExists("page")&&(s.modules.page.getDisplayIndex()||s.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.page.getDisplayIndex(),"local"==s.modules.page.getMode()&&s.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(s.modules.page.getRows(this.getDisplayRows(i-1)),i))&&s.modules.page.setDisplayIndex(i))}h.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():("all"===e&&this.table.options.virtualDomHoz&&this.table.vdomHoz.dataChange(),n.renderTable(),s.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),s.modExists("columnCalcs")&&s.modules.columnCalcs.recalc(this.activeRows)},s.prototype.regenerateRowNumbers=function(){var e=this;this.rowNumColumn&&this.activeRows.forEach(function(t){var o=t.getCell(e.rowNumColumn);o&&o._generateContents()})},s.prototype.setActiveRows=function(e){this.activeRows=e,this.activeRowsCount=this.activeRows.length},s.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},s.prototype.getNextDisplayIndex=function(){return this.displayRows.length},s.prototype.setDisplayRows=function(e,t){var o=!0;return t&&void 0!==this.displayRows[t]?(this.displayRows[t]=e,o=!0):(this.displayRows.push(e),o=t=this.displayRows.length-1),t==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},s.prototype.getDisplayRows=function(e){return void 0===e?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[e]||[]},s.prototype.getVisibleRows=function(e){var t=this.element.scrollTop,o=this.element.clientHeight+t,i=!1,n=0,s=0,a=this.getDisplayRows();if(e){this.getDisplayRows();for(var r=this.vDomTop;r<=this.vDomBottom;r++)if(a[r])if(i){if(!(o-a[r].getElement().offsetTop>=0))break;s=r}else if(t-a[r].getElement().offsetTop>=0)n=r;else{if(i=!0,!(o-a[r].getElement().offsetTop>=0))break;s=r}}else n=this.vDomTop,s=this.vDomBottom;return a.slice(n,s+1)},s.prototype.displayRowIterator=function(e){this.displayRows.forEach(e),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},s.prototype.getRows=function(e){var t;switch(e){case"active":t=this.activeRows;break;case"display":t=this.table.rowManager.getDisplayRows();break;case"visible":t=this.getVisibleRows(!0);break;case"selected":t=this.table.modules.selectRow.selectedRows;break;default:t=this.rows}return t},s.prototype.reRenderInPosition=function(e){if("virtual"==this.getRenderMode())if(this.redrawBlock)e?e():this.redrawBlockRederInPosition=!0;else{for(var t=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a]){var r=t-s[a].getElement().offsetTop;if(!(!1===i||Math.abs(r)<i))break;i=r,o=a}e&&e(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),e&&e()},s.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},s.prototype.getRenderMode=function(){return this.renderMode},s.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},s.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},s.prototype.checkClassicModeGroupHeaderWidth=function(){var e=this,t=this.tableElement,o=!0;e.getDisplayRows().forEach(function(i,n){e.styleRow(i,n),t.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)}),t.style.minWidth=o?e.table.columnManager.getWidth()+"px":""},s.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"},s.prototype._clearVirtualDom=function(){var e=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);e.firstChild;)e.removeChild(e.firstChild);e.style.paddingTop="",e.style.paddingBottom="",e.style.minWidth="",e.style.minHeight="",e.style.display="",e.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},s.prototype.styleRow=function(e,t){var o=e.getElement();t%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},s.prototype._virtualRenderFill=function(e,t,o){var i=this,n=i.tableElement,s=i.element,a=0,r=0,l=0,c=0,u=!0,d=i.getDisplayRows();if(e=e||0,o=o||0,e){for(;n.firstChild;)n.removeChild(n.firstChild);var p=(i.displayRowsCount-e+1)*i.vDomRowHeight;p<i.height&&(e-=Math.ceil((i.height-p)/i.vDomRowHeight))<0&&(e=0),a=Math.min(Math.max(Math.floor(i.vDomWindowBuffer/i.vDomRowHeight),i.vDomWindowMinMarginRows),e),e-=a}else i._clearVirtualDom();if(i.displayRowsCount&&h.prototype.helpers.elVisible(i.element)){for(i.vDomTop=e,i.vDomBottom=e-1;(r<=i.height+i.vDomWindowBuffer||c<i.vDomWindowMinTotalRows)&&i.vDomBottom<i.displayRowsCount-1;){var m=i.vDomBottom+1,f=d[m],g=0;i.styleRow(f,m),n.appendChild(f.getElement()),f.initialize(),f.heightInitialized||f.normalizeHeight(!0),g=f.getHeight(),c<a?l+=g:r+=g,g>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*g),"group"!==f.type&&(u=!1),i.vDomBottom++,c++}e?(i.vDomTopPad=t?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-l,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-r-l,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((r+l)/c),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=l+r+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",t&&(this.scrollTop=i.vDomTopPad+l+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&t&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,s.scrollTop=this.scrollTop,n.style.minWidth=u?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},s.prototype.scrollVertical=function(e){var t=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-t>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else e?(t<0&&this._addTopRow(-t),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(t>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(t):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},s.prototype._addTopRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],a=s.getHeight()||this.vDomRowHeight;e>=a&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=a,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=a,this.vDomTop--),e=-(this.scrollTop-this.vDomScrollPosTop),s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t<this.vDomMaxRenderChain&&this.vDomTop&&e>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(e,t+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},s.prototype._removeTopRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,t.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,e=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(e)}},s.prototype._addBottomRow=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,s=i[n],a=s.getHeight()||this.vDomRowHeight;e>=a&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=a,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=a,this.vDomBottom++),e=this.scrollTop-this.vDomScrollPosBottom,s.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*s.getHeight()),t<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&e>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(e,t+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},s.prototype._removeBottomRow=function(e){var t=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(e>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),t.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,e=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(e)}},s.prototype._quickNormalizeRowHeight=function(e){e.forEach(function(e){e.calcHeight()}),e.forEach(function(e){e.setCellHeight()}),e.length=0},s.prototype.normalizeHeight=function(){this.activeRows.forEach(function(e){e.normalizeHeight()})},s.prototype.adjustTableSize=function(){var e,t=this.element.clientHeight;if("virtual"===this.renderMode){
+var o=Math.floor(this.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||t==this.element.clientHeight||((e=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!e)&&this.redraw()}},s.prototype.reinitialize=function(){this.rows.forEach(function(e){e.reinitialize(!0)})},s.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},s.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},s.prototype.redraw=function(e){var t=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,e?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(t)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},s.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var e=document.createEvent("Event");e.initEvent("scroll",!1,!0),this.element.dispatchEvent(e)}else this.element.dispatchEvent(new Event("scroll"))};var a=function(e){this.table=e,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()};a.prototype.compatabilityCheck=function(){var e=this.table.options,t=!0;return"fitDataTable"==e.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),t=!1),e.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),t=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),t=!1),e.columns&&e.columns.find(function(e){return e.frozen})&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),t=!1),t||(e.virtualDomHoz=!1),t},a.prototype.initialize=function(){var e=this;this.holderEl.addEventListener("scroll",function(){var t=e.holderEl.scrollLeft;e.scrollLeft!=t&&(e.scrollLeft=t,e.scroll(t-(e.vDomScrollPosLeft+e.window)))})},a.prototype.deinitialize=function(){this.initialized=!1},a.prototype.clear=function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0},a.prototype.dataChange=function(){var e,t,o,i=!1,n=0,s=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach(function(e){!e.definition.width&&e.visible&&(i=!0)}),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,this.table.options.groupBy?(e=this.table.modules.groupRows.getGroups(!1)[0],t=e.getRows(!1)[0]):t=this.table.rowManager.getDisplayRows()[0],t)){o=t.getElement(),t.generateCells(),this.element.appendChild(o);for(var s=0;s<t.cells.length;s++){var a=t.cells[s];if(o.appendChild(a.getElement()),a.column.reinitializeWidth(),(n+=a.column.getWidth())>this.vDomScrollPosRight)break}for(o.parentNode.removeChild(o),this.fitDataColAvg=Math.floor(n/(s+1)),s;s<this.table.columnManager.columnsByIndex.length;s++)this.table.columnManager.columnsByIndex[s].setWidth(this.fitDataColAvg);this.reinitialize(!1,!0)}}else"fitColumns"===this.table.options.layout&&(this.table.modules.layout.layout(),this.table.vdomHoz.reinitialize(!1,!0))},a.prototype.fitDataLayoutOverride=function(){for(var e=this.leftCol;e<=this.rightCol;e++)this.columns[e].reinitializeWidth()},a.prototype.reinitialize=function(e,t){var o=this,i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!e||this.initialized){this.clear(),this.scrollLeft=this.holderEl.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window;var n=0;this.table.columnManager.columnsByIndex.forEach(function(e){var t={};if(e.visible){var i=e.getWidth();t.leftPos=n,t.rightPos=n+i,n+i>o.vDomScrollPosLeft&&n<o.vDomScrollPosRight?(-1==o.leftCol&&(o.leftCol=o.columns.length,o.vDomPadLeft=n),o.rightCol=o.columns.length):-1!==o.leftCol&&(o.vDomPadRight+=i),o.columns.push(e),e.modules.vdomHoz=t,n+=i}}),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.element.style.paddingRight=this.vDomPadRight+"px",this.initialized=!0,t||e&&!this.reinitChanged(i)||this.renitializeRows(),this.holderEl.scrollLeft=this.scrollLeft}},a.prototype.reinitChanged=function(e){var t=this,o=!0;return e.cols.length!==this.columns.length||e.leftCol!==this.leftCol||e.rightCol!==this.rightCol||(e.cols.forEach(function(e,i){e!==t.columns[i]&&(o=!1)}),!o)},a.prototype.renitializeRows=function(){var e=this;this.table.rowManager.getVisibleRows().forEach(function(t){e.reinitializeRow(t,!0)})},a.prototype.scroll=function(e){this.vDomScrollPosLeft+=e,this.vDomScrollPosRight+=e,e>.8*this.holderEl.clientWidth?this.reinitialize():e>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())},a.prototype.colPositionAdjust=function(e,t,o){for(var i=e;i<t;i++){var n=this.columns[i];n.modules.vdomHoz.leftPos-=o,n.modules.vdomHoz.rightPos-=o}},a.prototype.addColRight=function(){var e,t,o,i=this.columns[this.rightCol+1];i&&i.modules.vdomHoz.leftPos<=this.vDomScrollPosRight&&(e=this.table.rowManager.getVisibleRows(),e.forEach(function(e){if("group"!==e.type){var t=e.getCell(i);e.getElement().appendChild(t.getElement()),t.cellRendered()}}),this.fitDataColAvg&&(t=i.getWidth())===this.fitDataColAvg&&(i.reinitializeWidth(),(o=t-i.getWidth())&&(i.modules.vdomHoz.rightPos-=o,this.colPositionAdjust(this.rightCol+1,this.columns.length,o))),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())},a.prototype.addColLeft=function(){var e=this.columns[this.leftCol-1];if(e&&e.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){this.table.rowManager.getVisibleRows().forEach(function(t){if("group"!==t.type){var o=t.getCell(e);t.getElement().prepend(o.getElement()),o.cellRendered()}}),this.leftCol?this.vDomPadLeft-=e.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft()}},a.prototype.removeColRight=function(e){var t,e=this.columns[this.rightCol];e&&e.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),e.modules.vdomHoz.visible=!1,t.forEach(function(t){if("group"!==t.type){var o=t.getCell(e);t.getElement().removeChild(o.getElement())}}),this.vDomPadRight+=e.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())},a.prototype.removeColLeft=function(){var e,t=this.columns[this.leftCol];t&&t.modules.vdomHoz.rightPos<this.vDomScrollPosLeft&&(e=this.table.rowManager.getVisibleRows(),e.forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}}),this.vDomPadLeft+=t.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())},a.prototype.initializeRow=function(e){if("group"!==e.type){e.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(var t=this.leftCol;t<=this.rightCol;t++){var o=this.columns[t];if(o&&o.visible){var i=e.getCell(o);e.getElement().appendChild(i.getElement()),i.cellRendered()}}}},a.prototype.reinitializeRow=function(e,t){if("group"!==e.type&&(t||!e.modules.vdomHoz||e.modules.vdomHoz.leftCol!==this.leftCol||e.modules.vdomHoz.rightCol!==this.rightCol)){for(var o=e.getElement();o.firstChild;)o.removeChild(o.firstChild);this.initializeRow(e)}};var r=function(e){this._row=e};r.prototype.getData=function(e){return this._row.getData(e)},r.prototype.getElement=function(){return this._row.getElement()},r.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},r.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},r.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},r.prototype.getPosition=function(e){return this._row.table.rowManager.getRowPosition(this._row,e)},r.prototype.delete=function(){return this._row.delete()},r.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},r.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},r.prototype.move=function(e,t){this._row.moveToRow(e,t)},r.prototype.update=function(e){return this._row.updateData(e)},r.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},r.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},r.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},r.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},r.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},r.prototype._getSelf=function(){return this._row},r.prototype.validate=function(){return this._row.validate()},r.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},r.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},r.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},r.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},r.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},r.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},r.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},r.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)},r.prototype.addTreeChild=function(e,t,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,e,t,o)},r.prototype.reformat=function(){return this._row.reinitialize()},r.prototype.getGroup=function(){return this._row.getGroup().getComponent()},r.prototype.getTable=function(){return this._row.table},r.prototype.getNextRow=function(){var e=this._row.nextRow();return e?e.getComponent():e},r.prototype.getPrevRow=function(){var e=this._row.prevRow();return e?e.getComponent():e};var l=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=t.table,this.parent=t,this.data={},this.type=o,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(e)};l.prototype.create=function(){this.created||(this.created=!0,this.generateElement())},l.prototype.createElement=function(){var e=document.createElement("div");e.classList.add("tabulator-row"),e.setAttribute("role","row"),this.element=e},l.prototype.getElement=function(){return this.create(),this.element},l.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},l.prototype.generateElement=function(){var e,t,o,i=this;this.createElement(),!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),(i.table.options.rowContextMenu||i.table.options.rowClickMenu)&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(e){i.table.options.rowClick(e,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(e){i.table.options.rowDblClick(e,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(e){i.table.options.rowContext(e,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(e){i.table.options.rowMouseEnter(e,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(e){i.table.options.rowMouseLeave(e,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(e){i.table.options.rowMouseOver(e,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(e){i.table.options.rowMouseOut(e,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(e){i.table.options.rowMouseMove(e,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(e){o&&i.table.options.rowTap(e,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(e=null,i.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,i.table.options.rowDblTap(t,i.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),i.table.options.rowTapHold&&(t=null,i.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,i.table.options.rowTapHold(e,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(e){clearTimeout(t),t=null}))},l.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},l.prototype.initialize=function(e){var t=this;if(this.create(),!this.initialized||e){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach(function(e){t.element.appendChild(e.getElement()),e.cellRendered()}),e&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)},l.prototype.reinitializeHeight=function(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)},l.prototype.reinitialize=function(e){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach(function(e){e.reinitialize(!0)})},l.prototype.calcHeight=function(e){var t=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(e){var o=e.getHeight();o>t&&(t=o)}),this.height=e?Math.max(t,o):this.manualHeight?this.height:Math.max(t,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},l.prototype.setCellHeight=function(){this.cells.forEach(function(e){e.setHeight()}),this.heightInitialized=!0},l.prototype.clearCellHeight=function(){this.cells.forEach(function(e){e.clearHeight()})},l.prototype.normalizeHeight=function(e){e&&this.clearCellHeight(),this.calcHeight(e),this.setCellHeight()},l.prototype.setHeight=function(e,t){(this.height!=e||t)&&(this.manualHeight=!0,this.height=e,this.heightStyled=e?e+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},l.prototype.getHeight=function(){return this.outerHeight},l.prototype.getWidth=function(){return this.element.offsetWidth},l.prototype.deleteCell=function(e){var t=this.cells.indexOf(e);t>-1&&this.cells.splice(t,1)},l.prototype.setData=function(e){this.table.modExists("mutator")&&(e=this.table.modules.mutator.transformRow(e,"data")),this.data=e,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},l.prototype.updateData=function(e){var t,o=this,i=this.element&&h.prototype.helpers.elVisible(this.element),n={};return new Promise(function(s,a){"string"==typeof e&&(e=JSON.parse(e)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,e),t=o.table.modules.mutator.transformRow(n,"data",e)):t=e;for(var r in t)o.data[r]=t[r];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var r in e){o.table.columnManager.getColumnsByFieldRoot(r).forEach(function(e){var n=o.getCell(e.getField());if(n){var s=e.getFieldValue(t);n.getValue()!=s&&(n.setValueProcessData(s),i&&n.cellRendered())}})}o.table.options.groupUpdateOnCellEdit&&o.table.options.groupBy&&o.table.modExists("groupRows")&&o.table.modules.groupRows.reassignRowToGroup(o.row),i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(e)&&(o.table.modules.dataTree.initializeRow(o),i&&(o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0))),o.table.options.rowUpdated.call(o.table,o.getComponent()),o.table.options.dataChanged&&o.table.options.dataChanged.call(o.table,o.table.rowManager.getData()),s()})},l.prototype.getData=function(e){return e&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,e):this.data},l.prototype.getCell=function(e){return e=this.table.columnManager.findColumn(e),this.cells.find(function(t){return t.column===e})},l.prototype.getCellIndex=function(e){return this.cells.findIndex(function(t){return t===e})},l.prototype.findNextEditableCell=function(e){var t=!1;if(e<this.cells.length-1)for(var o=e+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&h.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){t=i;break}}}return t},l.prototype.findPrevEditableCell=function(e){var t=!1;if(e>0)for(var o=e-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&h.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){t=i;break}}return t},l.prototype.getCells=function(){return this.cells},l.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},l.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},l.prototype.moveToRow=function(e,t){var o=this.table.rowManager.findRow(e);o?(this.table.rowManager.moveRowActual(this,o,!t),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",e)},l.prototype.validate=function(){var e=[];return this.cells.forEach(function(t){t.validate()||e.push(t.getComponent())}),!e.length||e},l.prototype.delete=function(){var e=this;return new Promise(function(t,o){var i,n;e.table.options.history&&e.table.modExists("history")&&(e.table.options.groupBy&&e.table.modExists("groupRows")?(n=e.getGroup().rows,(i=n.indexOf(e))&&(i=n[i-1])):(i=e.table.rowManager.getRowIndex(e))&&(i=e.table.rowManager.rows[i-1]),e.table.modules.history.action("rowDelete",e,{data:e.getData(),pos:!i,index:i})),e.deleteActual(),t()})},l.prototype.deleteActual=function(e){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,e),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},l.prototype.detatchModules=function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)},l.prototype.deleteCells=function(){for(var e=this.cells.length,t=0;t<e;t++)this.cells[0].delete()},l.prototype.wipe=function(){if(this.detatchModules(),this.deleteCells(),this.element){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.parentNode&&this.element.parentNode.removeChild(this.element)}this.element=!1,this.modules={}},l.prototype.getGroup=function(){return this.modules.group||!1},l.prototype.getComponent=function(){return this.component||(this.component=new r(this)),this.component};var c=function(e){this._cell=e};c.prototype.getValue=function(){return this._cell.getValue()},c.prototype.getOldValue=function(){return this._cell.getOldValue()},c.prototype.getInitialValue=function(){return this._cell.initialValue},c.prototype.getElement=function(){return this._cell.getElement()},c.prototype.getRow=function(){return this._cell.row.getComponent()},c.prototype.getData=function(){return this._cell.row.getData()},c.prototype.getField=function(){return this._cell.column.getField()},c.prototype.getColumn=function(){return this._cell.column.getComponent()},c.prototype.setValue=function(e,t){void 0===t&&(t=!0),this._cell.setValue(e,t)},c.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},c.prototype.restoreInitialValue=function(){this._cell.setValueActual(this._cell.initialValue)},c.prototype.edit=function(e){return this._cell.edit(e)},c.prototype.cancelEdit=function(){this._cell.cancelEdit()},c.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},c.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},c.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},c.prototype.validate=function(){return this._cell.validate()},c.prototype.clearValidation=function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},c.prototype.nav=function(){return this._cell.nav()},c.prototype.checkHeight=function(){this._cell.checkHeight()},c.prototype.getTable=function(){return this._cell.table},c.prototype._getSelf=function(){return this._cell};var u=function(e,t){this.table=e.table,this.column=e,this.row=t,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()};u.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value},u.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},u.prototype._configureCell=function(){var e=this,t=e.column.cellEvents,o=e.element,i=this.column.getField(),n={top:"flex-start",bottom:"flex-end",middle:"center"},s={left:"flex-start",right:"flex-end",center:"center"};if(o.style.textAlign=e.column.hozAlign,e.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems=n[e.column.vertAlign]||"",e.column.hozAlign&&(o.style.justifyContent=s[e.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),e.column.definition.cssClass){e.column.definition.cssClass.split(" ").forEach(function(e){o.classList.add(e)})}"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",function(t){e._generateTooltip()}),e._bindClickEvents(t),e._bindTouchEvents(t),e._bindMouseEvents(t),e.column.modules.edit&&e.table.modules.edit.bindEditor(e),e.column.definition.rowHandle&&!1!==e.table.options.movableRows&&e.table.modExists("moveRow")&&e.table.modules.moveRow.initializeCell(e),e.column.visible||e.hide()},u.prototype._bindClickEvents=function(e){var t=this,o=t.element;(e.cellClick||t.table.options.cellClick)&&o.addEventListener("click",function(o){var i=t.getComponent();e.cellClick&&e.cellClick.call(t.table,o,i),t.table.options.cellClick&&t.table.options.cellClick.call(t.table,o,i)}),e.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",function(o){var i=t.getComponent();e.cellDblClick&&e.cellDblClick.call(t.table,o,i),t.table.options.cellDblClick&&t.table.options.cellDblClick.call(t.table,o,i)}):o.addEventListener("dblclick",function(e){if(!t.table.modExists("edit")||t.table.modules.edit.currentCell!==t){e.preventDefault();try{if(document.selection){var o=document.body.createTextRange();o.moveToElementText(t.element),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(t.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(e){}}}),(e.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",function(o){var i=t.getComponent();e.cellContext&&e.cellContext.call(t.table,o,i),t.table.options.cellContext&&t.table.options.cellContext.call(t.table,o,i)})},u.prototype._bindMouseEvents=function(e){var t=this,o=t.element;(e.cellMouseEnter||t.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",function(o){var i=t.getComponent();e.cellMouseEnter&&e.cellMouseEnter.call(t.table,o,i),t.table.options.cellMouseEnter&&t.table.options.cellMouseEnter.call(t.table,o,i)}),(e.cellMouseLeave||t.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",function(o){var i=t.getComponent();e.cellMouseLeave&&e.cellMouseLeave.call(t.table,o,i),t.table.options.cellMouseLeave&&t.table.options.cellMouseLeave.call(t.table,o,i)}),(e.cellMouseOver||t.table.options.cellMouseOver)&&o.addEventListener("mouseover",function(o){var i=t.getComponent();e.cellMouseOver&&e.cellMouseOver.call(t.table,o,i),t.table.options.cellMouseOver&&t.table.options.cellMouseOver.call(t.table,o,i)}),(e.cellMouseOut||t.table.options.cellMouseOut)&&o.addEventListener("mouseout",function(o){var i=t.getComponent();e.cellMouseOut&&e.cellMouseOut.call(t.table,o,i),t.table.options.cellMouseOut&&t.table.options.cellMouseOut.call(t.table,o,i)}),(e.cellMouseMove||t.table.options.cellMouseMove)&&o.addEventListener("mousemove",function(o){var i=t.getComponent();e.cellMouseMove&&e.cellMouseMove.call(t.table,o,i),t.table.options.cellMouseMove&&t.table.options.cellMouseMove.call(t.table,o,i)})},u.prototype._bindTouchEvents=function(e){var t,o,i,n=this,s=n.element;(e.cellTap||this.table.options.cellTap)&&(i=!1,s.addEventListener("touchstart",function(e){i=!0},{passive:!0}),s.addEventListener("touchend",function(t){if(i){var o=n.getComponent();e.cellTap&&e.cellTap.call(n.table,t,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,t,o)}i=!1})),(e.cellDblTap||this.table.options.cellDblTap)&&(t=null,s.addEventListener("touchend",function(o){if(t){clearTimeout(t),t=null;var i=n.getComponent();e.cellDblTap&&e.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else t=setTimeout(function(){clearTimeout(t),t=null},300)})),(e.cellTapHold||this.table.options.cellTapHold)&&(o=null,s.addEventListener("touchstart",function(t){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,i=!1;var s=n.getComponent();e.cellTapHold&&e.cellTapHold.call(n.table,t,s),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,t,s)},1e3)},{passive:!0}),s.addEventListener("touchend",function(e){clearTimeout(o),o=null}))},u.prototype._generateContents=function(){var e;switch(e=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value,void 0===e?"undefined":_typeof(e)){case"object":if(e instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(e)}else this.element.innerHTML="",null!=e&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",e);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=e}},u.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},u.prototype._generateTooltip=function(){var e=this.column.tooltip;e?(!0===e?e=this.value:"function"==typeof e&&!1===(e=e(this.getComponent()))&&(e=""),void 0===e&&(e=""),this.element.setAttribute("title",e)):this.element.setAttribute("title","")},u.prototype.getElement=function(e){return this.loaded||(this.loaded=!0,e||this.layoutElement()),this.element},u.prototype.getValue=function(){return this.value},u.prototype.getOldValue=function(){return this.oldValue},u.prototype.setValue=function(e,t){var o,i=this.setValueProcessData(e,t);i&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),
+this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))},u.prototype.setValueProcessData=function(e,t){var o=!1;return this.value!=e&&(o=!0,t&&this.column.modules.mutate&&(e=this.table.modules.mutator.transformCell(this,e))),this.setValueActual(e),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},u.prototype.setValueActual=function(e){this.oldValue=this.value,this.value=e,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,e),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()},u.prototype.layoutElement=function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},u.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},u.prototype.clearWidth=function(){this.width="",this.element.style.width=""},u.prototype.getWidth=function(){return this.width||this.element.offsetWidth},u.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},u.prototype.setMaxWidth=function(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled},u.prototype.checkHeight=function(){this.row.reinitializeHeight()},u.prototype.clearHeight=function(){this.element.style.height="",this.height=null},u.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},u.prototype.getHeight=function(){return this.height||this.element.offsetHeight},u.prototype.show=function(){this.element.style.display=this.column.vertAlign?"inline-flex":""},u.prototype.hide=function(){this.element.style.display="none"},u.prototype.edit=function(e){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,e)},u.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var e=this.table.modules.edit.getCurrentCell();e&&e._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},u.prototype.validate=function(){if(this.column.modules.validate&&this.table.modExists("validate",!0)){return!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}return!0},u.prototype.delete=function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},u.prototype.nav=function(){var e=this,t=!1,o=this.row.getCellIndex(this);return{next:function(){var t,o=this.right();return!!o||!(!(t=e.table.rowManager.nextDisplayRow(e.row,!0))||!(o=t.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var t,o=this.left();return!!o||!(!(t=e.table.rowManager.prevDisplayRow(e.row,!0))||!(o=t.findPrevEditableCell(t.cells.length)))&&(o.edit(),!0)},left:function(){return!!(t=e.row.findPrevEditableCell(o))&&(t.edit(),!0)},right:function(){return!!(t=e.row.findNextEditableCell(o))&&(t.edit(),!0)},up:function(){var t=e.table.rowManager.prevDisplayRow(e.row,!0);t&&t.cells[o].edit()},down:function(){var t=e.table.rowManager.nextDisplayRow(e.row,!0);t&&t.cells[o].edit()}}},u.prototype.getIndex=function(){this.row.getCellIndex(this)},u.prototype.getComponent=function(){return this.component||(this.component=new c(this)),this.component};var d=function(e){this.table=e,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};d.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-footer"),e},d.prototype._initialize=function(e){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},d.prototype.getElement=function(){return this.element},d.prototype.append=function(e,t){this.activate(t),this.element.appendChild(e),this.table.rowManager.adjustTableSize()},d.prototype.prepend=function(e,t){this.activate(t),this.element.insertBefore(e,this.element.firstChild),this.table.rowManager.adjustTableSize()},d.prototype.remove=function(e){e.parentNode.removeChild(e),this.deactivate()},d.prototype.deactivate=function(e){this.element.firstChild&&!e||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},d.prototype.activate=function(e){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),e&&this.links.push(e)},d.prototype.redraw=function(){this.links.forEach(function(e){e.footerRedraw()})};var h=function e(t,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(t)&&(this.initializeOptions(o||{}),this._create()),e.prototype.comms.register(this)};h.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnMaxWidth:!1,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"<div class='tabulator-arrow'></div>",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(e,t){return t},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(e,t){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:!1,dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},h.prototype.initializeOptions=function(e){if(!1!==e.invalidOptionWarnings)for(var t in e)void 0===this.defaultOptions[t]&&console.warn("Invalid table constructor option:",t);for(var t in this.defaultOptions)t in e?this.options[t]=e[t]:Array.isArray(this.defaultOptions[t])?this.options[t]=Object.assign([],this.defaultOptions[t]):"object"===_typeof(this.defaultOptions[t])&&null!==this.defaultOptions[t]?this.options[t]=Object.assign({},this.defaultOptions[t]):this.options[t]=this.defaultOptions[t]},h.prototype.initializeElement=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement?(this.element=e,!0):"string"==typeof e?(this.element=document.querySelector(e),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",e),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",e),!1)},h.prototype.rtlCheck=function(){var e=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==e.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}},h.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.dataEdited&&(console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"),this.options.dataChanged=this.options.dataEdited),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},h.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},h.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new t(this),this.rowManager=new s(this),this.footerManager=new d(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new a(this)),this._buildElement(),this._loadInitialData()},h.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},h.prototype._buildElement=function(){var e=this,t=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),t.classList.add("tabulator"),t.setAttribute("role","grid");t.firstChild;)t.removeChild(t.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",t.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",t.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",t.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),o.localize.initialize(),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(var n in i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var s=document.createElement("div");s.classList.add("tabulator-placeholder");var a=document.createElement("span");a.innerHTML=i.placeholder,s.appendChild(a),i.placeholder=s}if(t.appendChild(this.columnManager.getElement()),t.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(r=o.persistence.load("sort"))&&i.initialSort&&(r=i.initialSort):i.initialSort&&(r=i.initialSort),o.sort.setSort(r)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var l=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(l=o.persistence.load("filter"))&&i.initialFilter&&(l=i.initialFilter):i.initialFilter&&(l=i.initialFilter),o.filter.setFilter(l)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach(function(t){var i=e.columnManager.findColumn(t.field);if(!i)return console.warn("Column Filter Error - No matching column found:",t.field),!1;o.filter.setHeaderFilterValue(i,t.value)}),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},h.prototype._loadInitialData=function(){var e=this;if(e.options.pagination&&e.modExists("page"))if(e.modules.page.reset(!0,!0),"local"==e.options.pagination){if(e.options.data.length)e.rowManager.setData(e.options.data,!1,!0);else{if((e.options.ajaxURL||e.options.ajaxURLGenerator)&&e.modExists("ajax"))return void e.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){e.options.paginationInitialPage&&e.modules.page.setPage(e.options.paginationInitialPage)});e.rowManager.setData(e.options.data,!1,!0)}e.options.paginationInitialPage&&e.modules.page.setPage(e.options.paginationInitialPage)}else e.options.ajaxURL?e.modules.page.setPage(e.options.paginationInitialPage).then(function(){}).catch(function(){}):e.rowManager.setData([],!1,!0);else e.options.data.length?e.rowManager.setData(e.options.data):(e.options.ajaxURL||e.options.ajaxURLGenerator)&&e.modExists("ajax")?e.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){}):e.rowManager.setData(e.options.data,!1,!0)},h.prototype.destroy=function(){var e=this.element;for(h.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach(function(e){e.wipe()}),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();e.firstChild;)e.removeChild(e.firstChild);e.classList.remove("tabulator")},h.prototype._detectBrowser=function(){var e=navigator.userAgent||navigator.vendor||window.opera;e.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):e.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):e.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))},h.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},h.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},h.prototype.setDataFromLocalFile=function(e){var t=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=e||".json,application/json",n.addEventListener("change",function(e){var s,a=n.files[0],r=new FileReader;r.readAsText(a),r.onload=function(e){try{s=JSON.parse(r.result)}catch(e){return console.warn("File Load Error - File contents is invalid JSON",e),void i(e)}t.setData(s).then(function(e){o(e)}).catch(function(e){o(e)})},r.onerror=function(e){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},h.prototype.setData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!1,!0)},h.prototype._setData=function(e,t,o,i,n){var s=this;return"string"!=typeof e?e?s.rowManager.setData(e,i,n):s.modExists("ajax")&&(s.modules.ajax.getUrl||s.options.ajaxURLGenerator)?"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n):s.rowManager.setData([],i,n):0==e.indexOf("{")||0==e.indexOf("[")?s.rowManager.setData(JSON.parse(e),i,n):s.modExists("ajax",!0)?(t&&s.modules.ajax.setParams(t),o&&s.modules.ajax.setConfig(o),s.modules.ajax.setUrl(e),"remote"==s.options.pagination&&s.modExists("page",!0)?(s.modules.page.reset(!0,!0),s.modules.page.setPage(1)):s.modules.ajax.loadData(i,n)):void 0},h.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},h.prototype.getData=function(e){return!0===e&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getData(e)},h.prototype.getDataCount=function(e){return!0===e&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getDataCount(e)},h.prototype.searchRows=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",e,t,o)},h.prototype.searchData=function(e,t,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",e,t,o)},h.prototype.getHtml=function(e,t,o){if(this.modExists("export",!0))return this.modules.export.getHtml(e,t,o)},h.prototype.print=function(e,t,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(e,t,o)},h.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},h.prototype.replaceData=function(e,t,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(e,t,o,!0)},h.prototype.updateData=function(e){var t=this,o=this,i=0;return new Promise(function(n,s){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);t&&(i++,t.updateData(e).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},h.prototype.addData=function(e,t,o){var i=this;return new Promise(function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?i.rowManager.addRows(e,t,o).then(function(e){var t=[];e.forEach(function(e){t.push(e.getComponent())}),n(t)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},h.prototype.updateOrAddData=function(e){var t=this,o=this,i=[],n=0;return new Promise(function(s,a){t.modExists("ajax")&&t.modules.ajax.blockActiveRequest(),"string"==typeof e&&(e=JSON.parse(e)),e?e.forEach(function(e){var t=o.rowManager.findRow(e[o.options.index]);n++,t?t.updateData(e).then(function(){n--,i.push(t.getComponent()),n||s(i)}):o.rowManager.addRows(e).then(function(e){n--,i.push(e[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),a("Update Error - No data provided"))})},h.prototype.getRow=function(e){var t=this.rowManager.findRow(e);return t?t.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},h.prototype.getRowFromPosition=function(e,t){var o=this.rowManager.getRowFromPosition(e,t);return o?o.getComponent():(console.warn("Find Error - No matching row found:",e),!1)},h.prototype.deleteRow=function(e){var t=this;return new Promise(function(o,i){function n(){++a==e.length&&r&&(s.rowManager.reRenderInPosition(),o())}var s=t,a=0,r=0,l=[];Array.isArray(e)||(e=[e]),e.forEach(function(e){var o=t.rowManager.findRow(e,!0);o?l.push(o):(console.warn("Delete Error - No matching row found:",e),i("Delete Error - No matching row found"),n())}),l.sort(function(e,o){return t.rowManager.rows.indexOf(e)>t.rowManager.rows.indexOf(o)?1:-1}),l.forEach(function(e){e.delete().then(function(){r++,n()}).catch(function(e){n(),i(e)})})})},h.prototype.addRow=function(e,t,o){var i=this;return new Promise(function(n,s){"string"==typeof e&&(e=JSON.parse(e)),i.rowManager.addRows(e,t,o).then(function(e){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(e[0].getComponent())})})},h.prototype.updateOrAddRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(e){n(e)}):s=o.rowManager.addRows(t).then(function(e){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(e[0].getComponent())}).catch(function(e){n(e)})})},h.prototype.updateRow=function(e,t){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(e);"string"==typeof t&&(t=JSON.parse(t)),s?s.updateData(t).then(function(){i(s.getComponent())}).catch(function(e){n(e)}):(console.warn("Update Error - No matching row found:",e),n("Update Error - No matching row found"))})},h.prototype.scrollToRow=function(e,t,o){var i=this;return new Promise(function(n,s){var a=i.rowManager.findRow(e);a?i.rowManager.scrollToRow(a,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching row found:",e),s("Scroll Error - No matching row found"))})},h.prototype.moveRow=function(e,t,o){var i=this.rowManager.findRow(e);i?i.moveToRow(t,o):console.warn("Move Error - No matching row found:",e)},h.prototype.getRows=function(e){return!0===e&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),e="active"),this.rowManager.getComponents(e)},h.prototype.getRowPosition=function(e,t){var o=this.rowManager.findRow(e);return o?this.rowManager.getRowPosition(o,t):(console.warn("Position Error - No matching row found:",e),!1)},h.prototype.copyToClipboard=function(e){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(e)},h.prototype.setColumns=function(e){this.columnManager.setColumns(e)},h.prototype.getColumns=function(e){return this.columnManager.getComponents(e)},h.prototype.getColumn=function(e){var t=this.columnManager.findColumn(e);return t?t.getComponent():(console.warn("Find Error - No matching column found:",e),!1)},h.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},h.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},h.prototype.setColumnLayout=function(e){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,e)),!0)},h.prototype.showColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Show Error - No matching column found:",e),!1;t.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},h.prototype.hideColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Hide Error - No matching column found:",e),!1;t.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},h.prototype.toggleColumn=function(e){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Visibility Toggle Error - No matching column found:",e),!1;t.visible?t.hide():t.show()},h.prototype.addColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var a=i.columnManager.findColumn(o);i.columnManager.addColumn(e,t,a).then(function(e){n(e.getComponent())}).catch(function(e){s(e)})})},h.prototype.deleteColumn=function(e){var t=this;return new Promise(function(o,i){var n=t.columnManager.findColumn(e);n?n.delete().then(function(){o()}).catch(function(e){i(e)}):(console.warn("Column Delete Error - No matching column found:",e),i())})
+},h.prototype.updateColumnDefinition=function(e,t){var o=this;return new Promise(function(i,n){var s=o.columnManager.findColumn(e);s?s.updateDefinition(t).then(function(e){i(e)}).catch(function(e){n(e)}):(console.warn("Column Update Error - No matching column found:",e),n())})},h.prototype.moveColumn=function(e,t,o){var i=this.columnManager.findColumn(e),n=this.columnManager.findColumn(t);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",e)},h.prototype.scrollToColumn=function(e,t,o){var i=this;return new Promise(function(n,s){var a=i.columnManager.findColumn(e);a?i.columnManager.scrollToColumn(a,t,o).then(function(){n()}).catch(function(e){s(e)}):(console.warn("Scroll Error - No matching column found:",e),s("Scroll Error - No matching column found"))})},h.prototype.setLocale=function(e){this.modules.localize.setLocale(e)},h.prototype.getLocale=function(){return this.modules.localize.getLocale()},h.prototype.getLang=function(e){return this.modules.localize.getLang(e)},h.prototype.redraw=function(e){this.columnManager.redraw(e),this.rowManager.redraw(e)},h.prototype.setHeight=function(e){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(e)?e:e+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},h.prototype.setSort=function(e,t){this.modExists("sort",!0)&&(this.modules.sort.setSort(e,t),this.rowManager.sorterRefresh())},h.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},h.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},h.prototype.setFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(e,t,o,i),this.rowManager.filterRefresh())},h.prototype.refreshFilter=function(){this.modExists("filter",!0)&&this.rowManager.filterRefresh()},h.prototype.addFilter=function(e,t,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(e,t,o,i),this.rowManager.filterRefresh())},h.prototype.getFilters=function(e){if(this.modExists("filter",!0))return this.modules.filter.getFilters(e)},h.prototype.setHeaderFilterFocus=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(!t)return console.warn("Column Filter Focus Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterFocus(t)}},h.prototype.getHeaderFilterValue=function(e){if(this.modExists("filter",!0)){var t=this.columnManager.findColumn(e);if(t)return this.modules.filter.getHeaderFilterValue(t);console.warn("Column Filter Error - No matching column found:",e)}},h.prototype.setHeaderFilterValue=function(e,t){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(e);if(!o)return console.warn("Column Filter Error - No matching column found:",e),!1;this.modules.filter.setHeaderFilterValue(o,t)}},h.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},h.prototype.removeFilter=function(e,t,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(e,t,o),this.rowManager.filterRefresh())},h.prototype.clearFilter=function(e){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(e),this.rowManager.filterRefresh())},h.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},h.prototype.selectRow=function(e){this.modExists("selectRow",!0)&&(!0===e&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),e="active"),this.modules.selectRow.selectRows(e))},h.prototype.deselectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(e)},h.prototype.toggleSelectRow=function(e){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(e)},h.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},h.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},h.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},h.prototype.clearCellValidation=function(e){var t=this;this.modExists("validate",!0)&&(e||(e=this.modules.validate.getInvalidCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.validate.clearValidation(e._getSelf())}))},h.prototype.validate=function(e){var t=[];return this.rowManager.rows.forEach(function(e){var o=e.validate();!0!==o&&(t=t.concat(o))}),!t.length||t},h.prototype.setMaxPage=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(e)},h.prototype.setPage=function(e){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(e):new Promise(function(e,t){t()})},h.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){t.options.pagination&&t.modExists("page")?(e=t.rowManager.findRow(e),e?t.modules.page.setPageToRow(e).then(function(){o()}).catch(function(){i()}):i()):i()})},h.prototype.setPageSize=function(e){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(e),this.modules.page.setPage(1).then(function(){}).catch(function(){})},h.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},h.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},h.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},h.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},h.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},h.prototype.setGroupBy=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},h.prototype.setGroupValues=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=e,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},h.prototype.setGroupStartOpen=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},h.prototype.setGroupHeader=function(e){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=e,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},h.prototype.getGroups=function(e){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},h.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},h.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},h.prototype.clearCellEdited=function(e){var t=this;this.modExists("edit",!0)&&(e||(e=this.modules.edit.getEditedCells()),Array.isArray(e)||(e=[e]),e.forEach(function(e){t.modules.edit.clearEdited(e._getSelf())}))},h.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},h.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},h.prototype.navigatePrev=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().prev()},h.prototype.navigateNext=function(){var e=!1;return!(!this.modExists("edit",!0)||!(e=this.modules.edit.currentCell))&&e.nav().next()},h.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},h.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},h.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},h.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},h.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},h.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},h.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},h.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},h.prototype.clearHistory=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.clear()},h.prototype.download=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i)},h.prototype.downloadToTab=function(e,t,o,i){this.modExists("download",!0)&&this.modules.download.download(e,t,o,i,!0)},h.prototype.tableComms=function(e,t,o,i){this.modules.comms.receive(e,t,o,i)},h.prototype.moduleBindings={},h.prototype.extendModule=function(e,t,o){if(h.prototype.moduleBindings[e]){var i=h.prototype.moduleBindings[e].prototype[t];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",t)}else console.warn("Module Error - module does not exist:",e)},h.prototype.registerModule=function(e,t){h.prototype.moduleBindings[e]=t},h.prototype.bindModules=function(){this.modules={};for(var e in h.prototype.moduleBindings)this.modules[e]=new h.prototype.moduleBindings[e](this)},h.prototype.modExists=function(e,t){return!!this.modules[e]||(t&&console.error("Tabulator Module Not Installed: "+e),!1)},h.prototype.helpers={elVisible:function(e){return!(e.offsetWidth<=0&&e.offsetHeight<=0)},elOffset:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset-document.documentElement.clientTop,left:t.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(e){var t=Object.assign(Array.isArray(e)?[]:{},e);for(var o in e)null!=e[o]&&"object"===_typeof(e[o])&&(e[o]instanceof Date?t[o]=new Date(e[o]):t[o]=this.deepClone(e[o]));return t}},h.prototype.comms={tables:[],register:function(e){h.prototype.comms.tables.push(e)},deregister:function(e){var t=h.prototype.comms.tables.indexOf(e);t>-1&&h.prototype.comms.tables.splice(t,1)},lookupTable:function(e,t){var o,i,n=[];if("string"==typeof e){if(o=document.querySelectorAll(e),o.length)for(var s=0;s<o.length;s++)(i=h.prototype.comms.matchElement(o[s]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&e instanceof HTMLElement||e instanceof h?(i=h.prototype.comms.matchElement(e))&&n.push(i):Array.isArray(e)?e.forEach(function(e){n=n.concat(h.prototype.comms.lookupTable(e))}):t||console.warn("Table Connection Error - Invalid Selector",e);return n},matchElement:function(e){return h.prototype.comms.tables.find(function(t){return e instanceof h?t===e:t.element===e})}},h.prototype.findTable=function(e){var t=h.prototype.comms.lookupTable(e,!0);return!(Array.isArray(t)&&!t.length)&&t};var p=function(e){this.table=e,this.mode=null};p.prototype.initialize=function(e){this.modes[e]?this.mode=e:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+e),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},p.prototype.getMode=function(){return this.mode},p.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex),0===this.mode.indexOf("fitData")&&this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},p.prototype.modes={fitData:function(e){this.table.options.virtualDomHoz?this.table.vdomHoz.fitDataLayoutOverride():e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(e){e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(e){e.forEach(function(e){e.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(e){var t=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,s=!1;e.forEach(function(e,i){e.widthFixed||e.reinitializeWidth(),(t.table.options.responsiveLayout?e.modules.responsive.visible:e.visible)&&(s=e),e.visible&&(o+=e.getWidth())}),s?(n=i-o+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?s.setWidth(n):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(e){function t(e){return"string"==typeof e?e.indexOf("%")>-1?n/100*parseInt(e):parseInt(e):e}function o(e,i,n,s){function a(e){return n*(e.column.definition.widthGrow||1)}function l(e){return t(e.width)-n*(e.column.definition.widthShrink||0)}var c=[],u=0,d=0,h=0,p=r,m=0,f=0,g=[];return e.forEach(function(e,t){var o=s?l(e):a(e);e.column.minWidth>=o?c.push(e):e.column.maxWidth&&e.column.maxWidth<o?(e.width=e.column.maxWidth,i-=e.column.maxWidth,(p-=s?e.column.definition.widthShrink||1:e.column.definition.widthGrow||1)&&(n=Math.floor(i/p))):(g.push(e),f+=s?e.column.definition.widthShrink||1:e.column.definition.widthGrow||1)}),c.length?(c.forEach(function(e){u+=s?e.width-e.column.minWidth:e.column.minWidth,e.width=e.column.minWidth}),d=i-u,h=f?Math.floor(d/f):d,m=d-h*f,m+=o(g,d,h,s)):(m=f?i-Math.floor(i/f)*f:i,g.forEach(function(e){e.width=s?l(e):a(e)})),m}var i=this,n=i.table.element.clientWidth,s=0,a=0,r=0,l=0,c=[],u=[],d=0,h=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),e.forEach(function(e){var o,i,n;e.visible&&(o=e.definition.width,i=parseInt(e.minWidth),o?(n=t(o),s+=n>i?n:i,e.definition.widthShrink&&(u.push({column:e,width:n>i?n:i}),d+=e.definition.widthShrink)):(c.push({column:e,width:0}),r+=e.definition.widthGrow||1))}),a=n-s,l=Math.floor(a/r);var p=o(c,a,l,!1);c.length&&p>0&&(c[c.length-1].width+=+p),c.forEach(function(e){a-=e.width}),h=Math.abs(p)+a,h>0&&d&&(p=o(u,h,Math.floor(h/d),!0)),u.length&&(u[u.length-1].width-=p),c.forEach(function(e){e.column.setWidth(e.width)}),u.forEach(function(e){e.column.setWidth(e.width)})}},h.prototype.registerModule("layout",p);var m=function(e){this.table=e,this.locale="default",this.lang=!1,this.bindings={},this.langList={}};m.prototype.initialize=function(){this.langList=h.prototype.helpers.deepClone(this.langs)},m.prototype.setHeaderFilterPlaceholder=function(e){this.langList.default.headerFilters.default=e},m.prototype.setHeaderFilterColumnPlaceholder=function(e,t){this.langList.default.headerFilters.columns[e]=t,this.lang&&!this.lang.headerFilters.columns[e]&&(this.lang.headerFilters.columns[e]=t)},m.prototype.installLang=function(e,t){this.langList[e]?this._setLangProp(this.langList[e],t):this.langList[e]=t},m.prototype._setLangProp=function(e,t){for(var o in t)e[o]&&"object"==_typeof(e[o])?this._setLangProp(e[o],t[o]):e[o]=t[o]},m.prototype.setLocale=function(e){function t(e,o){for(var i in e)"object"==_typeof(e[i])?(o[i]||(o[i]={}),t(e[i],o[i])):o[i]=e[i]}var o=this;if(e=e||"default",!0===e&&navigator.language&&(e=navigator.language.toLowerCase()),e&&!o.langList[e]){var i=e.split("-")[0];o.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",e,i),e=i):(console.warn("Localization Error - Matching locale not found, using default: ",e),e="default")}o.locale=e,o.lang=h.prototype.helpers.deepClone(o.langList.default||{}),"default"!=e&&t(o.langList[e],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},m.prototype.getLocale=function(e){return self.locale},m.prototype.getLang=function(e){return e?this.langList[e]:this.lang},m.prototype.getText=function(e,t){var e=t?e+"|"+t:e,o=e.split("|");return this._getLangElement(o,this.locale)||""},m.prototype._getLangElement=function(e,t){var o=this,i=o.lang;return e.forEach(function(e){var t;i&&(t=i[e],i=void 0!==t&&t)}),i},m.prototype.bind=function(e,t){this.bindings[e]||(this.bindings[e]=[]),this.bindings[e].push(t),t(this.getText(e),this.lang)},m.prototype._executeBindings=function(){var e=this;for(var t in e.bindings)!function(t){e.bindings[t].forEach(function(o){o(e.getText(t),e.lang)})}(t)},m.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},h.prototype.registerModule("localize",m);var f=function(e){this.table=e};f.prototype.getConnections=function(e){var t,o=this,i=[];return t=h.prototype.comms.lookupTable(e),t.forEach(function(e){o.table!==e&&i.push(e)}),i},f.prototype.send=function(e,t,o,i){var n=this,s=this.getConnections(e);s.forEach(function(e){e.tableComms(n.table.element,t,o,i)}),!s.length&&e&&console.warn("Table Connection Error - No tables matching selector found",e)},f.prototype.receive=function(e,t,o,i){if(this.table.modExists(t))return this.table.modules[t].commsReceived(e,o,i);console.warn("Inter-table Comms Error - no such module:",t)},h.prototype.registerModule("comms",f);var g=function(e){this.table=e,this.allowedTypes=["","data","download","clipboard","print","htmlOutput"]};g.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,a="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[a]&&(s=t.lookupAccessor(e.definition[a]))&&(o=!0,i[a]={accessor:s,params:e.definition[a+"Params"]||{}})}),o&&(e.modules.accessor=i)},g.prototype.lookupAccessor=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.accessors[e]?t=this.accessors[e]:console.warn("Accessor Error - No such accessor found, ignoring: ",e);break;case"function":t=e}return t},g.prototype.transformRow=function(e,t){var o="accessor"+(t.charAt(0).toUpperCase()+t.slice(1)),i=e.getComponent(),n=h.prototype.helpers.deepClone(e.data||{});return this.table.columnManager.traverse(function(e){var s,a,r,l;e.modules.accessor&&(a=e.modules.accessor[o]||e.modules.accessor.accessor||!1)&&"undefined"!=(s=e.getFieldValue(n))&&(l=e.getComponent(),r="function"==typeof a.params?a.params(s,n,t,l,i):a.params,e.setFieldValue(n,a.accessor(s,n,t,r,l,i)))}),n},g.prototype.accessors={},h.prototype.registerModule("accessor",g);var b=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};b.prototype.initialize=function(){var e;this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&("string"==typeof this.table.options.ajaxLoaderLoading?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderLoading.trim(),this.loadingElement=e.content.firstChild):this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&("string"==typeof this.table.options.ajaxLoaderError?(e=document.createElement("template"),e.innerHTML=this.table.options.ajaxLoaderError.trim(),this.errorElement=e.content.firstChild):this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},b.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},b.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},b.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},b.prototype.getParams=function(){return this.params||{}},b.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},b.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},b.prototype.setUrl=function(e){this.url=e},b.prototype.getUrl=function(){return this.url},b.prototype.loadData=function(e,t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e,t)},b.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,e<t&&this.table.modules.page.nextPage().then(function(){}).catch(function(){}))},b.prototype.blockActiveRequest=function(){this.requestOrder++},b.prototype._loadDataProgressive=function(){return this.table.rowManager.setData([]),this.table.modules.page.setPage(1)},b.prototype._loadDataStandard=function(e,t){var o=this;return new Promise(function(i,n){o.sendRequest(e).then(function(s){o.table.rowManager.setData(s,e,t).then(function(){i()}).catch(function(e){n(e)})}).catch(function(e){n(e)})})},b.prototype.generateParamsList=function(e,t){var o=this,i=[];if(t=t||"",Array.isArray(e))e.forEach(function(e,n){i=i.concat(o.generateParamsList(e,t?t+"["+n+"]":n))});else if("object"===(void 0===e?"undefined":_typeof(e)))for(var n in e)i=i.concat(o.generateParamsList(e[n],t?t+"["+n+"]":n));else i.push({key:t,value:e});return i},b.prototype.serializeParams=function(e){var t=this.generateParamsList(e),o=[];return t.forEach(function(e){o.push(encodeURIComponent(e.key)+"="+encodeURIComponent(e.value))}),o.join("&")},b.prototype.sendRequest=function(e){var t,o=this,i=this,n=i.url;return i.requestOrder++,t=i.requestOrder,i._loadDefaultConfig(),new Promise(function(s,a){!1!==i.table.options.ajaxRequesting.call(o.table,i.url,i.params)?(i.loading=!0,e||i.showLoader(),o.loaderPromise(n,i.config,i.params).then(function(e){t===i.requestOrder?(i.table.options.ajaxResponse&&(e=i.table.options.ajaxResponse.call(i.table,i.url,i.params,e)),s(e),i.hideLoader(),i.loading=!1):console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made")}).catch(function(e){console.error("Ajax Load Error: ",e),i.table.options.ajaxError.call(i.table,e),i.showError(),setTimeout(function(){i.hideLoader()},3e3),i.loading=!1,a(e)})):a()})},b.prototype.showLoader=function(){if("function"==typeof this.table.options.ajaxLoader?this.table.options.ajaxLoader():this.table.options.ajaxLoader){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-error"),this.msgElement.classList.add("tabulator-loading"),this.loadingElement?this.msgElement.appendChild(this.loadingElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|loading"),this.table.element.appendChild(this.loaderElement)}},b.prototype.showError=function(){for(this.hideLoader();this.msgElement.firstChild;)this.msgElement.removeChild(this.msgElement.firstChild);this.msgElement.classList.remove("tabulator-loading"),this.msgElement.classList.add("tabulator-error"),this.errorElement?this.msgElement.appendChild(this.errorElement):this.msgElement.innerHTML=this.table.modules.localize.getText("ajax|error"),this.table.element.appendChild(this.loaderElement)},b.prototype.hideLoader=function(){this.loaderElement.parentNode&&this.loaderElement.parentNode.removeChild(this.loaderElement)},b.prototype.defaultConfig={method:"GET"},b.prototype.defaultURLGenerator=function(e,t,o){return e&&o&&Object.keys(o).length&&(t.method&&"get"!=t.method.toLowerCase()||(t.method="get",e+=(e.includes("?")?"&":"?")+this.modules.ajax.serializeParams(o))),e},b.prototype.defaultLoaderPromise=function(e,t,o){var i,n=this;return new Promise(function(s,a){if(e=n.urlGenerator.call(n.table,e,t,o),"GET"!=t.method.toUpperCase())if(i="object"===_typeof(n.table.options.ajaxContentType)?n.table.options.ajaxContentType:n.contentTypeFormatters[n.table.options.ajaxContentType]){for(var r in i.headers)t.headers||(t.headers={}),void 0===t.headers[r]&&(t.headers[r]=i.headers[r]);t.body=i.body.call(n,e,t,o)}else console.warn("Ajax Error - Invalid ajaxContentType value:",n.table.options.ajaxContentType);e?(void 0===t.headers&&(t.headers={}),void 0===t.headers.Accept&&(t.headers.Accept="application/json"),void 0===t.headers["X-Requested-With"]&&(t.headers["X-Requested-With"]="XMLHttpRequest"),void 0===t.mode&&(t.mode="cors"),"cors"==t.mode?(void 0===t.headers["Access-Control-Allow-Origin"]&&(t.headers["Access-Control-Allow-Origin"]=window.location.origin),void 0===t.credentials&&(t.credentials="same-origin")):void 0===t.credentials&&(t.credentials="include"),fetch(e,t).then(function(e){e.ok?e.json().then(function(e){s(e)}).catch(function(e){a(e),console.warn("Ajax Load Error - Invalid JSON returned",e)}):(console.error("Ajax Load Error - Connection Error: "+e.status,e.statusText),a(e))}).catch(function(e){console.error("Ajax Load Error - Connection Error: ",e),a(e)})):(console.warn("Ajax Load Error - No URL Set"),s([]))})},b.prototype.contentTypeFormatters={json:{headers:{"Content-Type":"application/json"},body:function(e,t,o){return JSON.stringify(o)}},form:{headers:{},body:function(e,t,o){var i=this.generateParamsList(o),n=new FormData;return i.forEach(function(e){n.append(e.key,e.value)}),n}}},h.prototype.registerModule("ajax",b);var v=function(e){this._row=e};v.prototype.getData=function(e){return this._row.getData(e)},v.prototype.getElement=function(){return this._row.getElement()},v.prototype.getTable=function(){return this._row.table},v.prototype.getCells=function(){var e=[];return this._row.getCells().forEach(function(t){e.push(t.getComponent())}),e},v.prototype.getCell=function(e){var t=this._row.getCell(e);return!!t&&t.getComponent()},v.prototype._getSelf=function(){return this._row};var y=function(e){this.table=e,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};y.prototype.createElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-calcs-holder"),e},y.prototype.initialize=function(){this.genColumn=new n({field:"value"},this)},y.prototype.registerColumnField=function(){},y.prototype.initializeColumn=function(e){var t=e.definition,o={topCalcParams:t.topCalcParams||{},botCalcParams:t.bottomCalcParams||{}};if(t.topCalc){switch(_typeof(t.topCalc)){case"string":this.calculations[t.topCalc]?o.topCalc=this.calculations[t.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.topCalc);break;case"function":o.topCalc=t.topCalc}o.topCalc&&(e.modules.columnCalcs=o,this.topCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(t.bottomCalc){switch(_typeof(t.bottomCalc)){case"string":this.calculations[t.bottomCalc]?o.botCalc=this.calculations[t.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",t.bottomCalc);break;case"function":o.botCalc=t.bottomCalc}o.botCalc&&(e.modules.columnCalcs=o,this.botCalcs.push(e),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},y.prototype.removeCalcs=function(){var e=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),e=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),e=!0),e&&this.table.rowManager.adjustTableSize()},y.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},y.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},y.prototype.scrollHorizontal=function(e){this.botInitialized&&this.botRow&&(this.botRow.getElement().style.marginLeft=-e+"px")},y.prototype.recalc=function(e){var t;if(this.topInitialized||this.botInitialized){if(this.rowsToData(e),this.topInitialized){for(this.topRow&&this.topRow.deleteCells(),t=this.generateRow("top",this.rowsToData(e)),this.topRow=t;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(t.getElement()),t.initialize(!0)}if(this.botInitialized){for(this.botRow&&this.botRow.deleteCells(),t=this.generateRow("bottom",this.rowsToData(e)),this.botRow=t;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(t.getElement()),t.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},y.prototype.recalcRowGroup=function(e){this.recalcGroup(this.table.modules.groupRows.getRowGroup(e))},y.prototype.recalcAll=function(){var e=this
+;if((this.topCalcs.length||this.botCalcs.length)&&("group"!==this.table.options.columnCalcs&&this.recalc(this.table.rowManager.activeRows),this.table.options.groupBy&&"table"!==this.table.options.columnCalcs)){table.modules.groupRows.getChildGroups().forEach(function(t){e.recalcGroup(t)})}},y.prototype.recalcGroup=function(e){var t,o;e&&e.calcs&&(e.calcs.bottom&&(t=this.rowsToData(e.rows),o=this.generateRowData("bottom",t),e.calcs.bottom.updateData(o),e.calcs.bottom.reinitialize()),e.calcs.top&&(t=this.rowsToData(e.rows),o=this.generateRowData("top",t),e.calcs.top.updateData(o),e.calcs.top.reinitialize()))},y.prototype.generateTopRow=function(e){return this.generateRow("top",this.rowsToData(e))},y.prototype.generateBottomRow=function(e){return this.generateRow("bottom",this.rowsToData(e))},y.prototype.rowsToData=function(e){var t=this,o=[];return e.forEach(function(e){if(o.push(e.getData()),t.table.options.dataTree&&t.table.options.dataTreeChildColumnCalcs&&e.modules.dataTree.open){var i=t.rowsToData(t.table.modules.dataTree.getFilteredTreeChildren(e));o=o.concat(i)}}),o},y.prototype.generateRow=function(e,t){var o,i=this,n=this.generateRowData(e,t);return i.table.modExists("mutator")&&i.table.modules.mutator.disable(),o=new l(n,this,"calc"),i.table.modExists("mutator")&&i.table.modules.mutator.enable(),o.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+e),o.component=!1,o.getComponent=function(){return this.component||(this.component=new v(this)),this.component},o.generateCells=function(){var t=[];i.table.columnManager.columnsByIndex.forEach(function(n){i.genColumn.setField(n.getField()),i.genColumn.hozAlign=n.hozAlign,n.definition[e+"CalcFormatter"]&&i.table.modExists("format")?i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter(n.definition[e+"CalcFormatter"]),params:n.definition[e+"CalcFormatterParams"]||{}}:i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter("plaintext"),params:{}},i.genColumn.definition.cssClass=n.definition.cssClass;var s=new u(i.genColumn,o);s.getElement(),s.column=n,s.setWidth(),n.cells.push(s),t.push(s),n.visible||s.hide()}),this.cells=t},o},y.prototype.generateRowData=function(e,t){var o,i,n={},s="top"==e?this.topCalcs:this.botCalcs,a="top"==e?"topCalc":"botCalc";return s.forEach(function(e){var s=[];e.modules.columnCalcs&&e.modules.columnCalcs[a]&&(t.forEach(function(t){s.push(e.getFieldValue(t))}),i=a+"Params",o="function"==typeof e.modules.columnCalcs[i]?e.modules.columnCalcs[i](s,t):e.modules.columnCalcs[i],e.setFieldValue(n,e.modules.columnCalcs[a](s,t,o)))}),n},y.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},y.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},y.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},y.prototype.getResults=function(){var e,t=this,o={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(e=this.table.modules.groupRows.getGroups(!0),e.forEach(function(e){o[e.getKey()]=t.getGroupResults(e)})):o={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},o},y.prototype.getGroupResults=function(e){var t=this,o=e._getSelf(),i=e.getSubGroups(),n={};return i.forEach(function(e){n[e.getKey()]=t.getGroupResults(e)}),{top:o.calcs.top?o.calcs.top.getData():{},bottom:o.calcs.bottom?o.calcs.bottom.getData():{},groups:n}},y.prototype.calculations={avg:function(e,t,o){var i=0,n=void 0!==o.precision?o.precision:2;return e.length&&(i=e.reduce(function(e,t){return Number(e)+Number(t)}),i/=e.length,i=!1!==n?i.toFixed(n):i),parseFloat(i).toString()},max:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))>i||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},min:function(e,t,o){var i=null,n=void 0!==o.precision&&o.precision;return e.forEach(function(e){((e=Number(e))<i||null===i)&&(i=e)}),null!==i?!1!==n?i.toFixed(n):i:""},sum:function(e,t,o){var i=0,n=void 0!==o.precision&&o.precision;return e.length&&e.forEach(function(e){e=Number(e),i+=isNaN(e)?0:Number(e)}),!1!==n?i.toFixed(n):i},concat:function(e,t,o){var i=0;return e.length&&(i=e.reduce(function(e,t){return String(e)+String(t)})),i},count:function(e,t,o){var i=0;return e.length&&e.forEach(function(e){e&&i++}),i}},h.prototype.registerModule("columnCalcs",y);var w=function(e){this.table=e,this.mode=!0,this.pasteParser=function(){},this.pasteAction=function(){},this.customSelection=!1,this.rowRange=!1,this.blocked=!0};w.prototype.initialize=function(){var e=this;this.mode=this.table.options.clipboard,this.rowRange=this.table.options.clipboardCopyRowRange,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",function(t){var o,i,n;if(!e.blocked){if(t.preventDefault(),e.customSelection)o=e.customSelection,e.table.options.clipboardCopyFormatter&&(o=e.table.options.clipboardCopyFormatter("plain",o));else{var n=e.table.modules.export.generateExportList(e.table.options.clipboardCopyConfig,e.table.options.clipboardCopyStyled,e.rowRange,"clipboard");i=e.table.modules.export.genereateHTMLTable(n),o=i?e.generatePlainContent(n):"",e.table.options.clipboardCopyFormatter&&(o=e.table.options.clipboardCopyFormatter("plain",o),i=e.table.options.clipboardCopyFormatter("html",i))}window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",o):t.clipboardData&&t.clipboardData.setData?(t.clipboardData.setData("text/plain",o),i&&t.clipboardData.setData("text/html",i)):t.originalEvent&&t.originalEvent.clipboardData.setData&&(t.originalEvent.clipboardData.setData("text/plain",o),i&&t.originalEvent.clipboardData.setData("text/html",i)),e.table.options.clipboardCopied.call(e.table,o,i),e.reset()}}),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",function(t){e.paste(t)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},w.prototype.reset=function(){this.blocked=!0,this.customSelection=!1},w.prototype.generatePlainContent=function(e){var t=[];return e.forEach(function(e){var o=[];e.columns.forEach(function(t){var i="";if(t)if("group"===e.type&&(t.value=t.component.getKey()),null===t.value)i="";else switch(_typeof(t.value)){case"object":i=JSON.stringify(t.value);break;case"undefined":i="";break;default:i=t.value}o.push(i)}),t.push(o.join("\t"))}),t.join("\n")},w.prototype.copy=function(e,t){var e,o,i;this.blocked=!1,this.customSelection=!1,!0!==this.mode&&"copy"!==this.mode||(this.rowRange=e||this.table.options.clipboardCopyRowRange,void 0!==window.getSelection&&void 0!==document.createRange?(e=document.createRange(),e.selectNodeContents(this.table.element),o=window.getSelection(),o.toString()&&t&&(this.customSelection=o.toString()),o.removeAllRanges(),o.addRange(e)):void 0!==document.selection&&void 0!==document.body.createTextRange&&(i=document.body.createTextRange(),i.moveToElementText(this.table.element),i.select()),document.execCommand("copy"),o&&o.removeAllRanges())},w.prototype.setPasteAction=function(e){switch(void 0===e?"undefined":_typeof(e)){case"string":this.pasteAction=this.pasteActions[e],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",e);break;case"function":this.pasteAction=e}},w.prototype.setPasteParser=function(e){switch(void 0===e?"undefined":_typeof(e)){case"string":this.pasteParser=this.pasteParsers[e],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",e);break;case"function":this.pasteParser=e}},w.prototype.paste=function(e){var t,o,i;this.checkPaseOrigin(e)&&(t=this.getPasteData(e),o=this.pasteParser.call(this,t),o?(e.preventDefault(),this.table.modExists("mutator")&&(o=this.mutateData(o)),i=this.pasteAction.call(this,o),this.table.options.clipboardPasted.call(this.table,t,o,i)):this.table.options.clipboardPasteError.call(this.table,t))},w.prototype.mutateData=function(e){var t=this,o=[];return Array.isArray(e)?e.forEach(function(e){o.push(t.table.modules.mutator.transformRow(e,"clipboard"))}):o=e,o},w.prototype.checkPaseOrigin=function(e){var t=!0;return("DIV"!=e.target.tagName||this.table.modules.edit.currentCell)&&(t=!1),t},w.prototype.getPasteData=function(e){var t;return window.clipboardData&&window.clipboardData.getData?t=window.clipboardData.getData("Text"):e.clipboardData&&e.clipboardData.getData?t=e.clipboardData.getData("text/plain"):e.originalEvent&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),t},w.prototype.pasteParsers={table:function(e){var t=[],o=!0,i=this.table.columnManager.columns,n=[],s=[];return e=e.split("\n"),e.forEach(function(e){t.push(e.split("\t"))}),!(!t.length||1===t.length&&t[0].length<2)&&(!0,t[0].forEach(function(e){var t=i.find(function(t){return e&&t.definition.title&&e.trim()&&t.definition.title.trim()===e.trim()});t?n.push(t):o=!1}),o||(o=!0,n=[],t[0].forEach(function(e){var t=i.find(function(t){return e&&t.field&&e.trim()&&t.field.trim()===e.trim()});t?n.push(t):o=!1}),o||(n=this.table.columnManager.columnsByIndex)),o&&t.shift(),t.forEach(function(e){var t={};e.forEach(function(e,o){n[o]&&(t[n[o].field]=e)}),s.push(t)}),s)}},w.prototype.pasteActions={replace:function(e){return this.table.setData(e)},update:function(e){return this.table.updateOrAddData(e)},insert:function(e){return this.table.addData(e)}},h.prototype.registerModule("clipboard",w);var E=function(e){this.table=e,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.elementField=!1,this.startOpen=function(){},this.displayIndex=0};E.prototype.initialize=function(){var e=null,t=this.table.columnManager.getFirstVisibileColumn(),o=this.table.options;switch(this.field=o.dataTreeChildField,this.indent=o.dataTreeChildIndent,this.elementField=o.dataTreeElementColumn||!!t&&t.field,o.dataTreeBranchElement&&(!0===o.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof o.dataTreeBranchElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=o.dataTreeBranchElement),o.dataTreeCollapseElement?"string"==typeof o.dataTreeCollapseElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=o.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.tabIndex=0,this.collapseEl.innerHTML="<div class='tabulator-data-tree-control-collapse'></div>"),o.dataTreeExpandElement?"string"==typeof o.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=o.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=o.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.tabIndex=0,this.expandEl.innerHTML="<div class='tabulator-data-tree-control-expand'></div>"),_typeof(o.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,t){return o.dataTreeStartExpanded};break;case"function":this.startOpen=o.dataTreeStartExpanded;break;default:this.startOpen=function(e,t){return o.dataTreeStartExpanded[t]}}},E.prototype.initializeRow=function(e){var t=e.getData()[this.field],o=Array.isArray(t),i=o||!o&&"object"===(void 0===t?"undefined":_typeof(t))&&null!==t;!i&&e.modules.dataTree&&e.modules.dataTree.branchEl&&e.modules.dataTree.branchEl.parentNode.removeChild(e.modules.dataTree.branchEl),!i&&e.modules.dataTree&&e.modules.dataTree.controlEl&&e.modules.dataTree.controlEl.parentNode.removeChild(e.modules.dataTree.controlEl),e.modules.dataTree={index:e.modules.dataTree?e.modules.dataTree.index:0,open:!!i&&(e.modules.dataTree?e.modules.dataTree.open:this.startOpen(e.getComponent(),0)),controlEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.controlEl,branchEl:!(!e.modules.dataTree||!i)&&e.modules.dataTree.branchEl,parent:!!e.modules.dataTree&&e.modules.dataTree.parent,children:i}},E.prototype.layoutRow=function(e){var t=this.elementField?e.getCell(this.elementField):e.getCells()[0],o=t.getElement(),i=e.modules.dataTree;i.branchEl&&(i.branchEl.parentNode&&i.branchEl.parentNode.removeChild(i.branchEl),i.branchEl=!1),i.controlEl&&(i.controlEl.parentNode&&i.controlEl.parentNode.removeChild(i.controlEl),i.controlEl=!1),this.generateControlElement(e,o),e.getElement().classList.add("tabulator-tree-level-"+i.index),i.index&&(this.branchEl?(i.branchEl=this.branchEl.cloneNode(!0),o.insertBefore(i.branchEl,o.firstChild),this.table.rtl?i.branchEl.style.marginRight=(i.branchEl.offsetWidth+i.branchEl.style.marginLeft)*(i.index-1)+i.index*this.indent+"px":i.branchEl.style.marginLeft=(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+i.index*this.indent+"px"):this.table.rtl?o.style.paddingRight=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-right"))+i.index*this.indent+"px":o.style.paddingLeft=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-left"))+i.index*this.indent+"px")},E.prototype.generateControlElement=function(e,t){var o=this,i=e.modules.dataTree,t=t||e.getCells()[0].getElement(),n=i.controlEl;!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.collapseRow(e)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",function(t){t.stopPropagation(),o.expandRow(e)})),i.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),n&&n.parentNode===t?n.parentNode.replaceChild(i.controlEl,n):t.insertBefore(i.controlEl,t.firstChild))},E.prototype.setDisplayIndex=function(e){this.displayIndex=e},E.prototype.getDisplayIndex=function(){return this.displayIndex},E.prototype.getRows=function(e){var t=this,o=[];return e.forEach(function(e,i){var n,s;o.push(e),e instanceof l&&(e.create(),n=e.modules.dataTree.children,n.index||!1===n.children||(s=t.getChildren(e),s.forEach(function(e){e.create(),o.push(e)})))}),o},E.prototype.getChildren=function(e,t){var o=this,i=e.modules.dataTree,n=[],s=[];return!1!==i.children&&(i.open||t)&&(Array.isArray(i.children)||(i.children=this.generateChildren(e)),n=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(i.children):i.children,this.table.modExists("sort")&&this.table.options.dataTreeSort&&this.table.modules.sort.sort(n),n.forEach(function(e){s.push(e),o.getChildren(e).forEach(function(e){s.push(e)})})),s},E.prototype.generateChildren=function(e){var t=this,o=[],i=e.getData()[this.field];return Array.isArray(i)||(i=[i]),i.forEach(function(i){var n=new l(i||{},t.table.rowManager);n.create(),n.modules.dataTree.index=e.modules.dataTree.index+1,n.modules.dataTree.parent=e,n.modules.dataTree.children&&(n.modules.dataTree.open=t.startOpen(n.getComponent(),n.modules.dataTree.index)),o.push(n)}),o},E.prototype.expandRow=function(e,t){var o=e.modules.dataTree;!1!==o.children&&(o.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},E.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},E.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},E.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},E.prototype.getFilteredTreeChildren=function(e){var t,o=e.modules.dataTree,i=[];return o.children&&(Array.isArray(o.children)||(o.children=this.generateChildren(e)),t=this.table.modExists("filter")&&this.table.options.dataTreeFilter?this.table.modules.filter.filter(o.children):o.children,t.forEach(function(e){e instanceof l&&i.push(e)})),i},E.prototype.rowDelete=function(e){var t,o=e.modules.dataTree.parent;o&&(t=this.findChildIndex(e,o),!1!==t&&o.data[this.field].splice(t,1),o.data[this.field].length||delete o.data[this.field],this.initializeRow(o),this.layoutRow(o)),this.table.rowManager.refreshActiveData("tree",!1,!0)},E.prototype.addTreeChildRow=function(e,t,o,i){var n=!1;"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e.data[this.field])||(e.data[this.field]=[],e.modules.dataTree.open=this.startOpen(e.getComponent(),e.modules.dataTree.index)),void 0!==i&&!1!==(n=this.findChildIndex(i,e))&&e.data[this.field].splice(o?n:n+1,0,t),!1===n&&(o?e.data[this.field].unshift(t):e.data[this.field].push(t)),this.initializeRow(e),this.layoutRow(e),this.table.rowManager.refreshActiveData("tree",!1,!0)},E.prototype.findChildIndex=function(e,t){var o=this,i=!1;return"object"==(void 0===e?"undefined":_typeof(e))?e instanceof l?i=e.data:e instanceof r?i=e._getSelf().data:"undefined"!=typeof HTMLElement&&e instanceof HTMLElement&&t.modules.dataTree&&(i=t.modules.dataTree.children.find(function(t){return t instanceof l&&t.element===e}))&&(i=i.data):i=void 0!==e&&null!==e&&t.data[this.field].find(function(t){return t.data[o.table.options.index]==e}),i&&(Array.isArray(t.data[this.field])&&(i=t.data[this.field].indexOf(i)),-1==i&&(i=!1)),i},E.prototype.getTreeChildren=function(e,t,o){var i=this,n=e.modules.dataTree,s=[];return n.children&&(Array.isArray(n.children)||(n.children=this.generateChildren(e)),n.children.forEach(function(e){e instanceof l&&(s.push(t?e.getComponent():e),o&&(s=s.concat(i.getTreeChildren(e,t,o))))})),s},E.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||e.row.reinitialize()},E.prototype.getChildField=function(){return this.field},E.prototype.redrawNeeded=function(e){return!!this.field&&void 0!==e[this.field]||!!this.elementField&&void 0!==e[this.elementField]},h.prototype.registerModule("dataTree",E);var C=function(e){this.table=e};C.prototype.download=function(e,t,o,i,n){function s(o,i){n?!0===n?a.triggerDownload(o,i,e,t,!0):n(o):a.triggerDownload(o,i,e,t)}var a=this,r=!1;if("function"==typeof e?r=e:a.downloaders[e]?r=a.downloaders[e]:console.warn("Download Error - No such download type found: ",e),r){var l=this.generateExportList(i);r.call(this.table,l,o||{},s)}},C.prototype.generateExportList=function(e){var t=this.table.modules.export.generateExportList(this.table.options.downloadConfig,!1,e||this.table.options.downloadRowRange,"download"),o=this.table.options.groupHeaderDownload;return o&&!Array.isArray(o)&&(o=[o]),t.forEach(function(e){var t;"group"===e.type&&(t=e.columns[0],o&&o[e.indent]&&(t.value=o[e.indent](t.value,e.component._group.getRowCount(),e.component._group.getData(),e.component)))}),t},C.prototype.triggerDownload=function(e,t,o,i,n){var s=document.createElement("a"),a=new Blob([e],{type:t}),i=i||"Tabulator."+("function"==typeof o?"txt":o);(a=this.table.options.downloadReady.call(this.table,e,a))&&(n?window.open(window.URL.createObjectURL(a)):navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(a,i):(s.setAttribute("href",window.URL.createObjectURL(a)),s.setAttribute("download",i),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},C.prototype.commsReceived=function(e,t,o){switch(t){case"intercept":this.download(o.type,"",o.options,o.active,o.intercept)}},C.prototype.downloaders={csv:function(e,t,o){var i=t&&t.delimiter?t.delimiter:",",n=[],s=[];e.forEach(function(e){var t=[];switch(e.type){case"group":console.warn("Download Warning - CSV downloader cannot process row groups");break;case"calc":console.warn("Download Warning - CSV downloader cannot process column calculations");break;case"header":e.columns.forEach(function(e,t){e&&1===e.depth&&(s[t]=void 0===e.value||null===e.value?"":'"'+String(e.value).split('"').join('""')+'"')});break;case"row":e.columns.forEach(function(e){if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}t.push('"'+String(e.value).split('"').join('""')+'"')}}),n.push(t.join(i))}}),s.length&&n.unshift(s.join(i)),n=n.join("\n"),t.bom&&(n="\ufeff"+n),o(n,"text/csv")},json:function(e,t,o){var i=[];e.forEach(function(e){var t={};switch(e.type){case"header":break;case"group":console.warn("Download Warning - JSON downloader cannot process row groups");break;case"calc":console.warn("Download Warning - JSON downloader cannot process column calculations");break;case"row":e.columns.forEach(function(e){e&&(t[e.component.getField()]=e.value)}),i.push(t)}}),i=JSON.stringify(i,null,"\t"),o(i,"application/json")},pdf:function(e,t,o){function i(e,t){var o=[];return e.columns.forEach(function(e){var i;if(e){switch(_typeof(e.value)){case"object":e.value=JSON.stringify(e.value);break;case"undefined":case"null":e.value=""}i={content:e.value,colSpan:e.width,rowSpan:e.height},t&&(i.styles=t),o.push(i)}else o.push("")}),o}var n=[],s=[],a={},r=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},l=t.rowCalcStyles||{fontStyle:"bold",fontSize:10,cellPadding:4,fillColor:232},c=t.jsPDF||{},u=t&&t.title?t.title:"";c.orientation||(c.orientation=t.orientation||"landscape"),c.unit||(c.unit="pt"),e.forEach(function(e){switch(e.type){case"header":n.push(i(e));break;case"group":s.push(i(e,r));break;case"calc":s.push(i(e,l));break;case"row":s.push(i(e))}});var d=new jsPDF(c);t&&t.autoTable&&(a="function"==typeof t.autoTable?t.autoTable(d)||{}:t.autoTable),u&&(a.addPageContent=function(e){d.text(u,40,30)}),a.head=n,a.body=s,d.autoTable(a),t&&t.documentProcessing&&t.documentProcessing(d),o(d.output("arraybuffer"),"application/pdf")},xlsx:function(e,t,o){function i(){var t=[],o=[],i={},n={s:{c:0,r:0},e:{c:e[0]?e[0].columns.reduce(function(e,t){return e+(t&&t.width?t.width:1)},0):0,r:e.length}};return e.forEach(function(e,i){var n=[];e.columns.forEach(function(e,t){e?(n.push(e.value instanceof Date||"object"!==_typeof(e.value)?e.value:JSON.stringify(e.value)),(e.width>1||e.height>-1)&&o.push({s:{r:i,c:t},e:{r:i+e.height-1,c:t+e.width-1}})):n.push("")}),t.push(n)}),XLSX.utils.sheet_add_aoa(i,t),i["!ref"]=XLSX.utils.encode_range(n),o.length&&(i["!merges"]=o),i}var n,s=this,a=t.sheetName||"Sheet1",r=XLSX.utils.book_new();if(r.SheetNames=[],r.Sheets={},t.sheetOnly)return void o(i());if(t.sheets)for(var l in t.sheets)!0===t.sheets[l]?(r.SheetNames.push(l),r.Sheets[l]=i()):(r.SheetNames.push(l),this.modules.comms.send(t.sheets[l],"download","intercept",{type:"xlsx",options:{sheetOnly:!0},active:s.active,intercept:function(e){r.Sheets[l]=e}}));else r.SheetNames.push(a),r.Sheets[a]=i();t.documentProcessing&&(r=t.documentProcessing(r)),n=XLSX.write(r,{bookType:"xlsx",bookSST:!0,type:"binary"}),o(function(e){for(var t=new ArrayBuffer(e.length),o=new Uint8Array(t),i=0;i!=e.length;++i)o[i]=255&e.charCodeAt(i);return t}(n),"application/octet-stream")},html:function(e,t,o){this.modExists("export",!0)&&o(this.modules.export.genereateHTMLTable(e),"text/html")}},h.prototype.registerModule("download",C);var x=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1,this.editedCells=[]};x.prototype.initializeColumn=function(e){var t=this,o={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.editor]?o.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":o.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor")),t.editors[e.definition.formatter]?o.editor=t.editors[e.definition.formatter]:o.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}o.editor&&(e.modules.edit=o)},x.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},x.prototype.clearEditor=function(e){var t,o=this.currentCell;if(this.invalidEdit=!1,o){for(this.currentCell=!1,t=o.getElement(),e?o.validate():t.classList.remove("tabulator-validation-fail"),t.classList.remove("tabulator-editing");t.firstChild;)t.removeChild(t.firstChild);o.row.getElement().classList.remove("tabulator-row-editing")}},x.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(!0),e.setValueActual(e.getValue()),e.cellRendered(),("textarea"==e.column.definition.editor||e.column.definition.variableHeight)&&e.row.normalizeHeight(!0),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},x.prototype.bindEditor=function(e){var t=this,o=e.getElement(!0);o.setAttribute("tabindex",0),o.addEventListener("click",function(e){o.classList.contains("tabulator-editing")||o.focus({preventScroll:!0})}),o.addEventListener("mousedown",function(e){2===e.button?e.preventDefault():t.mouseClick=!0}),o.addEventListener("focus",function(o){t.recursionBlock||t.edit(e,o,!1)})},x.prototype.focusCellNoEvent=function(e,t){this.recursionBlock=!0,t&&"ie"===this.table.browser||e.getElement().focus({preventScroll:!0}),this.recursionBlock=!1},x.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},x.prototype.focusScrollAdjust=function(e){if("virtual"==this.table.rowManager.getRenderMode()){var t=this.table.rowManager.element.scrollTop,o=this.table.rowManager.element.clientHeight+this.table.rowManager.element.scrollTop,i=e.row.getElement();i.offsetTop;i.offsetTop<t?this.table.rowManager.element.scrollTop-=t-i.offsetTop:i.offsetTop+i.offsetHeight>o&&(this.table.rowManager.element.scrollTop+=i.offsetTop+i.offsetHeight-o);var n=this.table.rowManager.element.scrollLeft,s=this.table.rowManager.element.clientWidth+this.table.rowManager.element.scrollLeft,a=e.getElement();a.offsetLeft;this.table.modExists("frozenColumns")&&(n+=parseInt(this.table.modules.frozenColumns.leftMargin),s-=parseInt(this.table.modules.frozenColumns.rightMargin)),this.table.options.virtualDomHoz&&(n-=parseInt(this.table.vdomHoz.vDomPadLeft),s-=parseInt(this.table.vdomHoz.vDomPadLeft)),a.offsetLeft<n?this.table.rowManager.element.scrollLeft-=n-a.offsetLeft:a.offsetLeft+a.offsetWidth>s&&(this.table.rowManager.element.scrollLeft+=a.offsetLeft+a.offsetWidth-s)}},x.prototype.edit=function(e,t,o){function i(t){if(c.currentCell===e){var o=!0;return e.column.modules.validate&&c.table.modExists("validate")&&"manual"!=c.table.options.validationMode&&(o=c.table.modules.validate.validate(e.column.modules.validate,e,t)),!0===o||"highlight"===c.table.options.validationMode?(c.clearEditor(),e.modules.edit||(e.modules.edit={}),e.modules.edit.edited=!0,-1==c.editedCells.indexOf(e)&&c.editedCells.push(e),e.setValue(t,!0),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e),!0===o||(h.classList.add("tabulator-validation-fail"),c.table.options.validationFailed.call(c.table,e.getComponent(),t,o),!1)):(c.invalidEdit=!0,h.classList.add("tabulator-validation-fail"),c.focusCellNoEvent(e,!0),d(),c.table.options.validationFailed.call(c.table,e.getComponent(),t,o),!1)}}function n(){c.currentCell===e&&(c.cancelEdit(),c.table.options.dataTree&&c.table.modExists("dataTree")&&c.table.modules.dataTree.checkForRestyle(e))}function s(e){d=e}var a,r,l,c=this,u=!0,d=function(){},h=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,h.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":u=e.column.modules.edit.check(e.getComponent());break;case"boolean":u=e.column.modules.edit.check}if(u||o){if(c.cancelEdit(),c.currentCell=e,this.focusScrollAdjust(e),r=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,r)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,r),c.table.options.cellEditing.call(this.table,r),l="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(r):e.column.modules.edit.params,!1===(a=e.column.modules.edit.editor.call(c,r,s,i,n,l)))return h.blur(),!1;if(!(a instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",a),h.blur(),!1;for(h.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");h.firstChild;)h.removeChild(h.firstChild);h.appendChild(a),d();for(var p=h.children,m=0;m<p.length;m++)p[m].addEventListener("click",function(e){e.stopPropagation()});return!0}return this.mouseClick=!1,h.blur(),!1},x.prototype.maskInput=function(e,t){function o(t){var r=i[t];void 0!==r&&r!==a&&r!==n&&r!==s&&(e.value=e.value+""+r,o(t+1))}var i=t.mask,n=void 0!==t.maskLetterChar?t.maskLetterChar:"A",s=void 0!==t.maskNumberChar?t.maskNumberChar:"9",a=void 0!==t.maskWildcardChar?t.maskWildcardChar:"*",r=!1;e.addEventListener("keydown",function(t){var o=e.value.length,l=t.key;if(t.keyCode>46){if(o>=i.length)return t.preventDefault(),t.stopPropagation(),r=!1,!1;switch(i[o]){case n:if(l.toUpperCase()==l.toLowerCase())return t.preventDefault(),t.stopPropagation(),r=!1,!1;break;case s:if(isNaN(l))return t.preventDefault(),t.stopPropagation(),r=!1,!1;break;case a:break;default:if(l!==i[o])return t.preventDefault(),t.stopPropagation(),r=!1,!1}r=!0}}),e.addEventListener("keyup",function(i){i.keyCode>46&&t.maskAutoFill&&o(e.value.length)}),e.placeholder||(e.placeholder=i),t.maskAutoFill&&o(e.value.length)},x.prototype.getEditedCells=function(){var e=[];return this.editedCells.forEach(function(t){e.push(t.getComponent())}),e},x.prototype.clearEdited=function(e){var t;e.modules.edit&&e.modules.edit.edited&&(e.modules.edit.edited=!1,e.modules.validate&&(e.modules.validate.invalid=!1)),(t=this.editedCells.indexOf(e))>-1&&this.editedCells.splice(t,1)},x.prototype.editors={input:function(e,t,o,i,n){function s(e){(null===a||void 0===a)&&""!==r.value||r.value!==a?o(r.value)&&(a=r.value):i()}var a=e.getValue(),r=document.createElement("input");if(r.setAttribute("type",n.search?"search":"text"),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),r.setAttribute(l,r.getAttribute(l)+n.elementAttributes["+"+l])):r.setAttribute(l,n.elementAttributes[l]);return r.value=void 0!==a?a:"",t(function(){r.focus({preventScroll:!0}),r.style.height="100%"}),r.addEventListener("change",s),r.addEventListener("blur",s),r.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s(e);break;case 27:i();break;case 35:case 36:e.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(r,n),r},textarea:function(e,t,o,i,n){function s(t){(null===a||void 0===a)&&""!==c.value||c.value!==a?(o(c.value)&&(a=c.value),setTimeout(function(){e.getRow().normalizeHeight()},300)):i()}var a=e.getValue(),r=n.verticalNavigation||"hybrid",l=String(null!==a&&void 0!==a?a:""),c=(l.match(/(?:\r\n|\r|\n)/g),document.createElement("textarea")),u=0;if(c.style.display="block",c.style.padding="2px",c.style.height="100%",c.style.width="100%",c.style.boxSizing="border-box",c.style.whiteSpace="pre-wrap",c.style.resize="none",
+n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),c.setAttribute(d,c.getAttribute(d)+n.elementAttributes["+"+d])):c.setAttribute(d,n.elementAttributes[d]);return c.value=l,t(function(){c.focus({preventScroll:!0}),c.style.height="100%",c.scrollHeight,c.style.height=c.scrollHeight+"px",e.getRow().normalizeHeight()}),c.addEventListener("change",s),c.addEventListener("blur",s),c.addEventListener("keyup",function(){c.style.height="";var t=c.scrollHeight;c.style.height=t+"px",t!=u&&(u=t,e.getRow().normalizeHeight())}),c.addEventListener("keydown",function(e){switch(e.keyCode){case 27:i();break;case 38:("editor"==r||"hybrid"==r&&c.selectionStart)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 40:("editor"==r||"hybrid"==r&&c.selectionStart!==c.value.length)&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(c,n),c},number:function(e,t,o,i,n){function s(){var e=l.value;isNaN(e)||""===e||(e=Number(e)),e!==a?o(e)&&(a=e):i()}var a=e.getValue(),r=n.verticalNavigation||"editor",l=document.createElement("input");if(l.setAttribute("type","number"),void 0!==n.max&&l.setAttribute("max",n.max),void 0!==n.min&&l.setAttribute("min",n.min),void 0!==n.step&&l.setAttribute("step",n.step),l.style.padding="4px",l.style.width="100%",l.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var c in n.elementAttributes)"+"==c.charAt(0)?(c=c.slice(1),l.setAttribute(c,l.getAttribute(c)+n.elementAttributes["+"+c])):l.setAttribute(c,n.elementAttributes[c]);l.value=a;var u=function(e){s()};return t(function(){l.removeEventListener("blur",u),l.focus({preventScroll:!0}),l.style.height="100%",l.addEventListener("blur",u)}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i();break;case 38:case 40:"editor"==r&&(e.stopImmediatePropagation(),e.stopPropagation());break;case 35:case 36:e.stopPropagation()}}),n.mask&&this.table.modules.edit.maskInput(l,n),l},range:function(e,t,o,i,n){function s(){var e=r.value;isNaN(e)||""===e||(e=Number(e)),e!=a?o(e)&&(a=e):i()}var a=e.getValue(),r=document.createElement("input");if(r.setAttribute("type","range"),void 0!==n.max&&r.setAttribute("max",n.max),void 0!==n.min&&r.setAttribute("min",n.min),void 0!==n.step&&r.setAttribute("step",n.step),r.style.padding="4px",r.style.width="100%",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var l in n.elementAttributes)"+"==l.charAt(0)?(l=l.slice(1),r.setAttribute(l,r.getAttribute(l)+n.elementAttributes["+"+l])):r.setAttribute(l,n.elementAttributes[l]);return r.value=a,t(function(){r.focus({preventScroll:!0}),r.style.height="100%"}),r.addEventListener("blur",function(e){s()}),r.addEventListener("keydown",function(e){switch(e.keyCode){case 13:s();break;case 27:i()}}),r},select:function(e,t,o,i,n){function s(t){var o,i={},n=x.table.getData();return o=t?x.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?n.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}):console.warn("unable to find matching column to create select lookup list:",t),Object.keys(i)}function a(t,o){function i(e){var e={label:e.label,value:e.value,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1};return o.indexOf(e.value)>-1&&c(e),s.push(e),a.push(e),e}var s=[],a=[];if("function"==typeof t&&(t=t(e)),Array.isArray(t))t.forEach(function(e){var t;"object"===(void 0===e?"undefined":_typeof(e))?e.options?(t={label:e.label,group:!0,itemParams:e.itemParams,elementAttributes:e.elementAttributes,element:!1},a.push(t),e.options.forEach(function(e){i(e)})):i(e):(t={label:e,value:e,element:!1},o.indexOf(t.value)>-1&&c(t),s.push(t),a.push(t))});else for(var l in t){var u={label:t[l],value:l,element:!1};o.indexOf(u.value)>-1&&c(u),s.push(u),a.push(u)}n.sortValuesList&&(s.sort(function(e,t){return e.label<t.label?-1:e.label>t.label?1:0}),a.sort(function(e,t){return e.label<t.label?-1:e.label>t.label?1:0}),"asc"!==n.sortValuesList&&(s.reverse(),a.reverse())),S=s,P=a,r()}function r(){for(;k.firstChild;)k.removeChild(k.firstChild);P.forEach(function(t){var o=t.element;if(!o){if(o=document.createElement("div"),t.label=n.listItemFormatter?n.listItemFormatter(t.value,t.label,e,o,t.itemParams):t.label,t.group?(o.classList.add("tabulator-edit-select-list-group"),o.tabIndex=0,o.innerHTML=""===t.label?"&nbsp;":t.label):(o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=""===t.label?"&nbsp;":t.label,o.addEventListener("click",function(){F=!0,setTimeout(function(){F=!1},10),z?(d(t),T.focus()):p(t)}),A.indexOf(t)>-1&&o.classList.add("active")),t.elementAttributes&&"object"==_typeof(t.elementAttributes))for(var i in t.elementAttributes)"+"==i.charAt(0)?(i=i.slice(1),o.setAttribute(i,T.getAttribute(i)+t.elementAttributes["+"+i])):o.setAttribute(i,t.elementAttributes[i]);o.addEventListener("mousedown",function(){_=!1,setTimeout(function(){_=!0},10)}),t.element=o}k.appendChild(o)})}function l(e,t){!z&&H&&H.element&&H.element.classList.remove("active"),H&&H.element&&H.element.classList.remove("focused"),H=e,e.element&&(e.element.classList.add("focused"),t&&e.element.classList.add("active")),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function c(e){-1==A.indexOf(e)&&(A.push(e),l(e,!0)),f()}function u(e){var t=A[e];e>-1&&(A.splice(e,1),t.element&&t.element.classList.remove("active"))}function d(e){e||(e=H);var t=A.indexOf(e);t>-1?u(t):(!0!==z&&A.length>=z&&u(0),c(e)),f()}function p(e){y(),e||(e=H),e&&(T.value=e.label,o(e.value)),D=[e.value]}function m(e){e||y();var t=[];A.forEach(function(e){t.push(e.value)}),D=t,o(t)}function f(){var e=[];A.forEach(function(t){e.push(t.label)}),T.value=e.join(", "),!1===x.currentCell&&m(!0)}function g(){for(var e=A.length,t=0;t<e;t++)u(0)}function b(){y(),i()}function v(){if(A=[],!k.parentNode){!0===n.values?a(s(),D):"string"==typeof n.values?a(s(n.values),D):a(n.values||[],D);var e=h.prototype.helpers.elOffset(R);k.style.minWidth=R.offsetWidth+"px",k.style.top=e.top+R.offsetHeight+"px",k.style.left=e.left+"px",k.addEventListener("mousedown",function(e){_=!1,setTimeout(function(){_=!0},10)}),document.body.appendChild(k)}}function y(){k.parentNode&&k.parentNode.removeChild(k),w()}function w(){x.table.rowManager.element.removeEventListener("scroll",b)}function E(e){clearTimeout(B);var t=String.fromCharCode(event.keyCode).toLowerCase();N+=t.toLowerCase();var o=S.find(function(e){return void 0!==e.label&&e.label.toLowerCase().startsWith(N)});o&&l(o,!z),B=setTimeout(function(){N=""},800)}var C=this,x=this,R=e.getElement(),M=e.getValue(),L=n.verticalNavigation||"editor",D=void 0!==M||null===M?Array.isArray(M)?M:[M]:void 0!==n.defaultValue?n.defaultValue:[],T=document.createElement("input"),k=document.createElement("div"),z=n.multiselect,S=[],H={},P=[],A=[],_=!0,F=!1,N="",B=null;if((Array.isArray(n)||!Array.isArray(n)&&"object"===(void 0===n?"undefined":_typeof(n))&&!n.values)&&(console.warn("DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"),n={values:n}),T.setAttribute("type","text"),T.style.padding="4px",T.style.width="100%",T.style.boxSizing="border-box",T.style.cursor="default",T.readOnly=0!=this.currentCell,n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var O in n.elementAttributes)"+"==O.charAt(0)?(O=O.slice(1),T.setAttribute(O,T.getAttribute(O)+n.elementAttributes["+"+O])):T.setAttribute(O,n.elementAttributes[O]);return T.value=void 0!==M||null===M?M:"",T.addEventListener("search",function(e){T.value||(g(),m())}),T.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=S.indexOf(H),("editor"==L||"hybrid"==L&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t>0&&l(S[t-1],!z));break;case 40:t=S.indexOf(H),("editor"==L||"hybrid"==L&&t<S.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<S.length-1&&(-1==t?l(S[0],!z):l(S[t+1],!z)));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault();break;case 13:z?d():p();break;case 27:b();break;case 9:break;default:!1===x.currentCell&&e.preventDefault(),e.keyCode>=38&&e.keyCode<=90&&E(e.keyCode)}}),T.addEventListener("blur",function(e){_&&(z?m():b())}),T.addEventListener("focus",function(e){F||v()}),k=document.createElement("div"),k.classList.add("tabulator-edit-select-list"),t(function(){T.style.height="100%",T.focus({preventScroll:!0})}),setTimeout(function(){C.table.rowManager.element.addEventListener("scroll",b)},10),T},autocomplete:function(e,t,o,i,n){function s(){!0===n.values?S=a():"string"==typeof n.values&&(S=a(n.values))}function a(t){var o,i={},s=E.table.getData();return o=t?E.table.columnManager.getColumnByField(t):e.getColumn()._getSelf(),o?(s.forEach(function(e){var t=o.getFieldValue(e);null!==t&&void 0!==t&&""!==t&&(i[t]=!0)}),i=n.sortValuesList?"asc"==n.sortValuesList?Object.keys(i).sort():Object.keys(i).sort().reverse():Object.keys(i)):console.warn("unable to find matching column to create autocomplete lookup list:",t),i}function r(e,t){var o,i,s=[];o=S||(n.values||[]),n.searchFunc?(s=n.searchFunc(e,o),s instanceof Promise?(l(void 0!==n.searchingPlaceholder?n.searchingPlaceholder:"Searching..."),s.then(function(e){d(c(e),t)}).catch(function(e){console.err("error in autocomplete search promise:",e)})):d(c(s),t)):(i=c(o),""===e?n.showListOnEmpty&&(s=i):i.forEach(function(t){null===t.value&&void 0===t.value||(String(t.value).toLowerCase().indexOf(String(e).toLowerCase())>-1||String(t.title).toLowerCase().indexOf(String(e).toLowerCase())>-1)&&s.push(t)}),d(s,t))}function l(e){var t=document.createElement("div");u(),!1!==e&&(t.classList.add("tabulator-edit-select-list-notice"),t.tabIndex=0,e instanceof Node?t.appendChild(e):t.innerHTML=e,D.appendChild(t))}function c(e){var t=[];if(Array.isArray(e))e.forEach(function(e){var o={};"object"===(void 0===e?"undefined":_typeof(e))?(o.title=n.listItemFormatter?n.listItemFormatter(e.value,e.label):e.label,o.value=e.value):(o.title=n.listItemFormatter?n.listItemFormatter(e,e):e,o.value=e),t.push(o)});else for(var o in e){var i={title:n.listItemFormatter?n.listItemFormatter(o,e[o]):e[o],value:o};t.push(i)}return t}function u(){for(;D.firstChild;)D.removeChild(D.firstChild)}function d(e,t){e.length?p(e,t):n.emptyPlaceholder&&l(n.emptyPlaceholder)}function p(e,t){var o=!1;u(),T=e,T.forEach(function(e){var i=e.element;i||(i=document.createElement("div"),i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=e.title,i.addEventListener("click",function(t){g(e),m()}),i.addEventListener("mousedown",function(e){z=!1,setTimeout(function(){z=!0},10)}),e.element=i,t&&e.value==x&&(L.value=e.title,e.element.classList.add("active"),o=!0),e===k&&(e.element.classList.add("active"),o=!0)),D.appendChild(i)}),o||g(!1)}function m(){b(),k?x!==k.value?(x=k.value,L.value=k.title,o(k.value)):i():n.freetext?(x=L.value,o(L.value)):n.allowEmpty&&""===L.value?(x=L.value,o(L.value)):i()}function f(){if(!D.parentNode){for(console.log("show",M);D.firstChild;)D.removeChild(D.firstChild);var e=h.prototype.helpers.elOffset(C);D.style.minWidth=C.offsetWidth+"px",D.style.top=e.top+C.offsetHeight+"px",D.style.left=e.left+"px",document.body.appendChild(D)}}function g(e,t){k&&k.element&&k.element.classList.remove("active"),k=e,e&&e.element&&e.element.classList.add("active"),e&&e.element&&e.element.scrollIntoView&&e.element.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}function b(){D.parentNode&&D.parentNode.removeChild(D),y()}function v(){b(),i()}function y(){E.table.rowManager.element.removeEventListener("scroll",v)}var w=this,E=this,C=e.getElement(),x=e.getValue(),R=n.verticalNavigation||"editor",M=void 0!==x||null===x?x:void 0!==n.defaultValue?n.defaultValue:"",L=document.createElement("input"),D=document.createElement("div"),T=[],k=!1,z=!0,S=!1;if(L.setAttribute("type","search"),L.style.padding="4px",L.style.width="100%",L.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var H in n.elementAttributes)"+"==H.charAt(0)?(H=H.slice(1),L.setAttribute(H,L.getAttribute(H)+n.elementAttributes["+"+H])):L.setAttribute(H,n.elementAttributes[H]);return D.classList.add("tabulator-edit-select-list"),D.addEventListener("mousedown",function(e){z=!1,setTimeout(function(){z=!0},10)}),L.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:t=T.indexOf(k),("editor"==R||"hybrid"==R&&t)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),g(t>0?T[t-1]:!1));break;case 40:t=T.indexOf(k),("editor"==R||"hybrid"==R&&t<T.length-1)&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault(),t<T.length-1&&g(-1==t?T[0]:T[t+1]));break;case 37:case 39:e.stopImmediatePropagation(),e.stopPropagation();break;case 13:m();break;case 27:v();break;case 36:case 35:e.stopImmediatePropagation()}}),L.addEventListener("keyup",function(e){switch(e.keyCode){case 38:case 37:case 39:case 40:case 13:case 27:break;default:r(L.value)}}),L.addEventListener("search",function(e){r(L.value)}),L.addEventListener("blur",function(e){z&&m()}),L.addEventListener("focus",function(e){var t=M;s(),f(),L.value=t,r(t,!0)}),t(function(){L.style.height="100%",L.focus({preventScroll:!0})}),n.mask&&this.table.modules.edit.maskInput(L,n),setTimeout(function(){w.table.rowManager.element.addEventListener("scroll",v)},10),s(),L.value=M,r(M,!0),L},star:function(e,t,o,i,n){function s(e){h.forEach(function(t,o){o<e?("ie"==r.table.browser?t.setAttribute("class","tabulator-star-active"):t.classList.replace("tabulator-star-inactive","tabulator-star-active"),t.innerHTML='<polygon fill="#488CE9" stroke="#014AAE" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>'):("ie"==r.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='<polygon fill="#010155" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>')})}function a(e){c=e,s(e)}var r=this,l=e.getElement(),c=e.getValue(),u=l.getElementsByTagName("svg").length||5,d=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,h=[],p=document.createElement("div"),m=document.createElementNS("http://www.w3.org/2000/svg","svg");if(l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",p.style.verticalAlign="middle",p.style.display="inline-block",p.style.padding="4px",m.setAttribute("width",d),m.setAttribute("height",d),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),p.setAttribute(f,p.getAttribute(f)+n.elementAttributes["+"+f])):p.setAttribute(f,n.elementAttributes[f]);for(var g=1;g<=u;g++)!function(e){var t=document.createElement("span"),i=m.cloneNode(!0);h.push(i),t.addEventListener("mouseenter",function(t){t.stopPropagation(),t.stopImmediatePropagation(),s(e)}),t.addEventListener("mousemove",function(e){e.stopPropagation(),e.stopImmediatePropagation()}),t.addEventListener("click",function(t){t.stopPropagation(),t.stopImmediatePropagation(),o(e),l.blur()}),t.appendChild(i),p.appendChild(t)}(g);return c=Math.min(parseInt(c),u),s(c),p.addEventListener("mousemove",function(e){s(0)}),p.addEventListener("click",function(e){o(0)}),l.addEventListener("blur",function(e){i()}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:a(c+1);break;case 37:a(c-1);break;case 13:o(c);break;case 27:i()}}),p},progress:function(e,t,o,i,n){function s(){var e=window.getComputedStyle(l,null),t=d*Math.round(m.offsetWidth/((l.clientWidth-parseInt(e.getPropertyValue("padding-left"))-parseInt(e.getPropertyValue("padding-right")))/100))+u;o(t),l.setAttribute("aria-valuenow",t),l.setAttribute("aria-label",h)}var a,r,l=e.getElement(),c=void 0===n.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,u=void 0===n.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,d=(c-u)/100,h=e.getValue()||0,p=document.createElement("div"),m=document.createElement("div");if(p.style.position="absolute",p.style.right="0",p.style.top="0",p.style.bottom="0",p.style.width="5px",p.classList.add("tabulator-progress-handle"),m.style.display="inline-block",m.style.position="relative",m.style.height="100%",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var f in n.elementAttributes)"+"==f.charAt(0)?(f=f.slice(1),m.setAttribute(f,m.getAttribute(f)+n.elementAttributes["+"+f])):m.setAttribute(f,n.elementAttributes[f]);return l.style.padding="4px 4px",h=Math.min(parseFloat(h),c),h=Math.max(parseFloat(h),u),h=Math.round((h-u)/d),m.style.width=h+"%",l.setAttribute("aria-valuemin",u),l.setAttribute("aria-valuemax",c),m.appendChild(p),p.addEventListener("mousedown",function(e){a=e.screenX,r=m.offsetWidth}),p.addEventListener("mouseover",function(){p.style.cursor="ew-resize"}),l.addEventListener("mousemove",function(e){a&&(m.style.width=r+e.screenX-a+"px")}),l.addEventListener("mouseup",function(e){a&&(e.stopPropagation(),e.stopImmediatePropagation(),a=!1,r=!1,s())}),l.addEventListener("keydown",function(e){switch(e.keyCode){case 39:e.preventDefault(),m.style.width=m.clientWidth+l.clientWidth/100+"px";break;case 37:e.preventDefault(),m.style.width=m.clientWidth-l.clientWidth/100+"px";break;case 9:case 13:s();break;case 27:i()}}),l.addEventListener("blur",function(){i()}),m},tickCross:function(e,t,o,i,n){function s(e){return l?e?u?c:r.checked:r.checked&&!u?(r.checked=!1,r.indeterminate=!0,u=!0,c):(u=!1,r.checked):r.checked}var a=e.getValue(),r=document.createElement("input"),l=n.tristate,c=void 0===n.indeterminateValue?null:n.indeterminateValue,u=!1;if(r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",n.elementAttributes&&"object"==_typeof(n.elementAttributes))for(var d in n.elementAttributes)"+"==d.charAt(0)?(d=d.slice(1),r.setAttribute(d,r.getAttribute(d)+n.elementAttributes["+"+d])):r.setAttribute(d,n.elementAttributes[d]);return r.value=a,!l||void 0!==a&&a!==c&&""!==a||(u=!0,r.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){r.focus({preventScroll:!0})}),r.checked=!0===a||"true"===a||"True"===a||1===a,t(function(){r.focus()}),r.addEventListener("change",function(e){o(s())}),r.addEventListener("blur",function(e){o(s(!0))}),r.addEventListener("keydown",function(e){13==e.keyCode&&o(s()),27==e.keyCode&&i()}),r}},h.prototype.registerModule("edit",x);var R=function(e,t,o,i){this.type=e,this.columns=t,this.component=o||!1,this.indent=i||0},M=function(e,t,o,i,n){this.value=e,this.component=t||!1,this.width=o,this.height=i,this.depth=n},L=function(e){this.table=e,this.config={},this.cloneTableStyle=!0,this.colVisProp=""};L.prototype.generateExportList=function(e,t,o,i){this.cloneTableStyle=t,this.config=e||{},this.colVisProp=i;var n=!1!==this.config.columnHeaders?this.headersToExportRows(this.generateColumnGroupHeaders()):[],s=this.bodyToExportRows(this.rowLookup(o));return n.concat(s)},L.prototype.genereateTable=function(e,t,o,i){var n=this.generateExportList(e,t,o,i);return this.genereateTableElement(n)},L.prototype.rowLookup=function(e){var t=this,o=[];if("function"==typeof e)e.call(this.table).forEach(function(e){(e=t.table.rowManager.findRow(e))&&o.push(e)});else switch(e){case!0:case"visible":o=this.table.rowManager.getVisibleRows(!0);break;case"all":o=this.table.rowManager.rows;break;case"selected":o=this.table.modules.selectRow.selectedRows;break;case"active":default:o=this.table.options.pagination?this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length-2):this.table.rowManager.getDisplayRows()}return Object.assign([],o)},L.prototype.generateColumnGroupHeaders=function(){var e=this,t=[];return(!1!==this.config.columnGroups?this.table.columnManager.columns:this.table.columnManager.columnsByIndex).forEach(function(o){var i=e.processColumnGroup(o);i&&t.push(i)}),t},L.prototype.processColumnGroup=function(e){var t=this,o=e.columns,i=0,n=e.definition["title"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))]||e.definition.title,s={title:n,column:e,depth:1};if(o.length){if(s.subGroups=[],s.width=0,o.forEach(function(e){var o=t.processColumnGroup(e);o&&(s.width+=o.width,s.subGroups.push(o),o.depth>i&&(i=o.depth))}),s.depth+=i,!s.width)return!1}else{if(!this.columnVisCheck(e))return!1;s.width=1}return s},L.prototype.columnVisCheck=function(e){return!1!==e.definition[this.colVisProp]&&(e.visible||!e.visible&&e.definition[this.colVisProp])},L.prototype.headersToExportRows=function(e){function t(e,n){var s=i-n;if(void 0===o[n]&&(o[n]=[]),e.height=e.subGroups?1:s-e.depth+1,o[n].push(e),e.height>1)for(var a=1;a<e.height;a++)void 0===o[n+a]&&(o[n+a]=[]),o[n+a].push(!1);if(e.width>1)for(var r=1;r<e.width;r++)o[n].push(!1);e.subGroups&&e.subGroups.forEach(function(e){t(e,n+1)})}var o=[],i=0,n=[];return e.forEach(function(e){e.depth>i&&(i=e.depth)}),e.forEach(function(e){t(e,0)}),o.forEach(function(e){var t=[];e.forEach(function(e){e?t.push(new M(e.title,e.column.getComponent(),e.width,e.height,e.depth)):t.push(null)}),n.push(new R("header",t))}),n},L.prototype.bodyToExportRows=function(e){var t=this,o=[],i=[];return this.table.columnManager.columnsByIndex.forEach(function(e){t.columnVisCheck(e)&&o.push(e.getComponent())}),!1!==this.config.columnCalcs&&this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&e.unshift(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&e.push(this.table.modules.columnCalcs.botRow)),e=e.filter(function(e){switch(e.type){case"group":return!1!==t.config.rowGroups;case"calc":return!1!==t.config.columnCalcs;case"row":return!(t.table.options.dataTree&&!1===t.config.dataTree&&e.modules.dataTree.parent)}return!0}),e.forEach(function(e,n){var s=e.getData(t.colVisProp),a=[],r=0;switch(e.type){case"group":r=e.level,a.push(new M(e.key,e.getComponent(),o.length,1));break;case"calc":case"row":o.forEach(function(e){a.push(new M(e._column.getFieldValue(s),e,1,1))}),t.table.options.dataTree&&!1!==t.config.dataTree&&(r=e.modules.dataTree.index)}i.push(new R(e.type,a,e.getComponent(),r))}),i},L.prototype.genereateTableElement=function(e){var t=this,o=document.createElement("table"),i=document.createElement("thead"),n=document.createElement("tbody"),s=this.lookupTableStyles(),a=this.table.options["rowFormatter"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r={};return r.rowFormatter=null!==a?a:this.table.options.rowFormatter,this.table.options.dataTree&&!1!==this.config.dataTree&&this.table.modExists("columnCalcs")&&(r.treeElementField=this.table.modules.dataTree.elementField),r.groupHeader=this.table.options["groupHeader"+(this.colVisProp.charAt(0).toUpperCase()+this.colVisProp.slice(1))],r.groupHeader&&!Array.isArray(r.groupHeader)&&(r.groupHeader=[r.groupHeader]),o.classList.add("tabulator-print-table"),this.mapElementStyles(this.table.columnManager.getHeadersElement(),i,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.length>1e3&&console.warn("It may take a long time to render an HTML table with more than 1000 rows"),e.forEach(function(e,o){switch(e.type){case"header":i.appendChild(t.genereateHeaderElement(e,r,s));break;case"group":n.appendChild(t.genereateGroupElement(e,r,s));break;case"calc":n.appendChild(t.genereateCalcElement(e,r,s));break;case"row":var a=t.genereateRowElement(e,r,s);t.mapElementStyles(o%2&&s.evenRow?s.evenRow:s.oddRow,a,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),n.appendChild(a)}}),i.innerHTML&&o.appendChild(i),o.appendChild(n),this.mapElementStyles(this.table.element,o,["border-top","border-left","border-right","border-bottom"]),o},L.prototype.lookupTableStyles=function(){var e={};return this.cloneTableStyle&&window.getComputedStyle&&(e.oddRow=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),e.evenRow=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),e.calcRow=this.table.element.querySelector(".tabulator-row.tabulator-calcs"),e.firstRow=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),e.firstGroup=this.table.element.getElementsByClassName("tabulator-group")[0],e.firstRow&&(e.styleCells=e.firstRow.getElementsByClassName("tabulator-cell"),e.firstCell=e.styleCells[0],e.lastCell=e.styleCells[e.styleCells.length-1])),e},L.prototype.genereateHeaderElement=function(e,t,o){var i=this,n=document.createElement("tr");return e.columns.forEach(function(e){if(e){var t=document.createElement("th"),o=e.component._column.definition.cssClass?e.component._column.definition.cssClass.split(" "):[];t.colSpan=e.width,t.rowSpan=e.height,t.innerHTML=e.value,i.cloneTableStyle&&(t.style.boxSizing="border-box"),o.forEach(function(e){t.classList.add(e)}),i.mapElementStyles(e.component.getElement(),t,["text-align","border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),i.mapElementStyles(e.component._column.contentElement,t,["padding-top","padding-left","padding-right","padding-bottom"]),e.component._column.visible?i.mapElementStyles(e.component.getElement(),t,["width"]):e.component._column.definition.width&&(t.style.width=e.component._column.definition.width+"px"),e.component._column.parent&&i.mapElementStyles(e.component._column.parent.groupElement,t,["border-top"]),n.appendChild(t)}}),n},L.prototype.genereateGroupElement=function(e,t,o){var i=document.createElement("tr"),n=document.createElement("td"),s=e.columns[0];return i.classList.add("tabulator-print-table-row"),t.groupHeader&&t.groupHeader[e.indent]?s.value=t.groupHeader[e.indent](s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component):!1===t.groupHeader?s.value=s.value:s.value=e.component._group.generator(s.value,e.component._group.getRowCount(),e.component._group.getData(),e.component),n.colSpan=s.width,n.innerHTML=s.value,i.classList.add("tabulator-print-table-group"),i.classList.add("tabulator-group-level-"+e.indent),s.component.isVisible()&&i.classList.add("tabulator-group-visible"),this.mapElementStyles(o.firstGroup,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),this.mapElementStyles(o.firstGroup,n,["padding-top","padding-left","padding-right","padding-bottom"]),i.appendChild(n),i},L.prototype.genereateCalcElement=function(e,t,o){var i=this.genereateRowElement(e,t,o);return i.classList.add("tabulator-print-table-calcs"),this.mapElementStyles(o.calcRow,i,["border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size","background-color"]),i},L.prototype.genereateRowElement=function(e,t,o){var n=this,s=document.createElement("tr");return s.classList.add("tabulator-print-table-row"),e.columns.forEach(function(a){if(a){var r=document.createElement("td"),l=a.component._column,c=a.value,u={modules:{},getValue:function(){return c},getField:function(){return l.definition.field},getElement:function(){return r},getColumn:function(){return l.getComponent()},getData:function(){return e.component.getData()},getRow:function(){return e.component},getComponent:function(){return u},column:l};if((l.definition.cssClass?l.definition.cssClass.split(" "):[]).forEach(function(e){r.classList.add(e)}),n.table.modExists("format")&&!1!==n.config.formatCells)c=n.table.modules.format.formatExportValue(u,n.colVisProp);else switch(void 0===c?"undefined":_typeof(c)){case"object":c=JSON.stringify(c);break;case"undefined":case"null":c="";break;default:c=c}c instanceof Node?r.appendChild(c):r.innerHTML=c,o.firstCell&&(n.mapElementStyles(o.firstCell,r,["padding-top","padding-left","padding-right","padding-bottom","border-top","border-left","border-right","border-bottom","color","font-weight","font-family","font-size"]),l.definition.align&&(r.style.textAlign=l.definition.align)),n.table.options.dataTree&&!1!==n.config.dataTree&&(t.treeElementField&&t.treeElementField==l.field||!t.treeElementField&&0==i)&&(e.component._row.modules.dataTree.controlEl&&r.insertBefore(e.component._row.modules.dataTree.controlEl.cloneNode(!0),r.firstChild),e.component._row.modules.dataTree.branchEl&&r.insertBefore(e.component._row.modules.dataTree.branchEl.cloneNode(!0),r.firstChild)),s.appendChild(r),u.modules.format&&u.modules.format.renderedCallback&&u.modules.format.renderedCallback(),t.rowFormatter&&!1!==n.config.formatCells&&t.rowFormatter(e.component)}}),s},L.prototype.genereateHTMLTable=function(e){var t=document.createElement("div");return t.appendChild(this.genereateTableElement(e)),t.innerHTML},L.prototype.getHtml=function(e,t,o,i){var n=this.generateExportList(o||this.table.options.htmlOutputConfig,t,e,i||"htmlOutput");return this.genereateHTMLTable(n)},L.prototype.mapElementStyles=function(e,t,o){if(this.cloneTableStyle&&e&&t){var i={"background-color":"backgroundColor",color:"fontColor",width:"width","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","text-align":"textAlign","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom","padding-top":"paddingTop","padding-left":"paddingLeft","padding-right":"paddingRight","padding-bottom":"paddingBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(e);o.forEach(function(e){t.style[i[e]]=n.getPropertyValue(e)})}}},h.prototype.registerModule("export",L);var D=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterColumns=[],this.prevHeaderFilterChangeCheck="",this.prevHeaderFilterChangeCheck="{}",this.changed=!1};D.prototype.initializeColumn=function(e,t){function o(t){var o,a="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",r="",l="";if(void 0===e.modules.filter.prevSuccess||e.modules.filter.prevSuccess!==t){if(e.modules.filter.prevSuccess=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[s];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(r=e.definition.headerFilterFunc,o=function(o){var i=e.definition.headerFilterFuncParams||{},s=e.getFieldValue(o);return i="function"==typeof i?i(t,s,o):i,n.filters[e.definition.headerFilterFunc](t,s,o,i)}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":o=function(o){var i=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(o);return i="function"==typeof i?i(t,n,o):i,e.definition.headerFilterFunc(t,n,o,i)},r=o}if(!o)switch(a){case"partial":o=function(o){var i=e.getFieldValue(o);return void 0!==i&&null!==i&&String(i).toLowerCase().indexOf(String(t).toLowerCase())>-1},r="like";break;default:o=function(o){return e.getFieldValue(o)==t},r="="}n.headerFilters[s]={value:t,func:o,
+type:r,params:i||{}}}l=JSON.stringify(n.headerFilters),n.prevHeaderFilterChangeCheck!==l&&(n.prevHeaderFilterChangeCheck=l,n.changed=!0,n.table.rowManager.filterRefresh())}return!0}var i,n=this,s=e.getField();e.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},D.prototype.generateHeaderFilterElement=function(e,t,o){function i(){}var n,s,a,r,l,c,u,d=this,h=this,p=e.modules.filter.success,m=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.contentElement.removeChild(e.modules.filter.headerElement.parentNode),m){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e&&0!==e},n=document.createElement("div"),n.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":h.table.modules.edit.editors[e.definition.headerFilter]?(s=h.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":s=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?s=e.modules.edit.editor:e.definition.formatter&&h.table.modules.edit.editors[e.definition.formatter]?(s=h.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):s=h.table.modules.edit.editors.input}if(s){if(r={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return n},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=e.definition.headerFilterParams||{},u="function"==typeof u?u.call(h.table):u,!(a=s.call(this.table.modules.edit,r,function(){},p,i,u)))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor returned a value of false");if(!(a instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+m+" column, editor should return an instance of Node, the editor returned:",a);m?h.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){a.setAttribute("placeholder",void 0!==e&&e?e:h.table.modules.localize.getText("headerFilters|default"))}):h.table.modules.localize.bind("headerFilters|default",function(e){a.setAttribute("placeholder",void 0!==h.column.definition.headerFilterPlaceholder&&h.column.definition.headerFilterPlaceholder?h.column.definition.headerFilterPlaceholder:e)}),a.addEventListener("click",function(e){e.stopPropagation(),a.focus()}),a.addEventListener("focus",function(e){var t=d.table.columnManager.element.scrollLeft;t!==d.table.rowManager.element.scrollLeft&&(d.table.rowManager.scrollHorizontal(t),d.table.columnManager.scrollHorizontal(t))}),l=!1,c=function(e){l&&clearTimeout(l),l=setTimeout(function(){p(a.value)},h.table.options.headerFilterLiveFilterDelay)},e.modules.filter.headerElement=a,e.modules.filter.attrType=a.hasAttribute("type")?a.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=a.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter&&("autocomplete"!==e.definition.editor&&"tickCross"!==e.definition.editor||!0!==e.definition.headerFilter)&&(a.addEventListener("keyup",c),a.addEventListener("search",c),"number"==e.modules.filter.attrType&&a.addEventListener("change",function(e){p(a.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&a.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||a.addEventListener("mousedown",function(e){e.stopPropagation()})),n.appendChild(a),e.contentElement.appendChild(n),o||h.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},D.prototype.hideHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="none")})},D.prototype.showHeaderFilterElements=function(){this.headerFilterColumns.forEach(function(e){e.modules.filter&&e.modules.filter.headerElement&&(e.modules.filter.headerElement.style.display="")})},D.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},D.prototype.getHeaderFilterValue=function(e){if(e.modules.filter&&e.modules.filter.headerElement)return e.modules.filter.headerElement.value;console.warn("Column Filter Error - No header filter set on column:",e.getField())},D.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t,!0),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},D.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value,!0):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},D.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},D.prototype.setFilter=function(e,t,o,i){var n=this;n.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),n.addFilter(e)},D.prototype.addFilter=function(e,t,o,i){var n=this;Array.isArray(e)||(e=[{field:e,type:t,value:o,params:i}]),e.forEach(function(e){(e=n.findFilter(e))&&(n.filterList.push(e),n.changed=!0)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},D.prototype.findFilter=function(e){var t,o=this;if(Array.isArray(e))return this.findSubFilters(e);var i=!1;return"function"==typeof e.field?i=function(t){return e.field(t,e.type||{})}:o.filters[e.type]?(t=o.table.columnManager.getColumnByField(e.field),i=t?function(i){return o.filters[e.type](e.value,t.getFieldValue(i),i,e.params||{})}:function(t){return o.filters[e.type](e.value,t[e.field],t,e.params||{})}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=i,!!e.func&&e},D.prototype.findSubFilters=function(e){var t=this,o=[];return e.forEach(function(e){(e=t.findFilter(e))&&o.push(e)}),!!o.length&&o},D.prototype.getFilters=function(e,t){var o=[];return e&&(o=this.getHeaderFilters()),t&&o.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),o=o.concat(this.filtersToArray(this.filterList,t))},D.prototype.filtersToArray=function(e,t){var o=this,i=[];return e.forEach(function(e){var n;Array.isArray(e)?i.push(o.filtersToArray(e,t)):(n={field:e.field,type:e.type,value:e.value},t&&"function"==typeof n.type&&(n.type="function"),i.push(n))}),i},D.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},D.prototype.removeFilter=function(e,t,o){var i=this;Array.isArray(e)||(e=[{field:e,type:t,value:o}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?i.filterList.findIndex(function(t){return e===t}):i.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(i.filterList.splice(t,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},D.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.filter&&this.table.modules.persistence.save("filter")},D.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},e.prevHeaderFilterChangeCheck="{}",this.headerFilterColumns.forEach(function(t){void 0!==t.modules.filter.value&&delete t.modules.filter.value,t.modules.filter.prevSuccess=void 0,e.reloadHeaderFilter(t)}),this.changed=!0},D.prototype.search=function(e,t,o,i){var n=this,s=[],a=[];return Array.isArray(t)||(t=[{field:t,type:o,value:i}]),t.forEach(function(e){(e=n.findFilter(e))&&a.push(e)}),this.table.rowManager.rows.forEach(function(t){var o=!0;a.forEach(function(e){n.filterRecurse(e,t.getData())||(o=!1)}),o&&s.push("data"===e?t.getData("data"):t.getComponent())}),s},D.prototype.filter=function(e,t){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=e.slice(0):e.forEach(function(e){o.filterRow(e)&&i.push(e)}),o.table.options.dataFiltered&&(i.forEach(function(e){n.push(e.getComponent())}),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},D.prototype.filterRow=function(e,t){var o=this,i=!0,n=e.getData();o.filterList.forEach(function(e){o.filterRecurse(e,n)||(i=!1)});for(var s in o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},D.prototype.filterRecurse=function(e,t){var o=this,i=!1;return Array.isArray(e)?e.forEach(function(e){o.filterRecurse(e,t)&&(i=!0)}):i=e.func(t),i},D.prototype.filters={"=":function(e,t,o,i){return t==e},"<":function(e,t,o,i){return t<e},"<=":function(e,t,o,i){return t<=e},">":function(e,t,o,i){return t>e},">=":function(e,t,o,i){return t>=e},"!=":function(e,t,o,i){return t!=e},regex:function(e,t,o,i){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},keywords:function(e,t,o,i){var n=e.toLowerCase().split(void 0===i.separator?" ":i.separator),s=String(null===t||void 0===t?"":t).toLowerCase(),a=[];return n.forEach(function(e){s.includes(e)&&a.push(!0)}),i.matchAll?a.length===n.length:!!a.length},starts:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().startsWith(e.toLowerCase())},ends:function(e,t,o,i){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().endsWith(e.toLowerCase())},in:function(e,t,o,i){return Array.isArray(e)?!e.length||e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},h.prototype.registerModule("filter",D);var T=function(e){this.table=e};T.prototype.initializeColumn=function(e){e.modules.format=this.lookupFormatter(e,""),void 0!==e.definition.formatterPrint&&(e.modules.format.print=this.lookupFormatter(e,"Print")),void 0!==e.definition.formatterClipboard&&(e.modules.format.clipboard=this.lookupFormatter(e,"Clipboard")),void 0!==e.definition.formatterHtmlOutput&&(e.modules.format.htmlOutput=this.lookupFormatter(e,"HtmlOutput"))},T.prototype.lookupFormatter=function(e,t){var o={params:e.definition["formatter"+t+"Params"]||{}},i=e.definition["formatter"+t];switch(void 0===i?"undefined":_typeof(i)){case"string":"tick"===i&&(i="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false")),this.formatters[i]?o.formatter=this.formatters[i]:(console.warn("Formatter Error - No such formatter found: ",i),o.formatter=this.formatters.plaintext);break;case"function":o.formatter=i;break;default:o.formatter=this.formatters.plaintext}return o},T.prototype.cellRendered=function(e){e.modules.format&&e.modules.format.renderedCallback&&!e.modules.format.rendered&&(e.modules.format.renderedCallback(),e.modules.format.rendered=!0)},T.prototype.formatValue=function(e){function t(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1}var o=e.getComponent(),i="function"==typeof e.column.modules.format.params?e.column.modules.format.params(o):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,o,i,t)},T.prototype.formatExportValue=function(e,t){var o,i=e.column.modules.format[t];if(i){var n=function(t){e.modules.format||(e.modules.format={}),e.modules.format.renderedCallback=t,e.modules.format.rendered=!1};return o="function"==typeof i.params?i.params(component):i.params,i.formatter.call(this,e.getComponent(),o,n)}return this.formatValue(e)},T.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},T.prototype.emptyToSpace=function(e){return null===e||void 0===e||""===e?"&nbsp;":e},T.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},T.prototype.formatters={plaintext:function(e,t,o){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,o){return e.getValue()},textarea:function(e,t,o){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,o){var i,n,s,a,r=parseFloat(e.getValue()),l=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,h=void 0!==t.precision?t.precision:2;if(isNaN(r))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(i=!1!==h?r.toFixed(h):r,i=String(i).split("."),n=i[0],s=i.length>1?l+i[1]:"",a=/(\d+)(\d{3})/;a.test(n);)n=n.replace(a,"$1"+c+"$2");return d?n+s+u:u+n+s},link:function(e,t,o){var i,n=e.getValue(),s=t.urlPrefix||"",a=t.download,r=n,l=document.createElement("a");if(t.labelField&&(i=e.getData(),r=i[t.labelField]),t.label)switch(_typeof(t.label)){case"string":r=t.label;break;case"function":r=t.label(e)}if(r){if(t.urlField&&(i=e.getData(),n=i[t.urlField]),t.url)switch(_typeof(t.url)){case"string":n=t.url;break;case"function":n=t.url(e)}return l.setAttribute("href",s+n),t.target&&l.setAttribute("target",t.target),t.download&&(a="function"==typeof a?a(e):!0===a?"":a,l.setAttribute("download",a)),l.innerHTML=this.emptyToSpace(this.sanitizeHTML(r)),l}return"&nbsp;"},image:function(e,t,o){var i=document.createElement("img"),n=e.getValue();switch(t.urlPrefix&&(n=t.urlPrefix+e.getValue()),t.urlSuffix&&(n+=t.urlSuffix),i.setAttribute("src",n),_typeof(t.height)){case"number":i.style.height=t.height+"px";break;case"string":i.style.height=t.height}switch(_typeof(t.width)){case"number":i.style.width=t.width+"px";break;case"string":i.style.width=t.width}return i.addEventListener("load",function(){e.getRow().normalizeHeight()}),i},tickCross:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t.allowEmpty,a=t.allowTruthy,r=void 0!==t.tickElement?t.tickElement:'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>',l=void 0!==t.crossElement?t.crossElement:'<svg enable-background="new 0 0 24 24" height="14" width="14"  viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>';return a&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),r||""):!s||"null"!==i&&""!==i&&null!==i&&void 0!==i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,o){var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=t.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",a=e.getValue(),r=moment(a,i);return r.isValid()?t.timezone?r.tz(t.timezone).format(n):r.format(n):!0===s?a:"function"==typeof s?s(a):s},datetimediff:function(e,t,o){var i=t.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",s=void 0!==t.suffix&&t.suffix,a=void 0!==t.unit?t.unit:void 0,r=void 0!==t.humanize&&t.humanize,l=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,i);return u.isValid()?r?moment.duration(u.diff(l)).humanize(s):u.diff(l,a)+(s?" "+s:""):!0===n?c:"function"==typeof n?n(c):n},lookup:function(e,t,o){var i=e.getValue();return void 0===t[i]?(console.warn("Missing display value for "+i),i):t[i]},star:function(e,t,o){var i=e.getValue(),n=e.getElement(),s=t&&t.stars?t.stars:5,a=document.createElement("span"),r=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.verticalAlign="middle",r.setAttribute("width","14"),r.setAttribute("height","14"),r.setAttribute("viewBox","0 0 512 512"),r.setAttribute("xml:space","preserve"),r.style.padding="0 1px",i=i&&!isNaN(i)?parseInt(i):0,i=Math.max(0,Math.min(i,s));for(var l=1;l<=s;l++){var c=r.cloneNode(!0);c.innerHTML=l<=i?'<polygon fill="#FFEA00" stroke="#C1AB60" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>':'<polygon fill="#D2D2D2" stroke="#686868" stroke-width="37.6152" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 "/>',a.appendChild(c)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),a},traffic:function(e,t,o){var i,n,s=this.sanitizeHTML(e.getValue())||0,a=document.createElement("span"),r=t&&t.max?t.max:100,l=t&&t.min?t.min:0,c=t&&void 0!==t.color?t.color:["red","orange","green"],u="#666666";if(!isNaN(s)&&void 0!==e.getValue()){switch(a.classList.add("tabulator-traffic-light"),n=parseFloat(s)<=r?parseFloat(s):r,n=parseFloat(n)>=l?parseFloat(n):l,i=(r-l)/100,n=Math.round((n-l)/i),void 0===c?"undefined":_typeof(c)){case"string":u=c;break;case"function":u=c(s);break;case"object":if(Array.isArray(c)){var d=100/c.length,h=Math.floor(n/d);h=Math.min(h,c.length-1),h=Math.max(h,0),u=c[h];break}}return a.style.backgroundColor=u,a}},progress:function(e,t,o){var i,n,s,a,r,l=this.sanitizeHTML(e.getValue())||0,u=e.getElement(),d=t&&t.max?t.max:100,h=t&&t.min?t.min:0,p=t&&t.legendAlign?t.legendAlign:"center";switch(n=parseFloat(l)<=d?parseFloat(l):d,n=parseFloat(n)>=h?parseFloat(n):h,i=(d-h)/100,n=Math.round((n-h)/i),_typeof(t.color)){case"string":s=t.color;break;case"function":s=t.color(l);break;case"object":if(Array.isArray(t.color)){var m=100/t.color.length,f=Math.floor(n/m);f=Math.min(f,t.color.length-1),f=Math.max(f,0),s=t.color[f];break}default:s="#2DC214"}switch(_typeof(t.legend)){case"string":a=t.legend;break;case"function":a=t.legend(l);break;case"boolean":a=l;break;default:a=!1}switch(_typeof(t.legendColor)){case"string":r=t.legendColor;break;case"function":r=t.legendColor(l);break;case"object":if(Array.isArray(t.legendColor)){var m=100/t.legendColor.length,f=Math.floor(n/m);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),r=t.legendColor[f]}break;default:r="#000"}u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n);var g=document.createElement("div");if(g.style.display="inline-block",g.style.position="relative",g.style.width=n+"%",g.style.backgroundColor=s,g.style.height="100%",g.setAttribute("data-max",d),g.setAttribute("data-min",h),a){var b=document.createElement("div");b.style.position="absolute",b.style.top="4px",b.style.left=0,b.style.textAlign=p,b.style.width="100%",b.style.color=r,b.innerHTML=a}return o(function(){if(!(e instanceof c)){var t=document.createElement("div");t.style.position="absolute",t.style.top="4px",t.style.bottom="4px",t.style.left="4px",t.style.right="4px",u.appendChild(t),u=t}u.appendChild(g),a&&u.appendChild(b)}),""},color:function(e,t,o){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#2DC214" clip-rule="evenodd" d="M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34  c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351  l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07  l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z" fill-rule="evenodd"/></svg>'},buttonCross:function(e,t,o){return'<svg enable-background="new 0 0 24 24" height="14" width="14" viewBox="0 0 24 24" xml:space="preserve" ><path fill="#CE1515" d="M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272  c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0  l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269  c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73  L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z"/></svg>'},rownum:function(e,t,o){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,o){return e.getElement().classList.add("tabulator-row-handle"),"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>"},responsiveCollapse:function(e,t,o){function i(e){var t=s.element;s.open=e,t&&(s.open?(n.classList.add("open"),t.style.display=""):(n.classList.remove("open"),t.style.display="none"))}var n=document.createElement("div"),s=e.getRow()._row.modules.responsiveLayout;return n.classList.add("tabulator-responsive-collapse-toggle"),n.innerHTML="<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>",e.getElement().classList.add("tabulator-row-handle"),n.addEventListener("click",function(e){e.stopImmediatePropagation(),i(!s.open)}),i(s.open),n},rowSelection:function(e,t,o){var i=this,n=document.createElement("input");if(n.type="checkbox",this.table.modExists("selectRow",!0))if(n.addEventListener("click",function(e){e.stopPropagation()}),"function"==typeof e.getRow){var s=e.getRow();s instanceof r?(n.addEventListener("change",function(e){s.toggleSelect()}),n.checked=s.isSelected&&s.isSelected(),this.table.modules.selectRow.registerRowSelectCheckbox(s,n)):n=""}else n.addEventListener("change",function(e){i.table.modules.selectRow.selectedRows.length?i.table.deselectRow():i.table.selectRow(t.rowRange)}),this.table.modules.selectRow.registerHeaderSelectCheckbox(n);return n}},h.prototype.registerModule("format",T);var k=function(e){this.table=e,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightPadding=0,this.initializationMode="left",this.active=!1,this.scrollEndTimer=!1};k.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.rightMargin=0,this.active=!1,this.table.columnManager.headersElement.style.marginLeft=0,this.table.columnManager.element.style.paddingRight=0},k.prototype.initializeColumn=function(e){var t={margin:0,edge:!1};e.isGroup||(this.frozenCheck(e)?(t.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(e):this.rightColumns.unshift(e),this.active=!0,e.modules.frozen=t):this.initializationMode="right")},k.prototype.frozenCheck=function(e){return e.parent.isGroup&&e.definition.frozen&&console.warn("Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups"),e.parent.isGroup?this.frozenCheck(e.parent):e.definition.frozen},k.prototype.scrollHorizontal=function(){var e,t=this;this.active&&(clearTimeout(this.scrollEndTimer),this.scrollEndTimer=setTimeout(function(){t.layout()},100),e=this.table.rowManager.getVisibleRows(),this.calcMargins(),this.layoutColumnPosition(),this.layoutCalcRows(),e.forEach(function(e){"row"===e.type&&t.layoutRow(e)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},k.prototype.calcMargins=function(){this.leftMargin=this._calcSpace(this.leftColumns,this.leftColumns.length)+"px",this.table.columnManager.headersElement.style.marginLeft=this.leftMargin,this.rightMargin=this._calcSpace(this.rightColumns,this.rightColumns.length)+"px",this.table.columnManager.element.style.paddingRight=this.rightMargin,this.rightPadding=this.table.rowManager.element.clientWidth+this.table.columnManager.scrollLeft},k.prototype.layoutCalcRows=function(){this.table.modExists("columnCalcs")&&(this.table.modules.columnCalcs.topInitialized&&this.table.modules.columnCalcs.topRow&&this.layoutRow(this.table.modules.columnCalcs.topRow),this.table.modules.columnCalcs.botInitialized&&this.table.modules.columnCalcs.botRow&&this.layoutRow(this.table.modules.columnCalcs.botRow))},k.prototype.layoutColumnPosition=function(e){var t=this,o=[];this.leftColumns.forEach(function(i,n){if(i.modules.frozen.margin=t._calcSpace(t.leftColumns,n)+t.table.columnManager.scrollLeft+"px",n==t.leftColumns.length-1?i.modules.frozen.edge=!0:i.modules.frozen.edge=!1,i.parent.isGroup){var s=t.getColGroupParentElement(i);o.includes(s)||(t.layoutElement(s,i),o.push(s)),i.modules.frozen.edge&&s.classList.add("tabulator-frozen-"+i.modules.frozen.position)}else t.layoutElement(i.getElement(),i);e&&i.cells.forEach(function(e){t.layoutElement(e.getElement(!0),i)})}),this.rightColumns.forEach(function(o,i){o.modules.frozen.margin=t.rightPadding-t._calcSpace(t.rightColumns,i+1)+"px",i==t.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,o.parent.isGroup?t.layoutElement(t.getColGroupParentElement(o),o):t.layoutElement(o.getElement(),o),e&&o.cells.forEach(function(e){t.layoutElement(e.getElement(!0),o)})})},k.prototype.getColGroupParentElement=function(e){return e.parent.isGroup?this.getColGroupParentElement(e.parent):e.getElement()},k.prototype.layout=function(){var e=this;e.active&&(this.calcMargins(),e.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&e.layoutRow(t)}),this.layoutCalcRows(),this.layoutColumnPosition(!0),this.table.rowManager.tableElement.style.marginRight=this.rightMargin)},k.prototype.layoutRow=function(e){var t=this;e.getElement().style.paddingLeft=this.leftMargin,this.leftColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(!0),o)}),this.rightColumns.forEach(function(o){var i=e.getCell(o);i&&t.layoutElement(i.getElement(!0),o)})},k.prototype.layoutElement=function(e,t){t.modules.frozen&&(e.style.position="absolute",e.style.left=t.modules.frozen.margin,e.classList.add("tabulator-frozen"),t.modules.frozen.edge&&e.classList.add("tabulator-frozen-"+t.modules.frozen.position))},k.prototype._calcSpace=function(e,t){for(var o=0,i=0;i<t;i++)e[i].visible&&(o+=e[i].getWidth());return o},h.prototype.registerModule("frozenColumns",k);var z=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};z.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},z.prototype.setDisplayIndex=function(e){this.displayIndex=e},z.prototype.getDisplayIndex=function(){return this.displayIndex},z.prototype.isFrozen=function(){return!!this.rows.length},z.prototype.getRows=function(e){var t=e.slice(0);return this.rows.forEach(function(e){var o=t.indexOf(e);o>-1&&t.splice(o,1)}),t},z.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},z.prototype.unfreezeRow=function(e){this.rows.indexOf(e);e.modules.frozen?(e.modules.frozen=!1,this.detachRow(e),this.table.rowManager.adjustTableSize(),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()):console.warn("Freeze Error - Row is already unfrozen")},z.prototype.detachRow=function(e){var t=this.rows.indexOf(e);if(t>-1){var o=e.getElement();o.parentNode.removeChild(o),this.rows.splice(t,1)}},z.prototype.styleRows=function(e){var t=this;this.rows.forEach(function(e,o){t.table.rowManager.styleRow(e,o)})},h.prototype.registerModule("frozenRows",z);var S=function(e){this._group=e,this.type="GroupComponent"};S.prototype.getKey=function(){return this._group.key},S.prototype.getField=function(){return this._group.field},S.prototype.getElement=function(){return this._group.element},S.prototype.getRows=function(){return this._group.getRows(!0)},S.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},S.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},S.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._group.visible},S.prototype.isVisible=function(){return this._group.visible},S.prototype.show=function(){this._group.show()},S.prototype.hide=function(){this._group.hide()},S.prototype.toggle=function(){this._group.toggleVisibility()},S.prototype._getSelf=function(){return this._group},S.prototype.getTable=function(){return this._group.groupManager.table};var H=function(e,t,o,i,n,s,a){this.groupManager=e,this.parent=t,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o<e.groupIDLookups.length-1,this.addRow=this.hasSubGroups?this._addRowToGroup:this._addRow,this.type="group",this.old=a,this.rows=[],this.groups=[],this.groupList=[],this.generator=s,this.elementContents=!1,this.height=0,this.outerHeight=0,this.initialized=!1,this.calcs={},this.initialized=!1,this.modules={},this.arrowElement=!1,this.visible=a?a.visible:void 0!==e.startOpen[o]?e.startOpen[o]:e.startOpen[0],this.component=null,this.createElements(),this.addBindings(),this.createValueGroups()};H.prototype.wipe=function(){this.groupList.length?this.groupList.forEach(function(e){e.wipe()}):(this.element=!1,this.arrowElement=!1,this.elementContents=!1)
+},H.prototype.createElements=function(){var e=document.createElement("div");e.classList.add("tabulator-arrow"),this.element=document.createElement("div"),this.element.classList.add("tabulator-row"),this.element.classList.add("tabulator-group"),this.element.classList.add("tabulator-group-level-"+this.level),this.element.setAttribute("role","rowgroup"),this.arrowElement=document.createElement("div"),this.arrowElement.classList.add("tabulator-group-toggle"),this.arrowElement.appendChild(e),!1!==this.groupManager.table.options.movableRows&&this.groupManager.table.modExists("moveRow")&&this.groupManager.table.modules.moveRow.initializeGroupHeader(this)},H.prototype.createValueGroups=function(){var e=this,t=this.level+1;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]&&this.groupManager.allowedValues[t].forEach(function(o){e._createGroup(o,t)})},H.prototype.addBindings=function(){var e,t,o,i,n=this;n.groupManager.table.options.groupClick&&n.element.addEventListener("click",function(e){n.groupManager.table.options.groupClick.call(n.groupManager.table,e,n.getComponent())}),n.groupManager.table.options.groupDblClick&&n.element.addEventListener("dblclick",function(e){n.groupManager.table.options.groupDblClick.call(n.groupManager.table,e,n.getComponent())}),n.groupManager.table.options.groupContext&&n.element.addEventListener("contextmenu",function(e){n.groupManager.table.options.groupContext.call(n.groupManager.table,e,n.getComponent())}),(n.groupManager.table.options.groupContextMenu||n.groupManager.table.options.groupClickMenu)&&n.groupManager.table.modExists("menu")&&n.groupManager.table.modules.menu.initializeGroup.call(n.groupManager.table.modules.menu,n),n.groupManager.table.options.groupTap&&(o=!1,n.element.addEventListener("touchstart",function(e){o=!0},{passive:!0}),n.element.addEventListener("touchend",function(e){o&&n.groupManager.table.options.groupTap(e,n.getComponent()),o=!1})),n.groupManager.table.options.groupDblTap&&(e=null,n.element.addEventListener("touchend",function(t){e?(clearTimeout(e),e=null,n.groupManager.table.options.groupDblTap(t,n.getComponent())):e=setTimeout(function(){clearTimeout(e),e=null},300)})),n.groupManager.table.options.groupTapHold&&(t=null,n.element.addEventListener("touchstart",function(e){clearTimeout(t),t=setTimeout(function(){clearTimeout(t),t=null,o=!1,n.groupManager.table.options.groupTapHold(e,n.getComponent())},1e3)},{passive:!0}),n.element.addEventListener("touchend",function(e){clearTimeout(t),t=null})),n.groupManager.table.options.groupToggleElement&&(i="arrow"==n.groupManager.table.options.groupToggleElement?n.arrowElement:n.element,i.addEventListener("click",function(e){e.stopPropagation(),e.stopImmediatePropagation(),n.toggleVisibility()}))},H.prototype._createGroup=function(e,t){var o=t+"_"+e,i=new H(this.groupManager,this,t,e,this.groupManager.groupIDLookups[t].field,this.groupManager.headerGenerator[t]||this.groupManager.headerGenerator[0],!!this.old&&this.old.groups[o]);this.groups[o]=i,this.groupList.push(i)},H.prototype._addRowToGroup=function(e){var t=this.level+1;if(this.hasSubGroups){var o=this.groupManager.groupIDLookups[t].func(e.getData()),i=t+"_"+o;this.groupManager.allowedValues&&this.groupManager.allowedValues[t]?this.groups[i]&&this.groups[i].addRow(e):(this.groups[i]||this._createGroup(o,t),this.groups[i].addRow(e))}},H.prototype._addRow=function(e){this.rows.push(e),e.modules.group=this},H.prototype.insertRow=function(e,t,o){var i=this.conformRowData({});e.updateData(i);var n=this.rows.indexOf(t);n>-1?o?this.rows.splice(n+1,0,e):this.rows.splice(n,0,e):o?this.rows.push(e):this.rows.unshift(e),e.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this),this.groupManager.updateGroupRows(!0)},H.prototype.scrollHeader=function(e){this.arrowElement.style.marginLeft=e,this.groupList.forEach(function(t){t.scrollHeader(e)})},H.prototype.getRowIndex=function(e){},H.prototype.conformRowData=function(e){return this.field?e[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(e=this.parent.conformRowData(e)),e},H.prototype.removeRow=function(e){var t=this.rows.indexOf(e),o=e.getElement();t>-1&&this.rows.splice(t,1),this.groupManager.table.options.groupValues||this.rows.length?(o.parentNode&&o.parentNode.removeChild(o),this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},H.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],t=this.groupList.indexOf(e),t>-1&&this.groupList.splice(t,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},H.prototype.getHeadersAndRows=function(e){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(o){t=t.concat(o.getHeadersAndRows(e))}):(!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),!e&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):this.groupList.length||"table"==this.groupManager.table.options.columnCalcs||this.groupManager.table.modExists("columnCalcs")&&(!e&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top&&(this.calcs.top.detachElement(),this.calcs.top.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top))),!e&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom&&(this.calcs.bottom.detachElement(),this.calcs.bottom.deleteCells()),this.groupManager.table.options.groupClosedShowCalcs&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom)))),t},H.prototype.getData=function(e,t){var o=[];return this._visSet(),(!e||e&&this.visible)&&this.rows.forEach(function(e){o.push(e.getData(t||"data"))}),o},H.prototype.getRowCount=function(){var e=0;return this.groupList.length?this.groupList.forEach(function(t){e+=t.getRowCount()}):e=this.rows.length,e},H.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},H.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){e.detachElement()})}):this.rows.forEach(function(e){var t=e.getElement();t.parentNode.removeChild(t)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},H.prototype.show=function(){var e=this;if(e.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var t=e.getElement();this.groupList.length?this.groupList.forEach(function(e){e.getHeadersAndRows().forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o})}):e.rows.forEach(function(e){var o=e.getElement();t.parentNode.insertBefore(o,t.nextSibling),e.initialize(),t=o}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex()),this.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth()}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},H.prototype._visSet=function(){var e=[];"function"==typeof this.visible&&(this.rows.forEach(function(t){e.push(t.getData())}),this.visible=this.visible(this.key,this.getRowCount(),e,this.getComponent()))},H.prototype.getRowGroup=function(e){var t=!1;return this.groupList.length?this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}):this.rows.find(function(t){return t===e})&&(t=this),t},H.prototype.getSubGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},H.prototype.getRows=function(e){var t=[];return this.rows.forEach(function(o){t.push(e?o.getComponent():o)}),t},H.prototype.generateGroupHeaderContents=function(){var e=[];for(this.rows.forEach(function(t){e.push(t.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),e,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},H.prototype.getPath=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.unshift(this.key),this.parent&&this.parent.getPath(e),e},H.prototype.getElement=function(){this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible");for(var e=0;e<this.element.childNodes.length;++e)this.element.childNodes[e].parentNode.removeChild(this.element.childNodes[e]);return this.generateGroupHeaderContents(),this.element},H.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},H.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},H.prototype.initialize=function(e){this.initialized&&!e||(this.normalizeHeight(),this.initialized=!0)},H.prototype.reinitialize=function(){this.initialized=!1,this.height=0,h.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},H.prototype.setHeight=function(e){this.height!=e&&(this.height=e,this.outerHeight=this.element.offsetHeight)},H.prototype.getHeight=function(){return this.outerHeight},H.prototype.getGroup=function(){return this},H.prototype.reinitializeHeight=function(){},H.prototype.calcHeight=function(){},H.prototype.setCellHeight=function(){},H.prototype.clearCellHeight=function(){},H.prototype.getComponent=function(){return this.component||(this.component=new S(this)),this.component};var P=function(e){this.table=e,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};P.prototype.initialize=function(){var e=this,t=e.table.options.groupBy,o=e.table.options.groupStartOpen,i=e.table.options.groupHeader;if(this.allowedValues=e.table.options.groupValues,Array.isArray(t)&&Array.isArray(i)&&t.length>i.length&&console.warn("Error creating group headers, groupHeader array is shorter than groupBy array"),e.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],e.table.modules.localize.bind("groups|item",function(t,o){e.headerGenerator[0]=function(e,i,n){return(void 0===e?"":e)+"<span>("+i+" "+(1===i?t:o.groups.items)+")</span>"}}),this.groupIDLookups=[],Array.isArray(t)||t)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var n=this.table.columnManager.getRealColumns();n.forEach(function(t){t.definition.topCalc&&e.table.modules.columnCalcs.initializeTopRow(),t.definition.bottomCalc&&e.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(t)||(t=[t]),t.forEach(function(t,o){var i,n;"function"==typeof t?i=t:(n=e.table.columnManager.getColumnByField(t),i=n?function(e){return n.getFieldValue(e)}:function(e){return e[t]}),e.groupIDLookups.push({field:"function"!=typeof t&&t,func:i,values:!!e.allowedValues&&e.allowedValues[o]})}),o&&(Array.isArray(o)||(o=[o]),o.forEach(function(e){e="function"==typeof e?e:function(){return!0}}),e.startOpen=o),i&&(e.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},P.prototype.setDisplayIndex=function(e){this.displayIndex=e},P.prototype.getDisplayIndex=function(){return this.displayIndex},P.prototype.getRows=function(e){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(e),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):e.slice(0)},P.prototype.getGroups=function(e){var t=[];return this.groupList.forEach(function(o){t.push(e?o.getComponent():o)}),t},P.prototype.getChildGroups=function(e){var t=this,o=[];return e||(e=this),e.groupList.forEach(function(e){e.groupList.length?o=o.concat(t.getChildGroups(e)):o.push(e)}),o},P.prototype.wipe=function(){this.groupList.forEach(function(e){e.wipe()})},P.prototype.pullGroupListData=function(e){var t=this,o=[];return e.forEach(function(e){var i={};i.level=0,i.rowCount=0,i.headerContent="";var n=[];e.hasSubGroups?(n=t.pullGroupListData(e.groupList),i.level=e.level,i.rowCount=n.length-e.groupList.length,i.headerContent=e.generator(e.key,i.rowCount,e.rows,e),o.push(i),o=o.concat(n)):(i.level=e.level,i.headerContent=e.generator(e.key,e.rows.length,e.rows,e),i.rowCount=e.getRows().length,o.push(i),e.getRows().forEach(function(e){o.push(e.getData("data"))}))}),o},P.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},P.prototype.getRowGroup=function(e){var t=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(e);i&&(t=i)}),t},P.prototype.countGroups=function(){return this.groupList.length},P.prototype.generateGroups=function(e){var t=this,o=t.groups;t.groups={},t.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(e){t.createGroup(e,0,o)}),e.forEach(function(e){t.assignRowToExistingGroup(e,o)})):e.forEach(function(e){t.assignRowToGroup(e,o)})},P.prototype.createGroup=function(e,t,o){var i,n=t+"_"+e;o=o||[],i=new H(this,!1,t,e,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},P.prototype.assignRowToExistingGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(e)},P.prototype.assignRowToGroup=function(e,t){var o=this.groupIDLookups[0].func(e.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,t),this.groups["0_"+o].addRow(e),!i},P.prototype.reassignRowToGroup=function(e){var t=e.getGroup(),o=t.getPath(),i=this.getExpectedPath(e);o.length==i.length&&o.every(function(e,t){return e===i[t]})||(t.removeRow(e),this.assignRowToGroup(e,self.groups),this.table.rowManager.refreshActiveData("group",!1,!0))},P.prototype.getExpectedPath=function(e){var t=[],o=e.getData();return this.groupIDLookups.forEach(function(e){t.push(e.func(o))}),t},P.prototype.updateGroupRows=function(e){var t=this,o=[];if(t.groupList.forEach(function(e){o=o.concat(e.getHeadersAndRows())}),e){var i=t.table.rowManager.setDisplayRows(o,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),t.table.rowManager.refreshActiveData("group",!0,!0)}return o},P.prototype.scrollHeaders=function(e){this.table.options.virtualDomHoz&&(e-=this.table.vdomHoz.vDomPadLeft),e+="px",this.groupList.forEach(function(t){t.scrollHeader(e)})},P.prototype.removeGroup=function(e){var t,o=e.level+"_"+e.key;this.groups[o]&&(delete this.groups[o],(t=this.groupList.indexOf(e))>-1&&this.groupList.splice(t,1))},h.prototype.registerModule("groupRows",P);var A=function(e){this.table=e,this.history=[],this.index=-1};A.prototype.clear=function(){this.history=[],this.index=-1},A.prototype.action=function(e,t,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:e,component:t,data:o}),this.index++},A.prototype.getHistoryUndoSize=function(){return this.index+1},A.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},A.prototype.clearComponentHistory=function(e){var t=this.history.findIndex(function(t){return t.component===e});t>-1&&(this.history.splice(t,1),t<=this.index&&this.index--,this.clearComponentHistory(e))},A.prototype.undo=function(){if(this.index>-1){var e=this.history[this.index];return this.undoers[e.type].call(this,e),this.index--,this.table.options.historyUndo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},A.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var e=this.history[this.index];return this.redoers[e.type].call(this,e),this.table.options.historyRedo.call(this.table,e.type,e.component.getComponent(),e.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},A.prototype.undoers={cellEdit:function(e){e.component.setValueProcessData(e.data.oldValue)},rowAdd:function(e){e.component.deleteActual()},rowDelete:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posFrom],!e.data.after),this.table.rowManager.redraw()}},A.prototype.redoers={cellEdit:function(e){e.component.setValueProcessData(e.data.newValue)},rowAdd:function(e){var t=this.table.rowManager.addRowActual(e.data.data,e.data.pos,e.data.index);this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.updateGroupRows(!0),this._rebindRow(e.component,t)},rowDelete:function(e){e.component.deleteActual()},rowMove:function(e){this.table.rowManager.moveRowActual(e.component,this.table.rowManager.rows[e.data.posTo],e.data.after),this.table.rowManager.redraw()}},A.prototype._rebindRow=function(e,t){this.history.forEach(function(o){if(o.component instanceof l)o.component===e&&(o.component=t);else if(o.component instanceof u&&o.component.row===e){var i=o.component.column.getField();i&&(o.component=t.getCell(i))}})},h.prototype.registerModule("history",A);var _=function(e){this.table=e,this.fieldIndex=[],this.hasIndex=!1};_.prototype.parseTable=function(){var e=this,t=e.table.element,o=e.table.options,i=(o.columns,t.getElementsByTagName("th")),n=t.getElementsByTagName("tbody")[0],s=[];e.hasIndex=!1,e.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],e._extractOptions(t,o),i.length?e._extractHeaders(i,n):e._generateBlankHeaders(i,n);for(var a=0;a<n.length;a++){var r=n[a],l=r.getElementsByTagName("td"),c={};e.hasIndex||(c[o.index]=a);for(var u=0;u<l.length;u++){var d=l[u];void 0!==this.fieldIndex[u]&&(c[this.fieldIndex[u]]=d.innerHTML)}s.push(c)}var h=document.createElement("div"),p=t.attributes;for(var u in p)"object"==_typeof(p[u])&&h.setAttribute(p[u].name,p[u].value);t.parentNode.replaceChild(h,t),o.data=s,e.table.options.htmlImported.call(this.table),this.table.element=h},_.prototype._extractOptions=function(e,t,o){var i=e.attributes,n=o?Object.assign([],o):Object.keys(t),s={};n.forEach(function(e){s[e.toLowerCase()]=e});for(var a in i){var r,l=i[a];l&&"object"==(void 0===l?"undefined":_typeof(l))&&l.name&&0===l.name.indexOf("tabulator-")&&(r=l.name.replace("tabulator-",""),void 0!==s[r]&&(t[s[r]]=this._attribValue(l.value)))}},_.prototype._attribValue=function(e){return"true"===e||"false"!==e&&e},_.prototype._findCol=function(e){return this.table.options.columns.find(function(t){return t.title===e})||!1},_.prototype._extractHeaders=function(e,t){for(var o=0;o<e.length;o++){var i,s=e[o],a=!1,r=this._findCol(s.textContent);r?a=!0:r={title:s.textContent.trim()},r.field||(r.field=s.textContent.trim().toLowerCase().replace(" ","_")),i=s.getAttribute("width"),i&&!r.width&&(r.width=i),s.attributes,this._extractOptions(s,r,n.prototype.defaultOptionList),this.fieldIndex[o]=r.field,r.field==this.table.options.index&&(this.hasIndex=!0),a||this.table.options.columns.push(r)}},_.prototype._generateBlankHeaders=function(e,t){for(var o=0;o<e.length;o++){var i=e[o],n={title:"",field:"col"+o};this.fieldIndex[o]=n.field;var s=i.getAttribute("width");s&&(n.width=s),this.table.options.columns.push(n)}},h.prototype.registerModule("htmlTableImport",_);var F=function(e){this.table=e,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};F.prototype.initialize=function(){var e=this.table.options.keybindings,t={};if(this.watchKeys={},this.pressedKeys=[],!1!==e){for(var o in this.bindings)t[o]=this.bindings[o];if(Object.keys(e).length)for(var i in e)t[i]=e[i];this.mapBindings(t),this.bindEvents()}},F.prototype.mapBindings=function(e){var t=this,o=this;for(var i in e)!function(i){t.actions[i]?e[i]&&("object"!==_typeof(e[i])&&(e[i]=[e[i]]),e[i].forEach(function(e){o.mapBinding(i,e)})):console.warn("Key Binding Error - no such action:",i)}(i)},F.prototype.mapBinding=function(e,t){var o=this,i={action:this.actions[e],keys:[],ctrl:!1,shift:!1,meta:!1};t.toString().toLowerCase().split(" ").join("").split("+").forEach(function(e){switch(e){case"ctrl":i.ctrl=!0;break;case"shift":i.shift=!0;break;case"meta":i.meta=!0;break;default:e=parseInt(e),i.keys.push(e),o.watchKeys[e]||(o.watchKeys[e]=[]),o.watchKeys[e].push(i)}})},F.prototype.bindEvents=function(){var e=this;this.keyupBinding=function(t){var o=t.keyCode,i=e.watchKeys[o];i&&(e.pressedKeys.push(o),i.forEach(function(o){e.checkBinding(t,o)}))},this.keydownBinding=function(t){var o=t.keyCode;if(e.watchKeys[o]){var i=e.pressedKeys.indexOf(o);i>-1&&e.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},F.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},F.prototype.checkBinding=function(e,t){var o=this,i=!0;return e.ctrlKey==t.ctrl&&e.shiftKey==t.shift&&e.metaKey==t.meta&&(t.keys.forEach(function(e){-1==o.pressedKeys.indexOf(e)&&(i=!1)}),i&&t.action.call(o,e),!0)},F.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},F.prototype.actions={keyBlock:function(e){e.stopPropagation(),e.preventDefault()},scrollPageUp:function(e){var t=this.table.rowManager,o=t.scrollTop-t.height;t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o>=0?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(e){var t=this.table.rowManager,o=t.scrollTop+t.height,i=t.element.scrollHeight;e.preventDefault(),t.displayRowsCount&&(o<=i?t.element.scrollTop=o:t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(e){var t=this.table.rowManager;e.preventDefault(),t.displayRowsCount&&t.scrollToRow(t.getDisplayRows()[t.displayRowsCount-1]),this.table.element.focus()},navPrev:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().prev())},navNext:function(e){var t,o=!1,i=this.table.options.tabEndNewRow;this.table.modExists("edit")&&(o=this.table.modules.edit.currentCell)&&(e.preventDefault(),t=o.nav(),t.next()||i&&(o.getElement().firstChild.blur(),i=!0===i?this.table.addRow({}):"function"==typeof i?this.table.addRow(i(o.row.getComponent())):this.table.addRow(Object.assign({},i)),i.then(function(){setTimeout(function(){t.next()})})))},navLeft:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().left())},navRight:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().right())},navUp:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().up())},navDown:function(e){var t=!1;this.table.modExists("edit")&&(t=this.table.modules.edit.currentCell)&&(e.preventDefault(),t.nav().down())},undo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.undo()))},redo:function(e){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(e.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(e){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(!1,!0)}},h.prototype.registerModule("keybindings",F);var N=function(e){this.table=e,this.menuElements=[],this.blurEvent=this.hideMenu.bind(this),this.escEvent=this.escMenu.bind(this),this.nestedMenuBlock=!1,this.positionReversedX=!1};N.prototype.initializeColumnHeader=function(e){var t,o=this;e.definition.headerContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.definition.headerContextMenu)),this.tapHold(e,e.definition.headerContextMenu)),e.definition.headerMenu&&(t=document.createElement("span"),t.classList.add("tabulator-header-menu-button"),t.innerHTML="&vellip;",t.addEventListener("click",function(t){t.stopPropagation(),t.preventDefault(),o.LoadMenuEvent(e,e.definition.headerMenu,t)}),e.titleElement.insertBefore(t,e.titleElement.firstChild))},N.prototype.LoadMenuEvent=function(e,t,o){t="function"==typeof t?t.call(this.table,e.getComponent(),o):t,this.loadMenu(o,e,t)},N.prototype.tapHold=function(e,t){var o=this,i=e.getElement(),n=null,s=!1;i.addEventListener("touchstart",function(i){clearTimeout(n),s=!1,n=setTimeout(function(){clearTimeout(n),n=null,s=!0,o.LoadMenuEvent(e,t,i)},1e3)},{passive:!0}),i.addEventListener("touchend",function(e){clearTimeout(n),n=null,s&&e.preventDefault()})},N.prototype.initializeCell=function(e){e.column.definition.contextMenu&&(e.getElement(!0).addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,e.column.definition.contextMenu)),this.tapHold(e,e.column.definition.contextMenu)),e.column.definition.clickMenu&&e.getElement(!0).addEventListener("click",this.LoadMenuEvent.bind(this,e,e.column.definition.clickMenu))},N.prototype.initializeRow=function(e){this.table.options.rowContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.rowContextMenu)),this.tapHold(e,this.table.options.rowContextMenu)),this.table.options.rowClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.rowClickMenu))},N.prototype.initializeGroup=function(e){this.table.options.groupContextMenu&&(e.getElement().addEventListener("contextmenu",this.LoadMenuEvent.bind(this,e,this.table.options.groupContextMenu)),this.tapHold(e,this.table.options.groupContextMenu)),this.table.options.groupClickMenu&&e.getElement().addEventListener("click",this.LoadMenuEvent.bind(this,e,this.table.options.groupClickMenu))},N.prototype.loadMenu=function(e,t,o,i){var n=this,s=!(e instanceof MouseEvent),a=document.createElement("div");if(a.classList.add("tabulator-menu"),s||e.preventDefault(),o&&o.length){if(!i){if(this.nestedMenuBlock){if(this.isOpen())return}else this.nestedMenuBlock=setTimeout(function(){n.nestedMenuBlock=!1},100);this.hideMenu(),this.menuElements=[]}o.forEach(function(e){var o=document.createElement("div"),i=e.label,s=e.disabled;e.separator?o.classList.add("tabulator-menu-separator"):(o.classList.add("tabulator-menu-item"),"function"==typeof i&&(i=i.call(n.table,t.getComponent())),i instanceof Node?o.appendChild(i):o.innerHTML=i,"function"==typeof s&&(s=s.call(n.table,t.getComponent())),s?(o.classList.add("tabulator-menu-item-disabled"),o.addEventListener("click",function(e){e.stopPropagation()})):e.menu&&e.menu.length?o.addEventListener("click",function(i){i.stopPropagation(),n.hideOldSubMenus(a),n.loadMenu(i,t,e.menu,o)}):e.action&&o.addEventListener("click",function(o){e.action(o,t.getComponent())}),e.menu&&e.menu.length&&o.classList.add("tabulator-menu-item-submenu")),a.appendChild(o)}),a.addEventListener("click",function(e){n.hideMenu()}),this.menuElements.push(a),this.positionMenu(a,i,s,e)}},N.prototype.hideOldSubMenus=function(e){var t=this.menuElements.indexOf(e);if(t>-1)for(var o=this.menuElements.length-1;o>t;o--){var i=this.menuElements[o];i.parentNode&&i.parentNode.removeChild(i),this.menuElements.pop()}},N.prototype.positionMenu=function(e,t,o,i){var n,s,a,r=this,l=Math.max(document.body.offsetHeight,window.innerHeight);t?(a=h.prototype.helpers.elOffset(t),n=a.left+t.offsetWidth,s=a.top-1):(n=o?i.touches[0].pageX:i.pageX,s=o?i.touches[0].pageY:i.pageY,this.positionReversedX=!1),e.style.top=s+"px",e.style.left=n+"px",setTimeout(function(){r.table.rowManager.element.addEventListener("scroll",r.blurEvent),document.body.addEventListener("click",r.blurEvent),document.body.addEventListener("contextmenu",r.blurEvent),window.addEventListener("resize",r.blurEvent),document.body.addEventListener("keydown",r.escEvent)},100),document.body.appendChild(e),s+e.offsetHeight>=l&&(e.style.top="",e.style.bottom=t?l-a.top-t.offsetHeight-1+"px":l-s+"px"),(n+e.offsetWidth>=document.body.offsetWidth||this.positionReversedX)&&(e.style.left="",e.style.right=t?document.documentElement.offsetWidth-a.left+"px":document.documentElement.offsetWidth-n+"px",this.positionReversedX=!0)},N.prototype.isOpen=function(){return!!this.menuElements.length},N.prototype.escMenu=function(e){27==e.keyCode&&this.hideMenu()},N.prototype.hideMenu=function(){this.menuElements.forEach(function(e){e.parentNode&&e.parentNode.removeChild(e)}),document.body.removeEventListener("keydown",this.escEvent),document.body.removeEventListener("click",this.blurEvent),document.body.removeEventListener("contextmenu",this.blurEvent),window.removeEventListener("resize",this.blurEvent),this.table.rowManager.element.removeEventListener("scroll",this.blurEvent)},N.prototype.menus={},h.prototype.registerModule("menu",N);var B=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.touchMove=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};B.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},B.prototype.initializeColumn=function(e){
+var t,o=this,i={};e.modules.frozen||(t=e.getElement(),i.mousemove=function(i){e.parent===o.moving.parent&&((o.touchMove?i.touches[0].pageX:i.pageX)-h.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){o.touchMove=!1,1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),o.bindTouchEvents(e)),e.modules.moveColumn=i},B.prototype.bindTouchEvents=function(e){var t,o,i,n,s,a,r,l=this,c=e.getElement(),u=!1;c.addEventListener("touchstart",function(c){l.checkTimeout=setTimeout(function(){l.touchMove=!0,t=e,o=e.nextColumn(),n=o?o.getWidth()/2:0,i=e.prevColumn(),s=i?i.getWidth()/2:0,a=0,r=0,u=!1,l.startMove(c,e)},l.checkPeriod)},{passive:!0}),c.addEventListener("touchmove",function(c){var d,h;l.moving&&(l.moveHover(c),u||(u=c.touches[0].pageX),d=c.touches[0].pageX-u,d>0?o&&d-a>n&&(h=o)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement().nextSibling),l.moveColumn(h,!0)):i&&-d-r>s&&(h=i)!==e&&(u=c.touches[0].pageX,h.getElement().parentNode.insertBefore(l.placeholderElement,h.getElement()),l.moveColumn(h,!1)),h&&(t=h,o=h.nextColumn(),a=n,n=o?o.getWidth()/2:0,i=h.prevColumn(),r=s,s=i?i.getWidth()/2:0))},{passive:!0}),c.addEventListener("touchend",function(e){l.checkTimeout&&clearTimeout(l.checkTimeout),l.moving&&l.endMove(e)})},B.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=(this.touchMove?e.touches[0].pageX:e.pageX)-h.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this.touchMove||(this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove)),this.moveHover(e)},B.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},B.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},B.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var i=e.getElement(!0);i.parentNode.insertBefore(o[t].getElement(),i.nextSibling)}):e.getCells().forEach(function(e,t){var i=e.getElement(!0);i.parentNode.insertBefore(o[t].getElement(),i)})},B.prototype.endMove=function(e){(1===e.which||this.touchMove)&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumnActual(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.touchMove||(document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove)))},B.prototype.moveHover=function(e){var t,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=(o.touchMove?e.touches[0].pageX:e.pageX)-h.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-n<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.max(0,n-5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1))),n+i.clientWidth-s<o.autoScrollMargin&&(o.autoScrollTimeout||(o.autoScrollTimeout=setTimeout(function(){t=Math.min(i.clientWidth,n+5),o.table.rowManager.getElement().scrollLeft=t,o.autoScrollTimeout=!1},1)))},h.prototype.registerModule("moveColumn",B);var O=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.touchMove=!1,this.connection=!1,this.connectionSelectorsTables=!1,this.connectionSelectorsElements=!1,this.connectionElements=[],this.connections=[],this.connectedTable=!1,this.connectedRow=!1};O.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},O.prototype.initialize=function(e){this.connectionSelectorsTables=this.table.options.movableRowsConnectedTables,this.connectionSelectorsElements=this.table.options.movableRowsConnectedElements,this.connection=this.connectionSelectorsTables||this.connectionSelectorsElements},O.prototype.setHandle=function(e){this.hasHandle=e},O.prototype.initializeGroupHeader=function(e){var t=this,o={};o.mouseup=function(e){t.tableRowDrop(e,row)}.bind(t),o.mousemove=function(o){if(o.pageY-h.prototype.helpers.elOffset(e.element).top+t.table.rowManager.element.scrollTop>e.getHeight()/2){if(t.toRow!==e||!t.toRowAfter){var i=e.getElement();i.parentNode.insertBefore(t.placeholderElement,i.nextSibling),t.moveRow(e,!0)}}else if(t.toRow!==e||t.toRowAfter){var i=e.getElement();i.previousSibling&&(i.parentNode.insertBefore(t.placeholderElement,i),t.moveRow(e,!1))}}.bind(t),e.modules.moveRow=o},O.prototype.initializeRow=function(e){var t,o=this,i={};i.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),i.mousemove=function(t){var i=e.getElement();t.pageY-h.prototype.helpers.elOffset(i).top+o.table.rowManager.element.scrollTop>e.getHeight()/2?o.toRow===e&&o.toRowAfter||(i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(e,!0)):(o.toRow!==e||o.toRowAfter)&&(i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(e,!1))}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)}),this.bindTouchEvents(e,e.getElement())),e.modules.moveRow=i},O.prototype.initializeCell=function(e){var t=this,o=e.getElement(!0);o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)}),this.bindTouchEvents(e.row,o)},O.prototype.bindTouchEvents=function(e,t){var o,i,n,s,a,r,l,c=this,u=!1;t.addEventListener("touchstart",function(t){c.checkTimeout=setTimeout(function(){c.touchMove=!0,o=e,i=e.nextRow(),s=i?i.getHeight()/2:0,n=e.prevRow(),a=n?n.getHeight()/2:0,r=0,l=0,u=!1,c.startMove(t,e)},c.checkPeriod)},{passive:!0}),this.moving,this.toRow,this.toRowAfter,t.addEventListener("touchmove",function(t){var d,h;c.moving&&(t.preventDefault(),c.moveHover(t),u||(u=t.touches[0].pageY),d=t.touches[0].pageY-u,d>0?i&&d-r>s&&(h=i)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement().nextSibling),c.moveRow(h,!0)):n&&-d-l>a&&(h=n)!==e&&(u=t.touches[0].pageY,h.getElement().parentNode.insertBefore(c.placeholderElement,h.getElement()),c.moveRow(h,!1)),h&&(o=h,i=h.nextRow(),r=s,s=i?i.getHeight()/2:0,n=h.prevRow(),l=a,a=n?n.getHeight()/2:0))}),t.addEventListener("touchend",function(e){c.checkTimeout&&clearTimeout(c.checkTimeout),c.moving&&(c.endMove(e),c.touchMove=!1)})},O.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},O.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"!==e.type&&"group"!==e.type||!e.modules.moveRow.mousemove||e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},O.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},O.prototype.setStartPosition=function(e,t){var o,i,n=this.touchMove?e.touches[0].pageX:e.pageX,s=this.touchMove?e.touches[0].pageY:e.pageY;o=t.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-n+window.pageXOffset,this.startY=i.top-s+window.pageYOffset):this.startY=s-o.getBoundingClientRect().top},O.prototype.endMove=function(e){e&&1!==e.which&&!this.touchMove||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},O.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},O.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},O.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,i=(this.touchMove?e.touches[0].pageY:e.pageY)-t.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},O.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+(this.touchMove?e.touches[0].pageX:e.pageX)+"px",this.hoverElement.style.top=this.startY+(this.touchMove?e.touches[0].pageY:e.pageY)+"px"},O.prototype.elementRowDrop=function(e,t,o){this.table.options.movableRowsElementDrop&&this.table.options.movableRowsElementDrop(e,t,!!o&&o.getComponent())},O.prototype.connectToTables=function(e){var t,o=this;this.connectionSelectorsTables&&(t=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","connect",{row:e})),this.connectionSelectorsElements&&(this.connectionElements=[],Array.isArray(this.connectionSelectorsElements)||(this.connectionSelectorsElements=[this.connectionSelectorsElements]),this.connectionSelectorsElements.forEach(function(e){"string"==typeof e?o.connectionElements=o.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(e))):o.connectionElements.push(e)}),this.connectionElements.forEach(function(e){var t=function(t){o.elementRowDrop(t,e,o.moving)};e.addEventListener("mouseup",t),e.tabulatorElementDropEvent=t,e.classList.add("tabulator-movingrow-receiving")}))},O.prototype.disconnectFromTables=function(){var e;this.connectionSelectorsTables&&(e=this.table.modules.comms.getConnections(this.connectionSelectorsTables),this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connectionSelectorsTables,"moveRow","disconnect")),this.connectionElements.forEach(function(e){e.classList.remove("tabulator-movingrow-receiving"),e.removeEventListener("mouseup",e.tabulatorElementDropEvent),delete e.tabulatorElementDropEvent})},O.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},O.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},O.prototype.dropComplete=function(e,t,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},O.prototype.tableRowDrop=function(e,t){var o=!1,i=!1;switch(e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:i})},O.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},O.prototype.senders={delete:function(e,t,o){e.delete()}},O.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},h.prototype.registerModule("moveRow",O);var I=function(e){this.table=e,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};I.prototype.initializeColumn=function(e){var t=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,a="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));e.definition[a]&&(s=t.lookupMutator(e.definition[a]))&&(o=!0,i[a]={mutator:s,params:e.definition[a+"Params"]||{}})}),o&&(e.modules.mutate=i)},I.prototype.lookupMutator=function(e){var t=!1;switch(void 0===e?"undefined":_typeof(e)){case"string":this.mutators[e]?t=this.mutators[e]:console.warn("Mutator Error - No such mutator found, ignoring: ",e);break;case"function":t=e}return t},I.prototype.transformRow=function(e,t,o){var i,n=this,s="mutator"+(t.charAt(0).toUpperCase()+t.slice(1));return this.enabled&&n.table.columnManager.traverse(function(n){var a,r,l;n.modules.mutate&&(a=n.modules.mutate[s]||n.modules.mutate.mutator||!1)&&(i=n.getFieldValue(void 0!==o?o:e),"data"!=t&&void 0===i||(l=n.getComponent(),r="function"==typeof a.params?a.params(i,e,t,l):a.params,n.setFieldValue(e,a.mutator(i,e,t,r,l))))}),e},I.prototype.transformCell=function(e,t){var o=e.column.modules.mutate.mutatorEdit||e.column.modules.mutate.mutator||!1,i={};return o?(i=Object.assign(i,e.row.getData()),e.column.setFieldValue(i,t),o.mutator(t,i,"edit",o.params,e.getComponent())):t},I.prototype.enable=function(){this.enabled=!0},I.prototype.disable=function(){this.enabled=!1},I.prototype.mutators={},h.prototype.registerModule("mutator",I);var V=function(e){this.table=e,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.initialLoad=!0,this.pageSizes=[],this.dataReceivedNames={},this.dataSentNames={},this.createElements()};V.prototype.createElements=function(){var e;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),e=document.createElement("button"),e.classList.add("tabulator-page"),e.setAttribute("type","button"),e.setAttribute("role","button"),e.setAttribute("aria-label",""),e.setAttribute("title",""),this.firstBut=e.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=e.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=e.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=e.cloneNode(!0),this.lastBut.setAttribute("data-page","last"),this.table.options.paginationSizeSelector&&(this.pageSizeSelect=document.createElement("select"),this.pageSizeSelect.classList.add("tabulator-page-size"))},V.prototype.generatePageSizeSelectList=function(){var e=this,t=[];if(this.pageSizeSelect){if(Array.isArray(this.table.options.paginationSizeSelector))t=this.table.options.paginationSizeSelector,this.pageSizes=t,-1==this.pageSizes.indexOf(this.size)&&t.unshift(this.size);else if(-1==this.pageSizes.indexOf(this.size)){t=[];for(var o=1;o<5;o++)t.push(this.size*o);this.pageSizes=t}else t=this.pageSizes;for(;this.pageSizeSelect.firstChild;)this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);t.forEach(function(t){var o=document.createElement("option");o.value=t,!0===t?e.table.modules.localize.bind("pagination|all",function(e){o.innerHTML=e}):o.innerHTML=t,e.pageSizeSelect.appendChild(o)}),this.pageSizeSelect.value=this.size}},V.prototype.initialize=function(e){var t,o,i,n=this;this.dataSentNames=Object.assign({},this.paginationDataSentNames),this.dataSentNames=Object.assign(this.dataSentNames,this.table.options.paginationDataSent),this.dataReceivedNames=Object.assign({},this.paginationDataReceivedNames),this.dataReceivedNames=Object.assign(this.dataReceivedNames,this.table.options.paginationDataReceived),n.table.modules.localize.bind("pagination|first",function(e){n.firstBut.innerHTML=e}),n.table.modules.localize.bind("pagination|first_title",function(e){n.firstBut.setAttribute("aria-label",e),n.firstBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|prev",function(e){n.prevBut.innerHTML=e}),n.table.modules.localize.bind("pagination|prev_title",function(e){n.prevBut.setAttribute("aria-label",e),n.prevBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|next",function(e){n.nextBut.innerHTML=e}),n.table.modules.localize.bind("pagination|next_title",function(e){n.nextBut.setAttribute("aria-label",e),n.nextBut.setAttribute("title",e)}),n.table.modules.localize.bind("pagination|last",function(e){n.lastBut.innerHTML=e}),n.table.modules.localize.bind("pagination|last_title",function(e){n.lastBut.setAttribute("aria-label",e),n.lastBut.setAttribute("title",e)}),n.firstBut.addEventListener("click",function(){n.setPage(1).then(function(){}).catch(function(){})}),n.prevBut.addEventListener("click",function(){n.previousPage().then(function(){}).catch(function(){})}),n.nextBut.addEventListener("click",function(){n.nextPage().then(function(){}).catch(function(){})}),n.lastBut.addEventListener("click",function(){n.setPage(n.max).then(function(){}).catch(function(){})}),n.table.options.paginationElement&&(n.element=n.table.options.paginationElement),this.pageSizeSelect&&(t=document.createElement("label"),n.table.modules.localize.bind("pagination|page_size",function(e){n.pageSizeSelect.setAttribute("aria-label",e),n.pageSizeSelect.setAttribute("title",e),t.innerHTML=e}),n.element.appendChild(t),n.element.appendChild(n.pageSizeSelect),n.pageSizeSelect.addEventListener("change",function(e){n.setPageSize("true"==n.pageSizeSelect.value||n.pageSizeSelect.value),n.setPage(1).then(function(){}).catch(function(){})})),n.element.appendChild(n.firstBut),n.element.appendChild(n.prevBut),n.element.appendChild(n.pagesElement),n.element.appendChild(n.nextBut),n.element.appendChild(n.lastBut),n.table.options.paginationElement||e||n.table.footerManager.append(n.element,n),n.mode=n.table.options.pagination,n.table.options.paginationSize?n.size=n.table.options.paginationSize:(o=document.createElement("div"),o.classList.add("tabulator-row"),o.style.visibility=e,i=document.createElement("div"),i.classList.add("tabulator-cell"),i.innerHTML="Page Row Test",o.appendChild(i),n.table.rowManager.getTableElement().appendChild(o),n.size=Math.floor(n.table.rowManager.getElement().clientHeight/o.offsetHeight),n.table.rowManager.getTableElement().removeChild(o)),n.count=n.table.options.paginationButtonCount,n.generatePageSizeSelectList()},V.prototype.initializeProgressive=function(e){this.initialize(!0),this.mode="progressive_"+e,this.progressiveLoad=!0},V.prototype.setDisplayIndex=function(e){this.displayIndex=e},V.prototype.getDisplayIndex=function(){return this.displayIndex},V.prototype.setMaxRows=function(e){this.max=e?!0===this.size?1:Math.ceil(e/this.size):1,this.page>this.max&&(this.page=this.max)},V.prototype.reset=function(e,t){return("local"==this.mode||e)&&(this.page=1),t&&(this.initialLoad=!0),!0},V.prototype.setMaxPage=function(e){e=parseInt(e),this.max=e||1,this.page>this.max&&(this.page=this.max,this.trigger())},V.prototype.setPage=function(e){var t=this,o=this;switch(e){case"first":return this.setPage(1);case"prev":return this.previousPage();case"next":return this.nextPage();case"last":return this.setPage(this.max)}return new Promise(function(i,n){e=parseInt(e),e>0&&e<=t.max||"local"!==t.mode?(t.page=e,t.trigger().then(function(){i()}).catch(function(){n()}),o.table.options.persistence&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.config.page&&o.table.modules.persistence.save("page")):(console.warn("Pagination Error - Requested page is out of range of 1 - "+t.max+":",e),n())})},V.prototype.setPageToRow=function(e){var t=this;return new Promise(function(o,i){var n=t.table.rowManager.getDisplayRows(t.displayIndex-1),s=n.indexOf(e);if(s>-1){var a=!0===t.size?1:Math.ceil((s+1)/t.size);t.setPage(a).then(function(){o()}).catch(function(){i()})}else console.warn("Pagination Error - Requested row is not visible"),i()})},V.prototype.setPageSize=function(e){!0!==e&&(e=parseInt(e)),e>0&&(this.size=e),this.pageSizeSelect&&this.generatePageSizeSelectList(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.page&&this.table.modules.persistence.save("page")},V.prototype._setPageButtons=function(){for(var e=this,t=Math.floor((this.count-1)/2),o=Math.ceil((this.count-1)/2),i=this.max-this.page+t+1<this.count?this.max-this.count+1:Math.max(this.page-t,1),n=this.page<=o?Math.min(this.count,this.max):Math.min(this.page+o,this.max);e.pagesElement.firstChild;)e.pagesElement.removeChild(e.pagesElement.firstChild);1==e.page?(e.firstBut.disabled=!0,e.prevBut.disabled=!0):(e.firstBut.disabled=!1,e.prevBut.disabled=!1),e.page==e.max?(e.lastBut.disabled=!0,e.nextBut.disabled=!0):(e.lastBut.disabled=!1,e.nextBut.disabled=!1);for(var s=i;s<=n;s++)s>0&&s<=e.max&&e.pagesElement.appendChild(e._generatePageButton(s));this.footerRedraw()},V.prototype._generatePageButton=function(e){var t=this,o=document.createElement("button");return o.classList.add("tabulator-page"),e==t.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),t.table.modules.localize.bind("pagination|page_title",function(t){o.setAttribute("aria-label",t+" "+e),o.setAttribute("title",t+" "+e)}),o.setAttribute("data-page",e),o.textContent=e,o.addEventListener("click",function(o){t.setPage(e).then(function(){}).catch(function(){})}),o},V.prototype.previousPage=function(){var e=this;return new Promise(function(t,o){e.page>1?(e.page--,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())})},V.prototype.nextPage=function(){var e=this;return new Promise(function(t,o){e.page<e.max?(e.page++,e.trigger().then(function(){t()}).catch(function(){o()}),e.table.options.persistence&&e.table.modExists("persistence",!0)&&e.table.modules.persistence.config.page&&e.table.modules.persistence.save("page")):(e.progressiveLoad||console.warn("Pagination Error - Next page would be greater than maximum page of "+e.max+":",e.max+1),o())})},V.prototype.getPage=function(){return this.page},V.prototype.getPageMax=function(){return this.max},V.prototype.getPageSize=function(e){return this.size},V.prototype.getMode=function(){return this.mode},V.prototype.getRows=function(e){var t,o,i;if("local"==this.mode){t=[],!0===this.size?(o=0,i=e.length):(o=this.size*(this.page-1),i=o+parseInt(this.size)),this._setPageButtons();for(var n=o;n<i;n++)e[n]&&t.push(e[n]);return t}return this._setPageButtons(),e.slice(0)},V.prototype.trigger=function(){var e,t=this;return new Promise(function(o,i){switch(t.mode){case"local":e=t.table.rowManager.scrollLeft,t.table.rowManager.refreshActiveData("page"),t.table.rowManager.scrollHorizontal(e),t.table.options.pageLoaded.call(t.table,t.getPage()),o();break;case"remote":case"progressive_load":case"progressive_scroll":t.table.modules.ajax.blockActiveRequest(),t._getRemotePage().then(function(){o()}).catch(function(){i()});break;default:console.warn("Pagination Error - no such pagination mode:",t.mode),i()}})},V.prototype._getRemotePage=function(){var e,t,o=this,i=this;return new Promise(function(n,s){if(i.table.modExists("ajax",!0)||s(),e=h.prototype.helpers.deepClone(i.table.modules.ajax.getParams()||{}),t=i.table.modules.ajax.getParams(),t[o.dataSentNames.page]=i.page,o.size&&(t[o.dataSentNames.size]=o.size),o.table.options.ajaxSorting&&o.table.modExists("sort")){var a=i.table.modules.sort.getSort();a.forEach(function(e){delete e.column}),t[o.dataSentNames.sorters]=a}if(o.table.options.ajaxFiltering&&o.table.modExists("filter")){var r=i.table.modules.filter.getFilters(!0,!0);t[o.dataSentNames.filters]=r}i.table.modules.ajax.setParams(t),i.table.modules.ajax.sendRequest(o.progressiveLoad).then(function(e){i._parseRemoteData(e),n()}).catch(function(e){s()}),i.table.modules.ajax.setParams(e)})},V.prototype._parseRemoteData=function(e){var t,e,o,i=this;if(void 0===e[this.dataReceivedNames.last_page]&&console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.last_page+"' property"),e[this.dataReceivedNames.data]){if(this.max=parseInt(e[this.dataReceivedNames.last_page])||1,this.progressiveLoad)switch(this.mode){case"progressive_load":1==this.page?this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page):this.table.rowManager.addRows(e[this.dataReceivedNames.data]),this.page<this.max&&setTimeout(function(){i.nextPage().then(function(){}).catch(function(){})},i.table.options.ajaxProgressiveLoadDelay);break;case"progressive_scroll":e=this.table.rowManager.getData().concat(e[this.dataReceivedNames.data]),this.table.rowManager.setData(e,!0,this.initialLoad&&1==this.page),o=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.element.clientHeight,i.table.rowManager.element.scrollHeight<=i.table.rowManager.element.clientHeight+o&&i.nextPage().then(function(){}).catch(function(){})}else t=this.table.rowManager.scrollLeft,this.table.rowManager.setData(e[this.dataReceivedNames.data],!1,this.initialLoad&&1==this.page),this.table.rowManager.scrollHorizontal(t),this.table.columnManager.scrollHorizontal(t),this.table.options.pageLoaded.call(this.table,this.getPage());this.initialLoad=!1}else console.warn("Remote Pagination Error - Server response missing '"+this.dataReceivedNames.data+"' property")},V.prototype.footerRedraw=function(){var e=this.table.footerManager.element;Math.ceil(e.clientWidth)-e.scrollWidth<0?this.pagesElement.style.display="none":(this.pagesElement.style.display="",Math.ceil(e.clientWidth)-e.scrollWidth<0&&(this.pagesElement.style.display="none"))},V.prototype.paginationDataSentNames={page:"page",size:"size",sorters:"sorters",filters:"filters"},V.prototype.paginationDataReceivedNames={current_page:"current_page",last_page:"last_page",data:"data"},h.prototype.registerModule("page",V);var j=function(e){this.table=e,this.mode="",this.id="",this.defWatcherBlock=!1,this.config={},this.readFunc=!1,this.writeFunc=!1};j.prototype.localStorageTest=function(){var e="_tabulator_test";try{return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}},j.prototype.initialize=function(){var e,t=this.table.options.persistenceMode,o=this.table.options.persistenceID;this.mode=!0!==t?t:this.localStorageTest()?"local":"cookie",this.table.options.persistenceReaderFunc?"function"==typeof this.table.options.persistenceReaderFunc?this.readFunc=this.table.options.persistenceReaderFunc:this.readers[this.table.options.persistenceReaderFunc]?this.readFunc=this.readers[this.table.options.persistenceReaderFunc]:console.warn("Persistence Read Error - invalid reader set",this.table.options.persistenceReaderFunc):this.readers[this.mode]?this.readFunc=this.readers[this.mode]:console.warn("Persistence Read Error - invalid reader set",this.mode),
+this.table.options.persistenceWriterFunc?"function"==typeof this.table.options.persistenceWriterFunc?this.writeFunc=this.table.options.persistenceWriterFunc:this.readers[this.table.options.persistenceWriterFunc]?this.writeFunc=this.readers[this.table.options.persistenceWriterFunc]:console.warn("Persistence Write Error - invalid reader set",this.table.options.persistenceWriterFunc):this.writers[this.mode]?this.writeFunc=this.writers[this.mode]:console.warn("Persistence Write Error - invalid writer set",this.mode),this.id="tabulator-"+(o||this.table.element.getAttribute("id")||""),this.config={sort:!0===this.table.options.persistence||this.table.options.persistence.sort,filter:!0===this.table.options.persistence||this.table.options.persistence.filter,group:!0===this.table.options.persistence||this.table.options.persistence.group,page:!0===this.table.options.persistence||this.table.options.persistence.page,columns:!0===this.table.options.persistence?["title","width","visible"]:this.table.options.persistence.columns},this.config.page&&(e=this.retreiveData("page"))&&(void 0===e.paginationSize||!0!==this.config.page&&!this.config.page.size||(this.table.options.paginationSize=e.paginationSize),void 0===e.paginationInitialPage||!0!==this.config.page&&!this.config.page.page||(this.table.options.paginationInitialPage=e.paginationInitialPage)),this.config.group&&(e=this.retreiveData("group"))&&(void 0===e.groupBy||!0!==this.config.group&&!this.config.group.groupBy||(this.table.options.groupBy=e.groupBy),void 0===e.groupStartOpen||!0!==this.config.group&&!this.config.group.groupStartOpen||(this.table.options.groupStartOpen=e.groupStartOpen),void 0===e.groupHeader||!0!==this.config.group&&!this.config.group.groupHeader||(this.table.options.groupHeader=e.groupHeader)),this.config.columns&&(this.table.options.columns=this.load("columns",this.table.options.columns))},j.prototype.initializeColumn=function(e){var t,o,i=this;this.config.columns&&(this.defWatcherBlock=!0,t=e.getDefinition(),o=!0===this.config.columns?Object.keys(t):this.config.columns,o.forEach(function(e){var o=Object.getOwnPropertyDescriptor(t,e),n=t[e];o&&Object.defineProperty(t,e,{set:function(e){n=e,i.defWatcherBlock||i.save("columns"),o.set&&o.set(e)},get:function(){return o.get&&o.get(),n}})}),this.defWatcherBlock=!1)},j.prototype.load=function(e,t){var o=this.retreiveData(e);return t&&(o=o?this.mergeDefinition(t,o):t),o},j.prototype.retreiveData=function(e){return!!this.readFunc&&this.readFunc(this.id,e)},j.prototype.mergeDefinition=function(e,t){var o=this,i=[];return t=t||[],t.forEach(function(t,n){var s,a=o._findColumn(e,t);a&&(!0===o.config.columns||void 0==o.config.columns?(s=Object.keys(a),s.push("width")):s=o.config.columns,s.forEach(function(e){"columns"!==e&&void 0!==t[e]&&(a[e]=t[e])}),a.columns&&(a.columns=o.mergeDefinition(a.columns,t.columns)),i.push(a))}),e.forEach(function(e,n){o._findColumn(t,e)||(i.length>n?i.splice(n,0,e):i.push(e))}),i},j.prototype._findColumn=function(e,t){var o=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(o){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},j.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort());break;case"group":t=this.getGroupConfig();break;case"page":t=this.getPageConfig()}this.writeFunc&&this.writeFunc(this.id,e,t)},j.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},j.prototype.getGroupConfig=function(){var e={};return this.config.group&&((!0===this.config.group||this.config.group.groupBy)&&(e.groupBy=this.table.options.groupBy),(!0===this.config.group||this.config.group.groupStartOpen)&&(e.groupStartOpen=this.table.options.groupStartOpen),(!0===this.config.group||this.config.group.groupHeader)&&(e.groupHeader=this.table.options.groupHeader)),e},j.prototype.getPageConfig=function(){var e={};return this.config.page&&((!0===this.config.page||this.config.page.size)&&(e.paginationSize=this.table.modules.page.getPageSize()),(!0===this.config.page||this.config.page.page)&&(e.paginationInitialPage=this.table.modules.page.getPage())),e},j.prototype.parseColumns=function(e){var t=this,o=[],i=["headerContextMenu","headerMenu","contextMenu","clickMenu"];return e.forEach(function(e){var n,s={},a=e.getDefinition();e.isGroup?(s.title=a.title,s.columns=t.parseColumns(e.getColumns())):(s.field=e.getField(),!0===t.config.columns||void 0==t.config.columns?(n=Object.keys(a),n.push("width")):n=t.config.columns,n.forEach(function(t){switch(t){case"width":s.width=e.getWidth();break;case"visible":s.visible=e.visible;break;default:"function"!=typeof a[t]&&-1===i.indexOf(t)&&(s[t]=a[t])}})),o.push(s)}),o},j.prototype.readers={local:function(e,t){var o=localStorage.getItem(e+"-"+t);return!!o&&JSON.parse(o)},cookie:function(e,t){var o,i,n=document.cookie,s=e+"-"+t,a=n.indexOf(s+"=");return a>-1&&(n=n.substr(a),o=n.indexOf(";"),o>-1&&(n=n.substr(0,o)),i=n.replace(s+"=","")),!!i&&JSON.parse(i)}},j.prototype.writers={local:function(e,t,o){localStorage.setItem(e+"-"+t,JSON.stringify(o))},cookie:function(e,t,o){var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=e+"-"+t+"="+JSON.stringify(o)+"; expires="+i.toUTCString()}},h.prototype.registerModule("persistence",j);var W=function(e){this.table=e,this.element=!1,this.manualBlock=!1};W.prototype.initialize=function(){window.addEventListener("beforeprint",this.replaceTable.bind(this)),window.addEventListener("afterprint",this.cleanup.bind(this))},W.prototype.replaceTable=function(){this.manualBlock||(this.element=document.createElement("div"),this.element.classList.add("tabulator-print-table"),this.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig,this.table.options.printStyled,this.table.options.printRowRange,"print")),this.table.element.style.display="none",this.table.element.parentNode.insertBefore(this.element,this.table.element))},W.prototype.cleanup=function(){document.body.classList.remove("tabulator-print-fullscreen-hide"),this.element&&this.element.parentNode&&(this.element.parentNode.removeChild(this.element),this.table.element.style.display="")},W.prototype.printFullscreen=function(e,t,o){var i,n,s=window.scrollX,a=window.scrollY,r=document.createElement("div"),l=document.createElement("div"),c=this.table.modules.export.genereateTable(void 0!==o?o:this.table.options.printConfig,void 0!==t?t:this.table.options.printStyled,e,"print");this.manualBlock=!0,this.element=document.createElement("div"),this.element.classList.add("tabulator-print-fullscreen"),this.table.options.printHeader&&(r.classList.add("tabulator-print-header"),i="function"==typeof this.table.options.printHeader?this.table.options.printHeader.call(this.table):this.table.options.printHeader,"string"==typeof i?r.innerHTML=i:r.appendChild(i),this.element.appendChild(r)),this.element.appendChild(c),this.table.options.printFooter&&(l.classList.add("tabulator-print-footer"),n="function"==typeof this.table.options.printFooter?this.table.options.printFooter.call(this.table):this.table.options.printFooter,"string"==typeof n?l.innerHTML=n:l.appendChild(n),this.element.appendChild(l)),document.body.classList.add("tabulator-print-fullscreen-hide"),document.body.appendChild(this.element),this.table.options.printFormatter&&this.table.options.printFormatter(this.element,c),window.print(),this.cleanup(),window.scrollTo(s,a),this.manualBlock=!1},h.prototype.registerModule("print",W);var G=function(e){this.table=e,this.data=!1,this.blocked=!1,this.origFuncs={},this.currentVersion=0};G.prototype.watchData=function(e){var t,o=this;this.currentVersion++,t=this.currentVersion,o.unwatchData(),o.data=e,o.origFuncs.push=e.push,Object.defineProperty(o.data,"push",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!1)}),o.origFuncs.push.apply(e,arguments)}}),o.origFuncs.unshift=e.unshift,Object.defineProperty(o.data,"unshift",{enumerable:!1,configurable:!0,value:function(){var i=Array.from(arguments);return o.blocked||t!==o.currentVersion||i.forEach(function(e){o.table.rowManager.addRowActual(e,!0)}),o.origFuncs.unshift.apply(e,arguments)}}),o.origFuncs.shift=e.shift,Object.defineProperty(o.data,"shift",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[0]))&&i.deleteActual(),o.origFuncs.shift.call(e)}}),o.origFuncs.pop=e.pop,Object.defineProperty(o.data,"pop",{enumerable:!1,configurable:!0,value:function(){var i;return o.blocked||t!==o.currentVersion||o.data.length&&(i=o.table.rowManager.getRowFromDataObject(o.data[o.data.length-1]))&&i.deleteActual(),o.origFuncs.pop.call(e)}}),o.origFuncs.splice=e.splice,Object.defineProperty(o.data,"splice",{enumerable:!1,configurable:!0,value:function(){var i,n=Array.from(arguments),s=n[0]<0?e.length+n[0]:n[0],a=n[1],r=!!n[2]&&n.slice(2);if(!o.blocked&&t===o.currentVersion){if(r&&(i=!!e[s]&&o.table.rowManager.getRowFromDataObject(e[s]),i?r.forEach(function(e){o.table.rowManager.addRowActual(e,!0,i,!0)}):(r=r.slice().reverse(),r.forEach(function(e){o.table.rowManager.addRowActual(e,!0,!1,!0)}))),0!==a){var l=e.slice(s,void 0===n[1]?n[1]:s+a);l.forEach(function(e,t){var i=o.table.rowManager.getRowFromDataObject(e);i&&i.deleteActual(t!==l.length-1)})}(r||0!==a)&&o.table.rowManager.reRenderInPosition()}return o.origFuncs.splice.apply(e,arguments)}})},G.prototype.unwatchData=function(){if(!1!==this.data)for(var e in this.origFuncs)Object.defineProperty(this.data,e,{enumerable:!0,configurable:!0,writable:!0,value:this.origFuncs.key})},G.prototype.watchRow=function(e){var t=e.getData();this.blocked=!0;for(var o in t)this.watchKey(e,t,o);this.table.options.dataTree&&this.watchTreeChildren(e),this.blocked=!1},G.prototype.watchTreeChildren=function(e){function t(){o.table.modules.dataTree.initializeRow(e),o.table.modules.dataTree.layoutRow(e),o.table.rowManager.refreshActiveData("tree",!1,!0)}var o=this,i=e.getData()[this.table.options.dataTreeChildField],n={};i&&(n.push=i.push,Object.defineProperty(i,"push",{enumerable:!1,configurable:!0,value:function(){var e=n.push.apply(i,arguments);return t(),e}}),n.unshift=i.unshift,Object.defineProperty(i,"unshift",{enumerable:!1,configurable:!0,value:function(){var e=n.unshift.apply(i,arguments);return t(),e}}),n.shift=i.shift,Object.defineProperty(i,"shift",{enumerable:!1,configurable:!0,value:function(){var e=n.shift.call(i);return t(),e}}),n.pop=i.pop,Object.defineProperty(i,"pop",{enumerable:!1,configurable:!0,value:function(){var e=n.pop.call(i);return t(),e}}),n.splice=i.splice,Object.defineProperty(i,"splice",{enumerable:!1,configurable:!0,value:function(){var e=n.splice.apply(i,arguments);return t(),e}}))},G.prototype.watchKey=function(e,t,o){var i=this,n=Object.getOwnPropertyDescriptor(t,o),s=t[o],a=this.currentVersion;Object.defineProperty(t,o,{set:function(t){if(s=t,!i.blocked&&a===i.currentVersion){var r={};r[o]=t,e.updateData(r)}n.set&&n.set(t)},get:function(){return n.get&&n.get(),s}})},G.prototype.unwatchRow=function(e){var t=e.getData();for(var o in t)Object.defineProperty(t,o,{value:t[o]})},G.prototype.block=function(){this.blocked=!0},G.prototype.unblock=function(){this.blocked=!1},h.prototype.registerModule("reactiveData",G);var U=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};U.prototype.initializeColumn=function(e,t,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===e&&(n="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:n}),!0===s||s==e){var a=document.createElement("div");a.className="tabulator-col-resize-handle";var r=document.createElement("div");r.className="tabulator-col-resize-handle prev",a.addEventListener("click",function(e){e.stopPropagation()});var l=function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=t,i._mouseDown(e,o,a))};a.addEventListener("mousedown",l),a.addEventListener("touchstart",l,{passive:!0}),a.addEventListener("dblclick",function(e){var o=t.getLastColumn();o&&i._checkResizability(o)&&(e.stopPropagation(),o.reinitializeWidth(!0))}),r.addEventListener("click",function(e){e.stopPropagation()});var c=function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=t,i._mouseDown(e,s,r)))};r.addEventListener("mousedown",c),r.addEventListener("touchstart",c,{passive:!0}),r.addEventListener("dblclick",function(e){var o,n,s;(o=t.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(e.stopPropagation(),s.reinitializeWidth(!0)))}),o.appendChild(a),o.appendChild(r)}},U.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},U.prototype._mouseDown=function(e,t,o){function i(e){s.table.rtl?t.setWidth(s.startWidth-((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)):t.setWidth(s.startWidth+((void 0===e.screenX?e.touches[0].screenX:e.screenX)-s.startX)),s.table.options.virtualDomHoz&&s.table.vdomHoz.reinitialize(!0),!s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!1),s.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.persistence&&s.table.modExists("persistence",!0)&&s.table.modules.persistence.config.columns&&s.table.modules.persistence.save("columns"),s.table.options.columnResized.call(s.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startColumn.modules.edit&&(s.startColumn.modules.edit.blocked=!0),s.startX=void 0===e.screenX?e.touches[0].screenX:e.screenX,s.startWidth=t.getWidth(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},h.prototype.registerModule("resizeColumns",U);var X=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};X.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",function(e){e.stopPropagation()});var s=function(o){t.startRow=e,t._mouseDown(o,e,i)};i.addEventListener("mousedown",s),i.addEventListener("touchstart",s,{passive:!0}),n.addEventListener("click",function(e){e.stopPropagation()});var a=function(o){var i=t.table.rowManager.prevDisplayRow(e);i&&(t.startRow=i,t._mouseDown(o,i,n))};n.addEventListener("mousedown",a),n.addEventListener("touchstart",a,{passive:!0}),o.appendChild(i),o.appendChild(n)},X.prototype._mouseDown=function(e,t,o){function i(e){t.setHeight(s.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-s.startY))}function n(e){document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",i),o.removeEventListener("touchmove",i),o.removeEventListener("touchend",n),s.table.element.classList.remove("tabulator-block-select"),s.table.options.rowResized.call(this.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",i,{passive:!0}),o.addEventListener("touchend",n)},h.prototype.registerModule("resizeRows",X);var q=function(e){this.table=e,this.binding=!1,this.observer=!1,this.containerObserver=!1,this.tableHeight=0,this.tableWidth=0,this.containerHeight=0,this.containerWidth=0,this.autoResize=!1};q.prototype.initialize=function(e){var t,o=this,i=this.table;this.tableHeight=i.element.clientHeight,this.tableWidth=i.element.clientWidth,i.element.parentNode&&(this.containerHeight=i.element.parentNode.clientHeight,this.containerWidth=i.element.parentNode.clientWidth),"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.autoResize=!0,this.observer=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.tableHeight==t&&o.tableWidth==n||(o.tableHeight=t,o.tableWidth=n,i.element.parentNode&&(o.containerHeight=i.element.parentNode.clientHeight,o.containerWidth=i.element.parentNode.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())}}),this.observer.observe(i.element),t=window.getComputedStyle(i.element),this.table.element.parentNode&&!this.table.rowManager.fixedHeight&&(t.getPropertyValue("max-height")||t.getPropertyValue("min-height"))&&(this.containerObserver=new ResizeObserver(function(e){if(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell){var t=Math.floor(e[0].contentRect.height),n=Math.floor(e[0].contentRect.width);o.containerHeight==t&&o.containerWidth==n||(o.containerHeight=t,o.containerWidth=n,o.tableHeight=i.element.clientHeight,o.tableWidth=i.element.clientWidth),i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw()}}),this.containerObserver.observe(this.table.element.parentNode))):(this.binding=function(){(!i.browserMobile||i.browserMobile&&!i.modules.edit.currentCell)&&(i.options.virtualDomHoz&&i.vdomHoz.reinitialize(!0),i.redraw())},window.addEventListener("resize",this.binding))},q.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element),this.containerObserver&&this.containerObserver.unobserve(this.table.element.parentNode)},h.prototype.registerModule("resizeTable",q);var Y=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0,this.collapseHandleColumn=!1};Y.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent();for(var o=this.table.columnManager.columnsByIndex,i=Array.isArray(o),n=0,o=i?o:o[Symbol.iterator]();;){var s;if(i){if(n>=o.length)break;s=o[n++]}else{if(n=o.next(),n.done)break;s=n.value}var a=s;if("responsiveCollapse"==a.definition.formatter){this.collapseHandleColumn=a;break}}this.collapseHandleColumn&&(this.hiddenColumns.length?this.collapseHandleColumn.show():this.collapseHandleColumn.hide())},Y.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},Y.prototype.initializeRow=function(e){var t;"calc"!==e.type&&(t=document.createElement("div"),t.classList.add("tabulator-responsive-collapse"),e.modules.responsiveLayout={element:t,open:this.collapseStartOpen},this.collapseStartOpen||(t.style.display="none"))},Y.prototype.layoutRow=function(e){var t=e.getElement();e.modules.responsiveLayout&&(t.appendChild(e.modules.responsiveLayout.element),this.generateCollapsedRowContent(e))},Y.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},Y.prototype.hideColumn=function(e){var t=this.hiddenColumns.length;e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent(),this.collapseHandleColumn&&!t&&this.collapseHandleColumn.show())},Y.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent(),this.collapseHandleColumn&&!this.hiddenColumns.length&&this.collapseHandleColumn.hide())},Y.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),i=(e.table.options.headerVisible?e.table.columnManager.element.clientWidth:e.table.element.clientWidth)-o;if(i<0){var n=e.columns[e.index];n?(e.hideColumn(n),e.index++):t=!1}else{var s=e.columns[e.index-1];s&&i>0&&i>=s.getWidth()?(e.showColumn(s),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},Y.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},Y.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},Y.prototype.generateCollapsedRowData=function(e){var t,o=this,i=e.getData(),n=[];return this.hiddenColumns.forEach(function(s){var a=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return a},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return s.getComponent()}},n.push({field:s.field,title:s.definition.title,value:s.modules.format.formatter.call(o.table.modules.format,t,s.modules.format.params)})):n.push({field:s.field,title:s.definition.title,value:a}))}),n},Y.prototype.formatCollapsedData=function(e){var t=document.createElement("table");return e.forEach(function(e){var o,i=document.createElement("tr"),n=document.createElement("td"),s=document.createElement("td"),a=document.createElement("strong");n.appendChild(a),this.table.modules.localize.bind("columns|"+e.field,function(t){a.innerText=t||e.title}),e.value instanceof Node?(o=document.createElement("div"),o.appendChild(e.value),s.appendChild(o)):s.innerHTML=e.value,i.appendChild(n),i.appendChild(s),t.appendChild(i)},this),Object.keys(e).length?t:""},h.prototype.registerModule("responsiveLayout",Y);var K=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],this.headerCheckboxElement=null};K.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},K.prototype.initializeRow=function(e){var t=this,o=e.getElement(),i=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&("click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.table._clearSelection(),t.lastClickedRow=t.lastClickedRow||e;var i=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),n=t.table.rowManager.getDisplayRowIndex(e),s=i<=n?i:n,a=i>=n?i:n,r=t.table.rowManager.getDisplayRows().slice(0),l=r.splice(s,a-s+1);o.ctrlKey||o.metaKey?(l.forEach(function(o){o!==t.lastClickedRow&&(!0===t.table.options.selectable||t.isRowSelected(e)?t.toggleRow(o):t.selectedRows.length<t.table.options.selectable&&t.toggleRow(o))}),t.lastClickedRow=e):(t.deselectRows(void 0,!0),!0!==t.table.options.selectable&&l.length>t.table.options.selectable&&(l=l.slice(0,t.table.options.selectable)),t.selectRows(l)),t.table._clearSelection()}else o.ctrlKey||o.metaKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(void 0,!0),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.table.modExists("edit")&&t.table.modules.edit.getCurrentCell()||t.table._clearSelection(),t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.table._clearSelection(),t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.table._clearSelection(),t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&(t.table._clearSelection(),t.selectPrev.unshift(e))})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},K.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select&&e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},K.prototype.selectRows=function(e){var t,o=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":this.table.rowManager.rows.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;case"string":t=this.table.rowManager.findRow(e),t?this._selectRow(t,!0,!0):this.table.rowManager.getRows(e).forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged();break;default:Array.isArray(e)?(e.forEach(function(e){o._selectRow(e,!0,!0)}),this._rowSelectionChanged()):this._selectRow(e,!1,!0)}},K.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(e);i?-1==this.selectedRows.indexOf(i)&&(i.getElement().classList.add("tabulator-selected"),i.modules.select||(i.modules.select={}),i.modules.select.selected=!0,i.modules.select.checkboxEl&&(i.modules.select.checkboxEl.checked=!0),this.selectedRows.push(i),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(i,!0),t||this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged(t)):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},K.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},K.prototype.deselectRows=function(e,t){var o,i=this;if(void 0===e){o=i.selectedRows.length;for(var n=0;n<o;n++)i._deselectRow(i.selectedRows[0],!0);i._rowSelectionChanged(t)}else Array.isArray(e)?(e.forEach(function(e){i._deselectRow(e,!0)}),i._rowSelectionChanged(t)):i._deselectRow(e,t)},K.prototype._deselectRow=function(e,t){var o,i=this,n=i.table.rowManager.findRow(e);n?(o=i.selectedRows.findIndex(function(e){return e==n}))>-1&&(n.getElement().classList.remove("tabulator-selected"),n.modules.select||(n.modules.select={}),n.modules.select.selected=!1,n.modules.select.checkboxEl&&(n.modules.select.checkboxEl.checked=!1),i.selectedRows.splice(o,1),this.table.options.dataTreeSelectPropagate&&this.childRowSelection(n,!1),t||i.table.options.rowDeselected.call(this.table,n.getComponent()),i._rowSelectionChanged(t)):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},K.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},K.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},K.prototype._rowSelectionChanged=function(e){this.headerCheckboxElement&&(0===this.selectedRows.length?(this.headerCheckboxElement.checked=!1,this.headerCheckboxElement.indeterminate=!1):this.table.rowManager.rows.length===this.selectedRows.length?(this.headerCheckboxElement.checked=!0,this.headerCheckboxElement.indeterminate=!1):(this.headerCheckboxElement.indeterminate=!0,this.headerCheckboxElement.checked=!1)),e||this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},K.prototype.registerRowSelectCheckbox=function(e,t){e._row.modules.select||(e._row.modules.select={}),e._row.modules.select.checkboxEl=t},K.prototype.registerHeaderSelectCheckbox=function(e){this.headerCheckboxElement=e},K.prototype.childRowSelection=function(e,t){var o=this.table.modules.dataTree.getChildren(e,!0);if(t)for(var i=o,n=Array.isArray(i),s=0,i=n?i:i[Symbol.iterator]();;){var a;if(n){if(s>=i.length)break;a=i[s++]}else{if(s=i.next(),s.done)break;a=s.value}var r=a;this._selectRow(r,!0)}else for(var l=o,c=Array.isArray(l),u=0,l=c?l:l[Symbol.iterator]();;){var d;if(c){if(u>=l.length)break;d=l[u++]}else{if(u=l.next(),u.done)break;d=u.value}var h=d;this._deselectRow(h,!0)}},h.prototype.registerModule("selectRow",K);var J=function(e){this.table=e,this.sortList=[],this.changed=!1};J.prototype.initializeColumn=function(e,t){var o,i,n=this,s=!1;switch(_typeof(e.definition.sorter)){case"string":n.sorters[e.definition.sorter]?s=n.sorters[e.definition.sorter]:console.warn("Sort Error - No such sorter found: ",e.definition.sorter);break;case"function":s=e.definition.sorter}e.modules.sort={sorter:s,dir:"none",params:e.definition.sorterParams||{},startingDir:e.definition.headerSortStartingDir||"asc",tristate:void 0!==e.definition.headerSortTristate?e.definition.headerSortTristate:this.table.options.headerSortTristate},(void 0===e.definition.headerSort?!1!==this.table.options.headerSort:!1!==e.definition.headerSort)&&(o=e.getElement(),o.classList.add("tabulator-sortable"),i=document.createElement("div"),i.classList.add("tabulator-col-sorter"),"object"==_typeof(this.table.options.headerSortElement)?i.appendChild(this.table.options.headerSortElement):i.innerHTML=this.table.options.headerSortElement,t.appendChild(i),e.modules.sort.element=i,o.addEventListener("click",function(t){var o="",i=[],s=!1;if(e.modules.sort){if(e.modules.sort.tristate)o="none"==e.modules.sort.dir?e.modules.sort.startingDir:e.modules.sort.dir==e.modules.sort.startingDir?"asc"==e.modules.sort.dir?"desc":"asc":"none";else switch(e.modules.sort.dir){case"asc":o="desc";break;case"desc":o="asc";break;default:o=e.modules.sort.startingDir}n.table.options.columnHeaderSortMulti&&(t.shiftKey||t.ctrlKey)?(i=n.getSort(),s=i.findIndex(function(t){return t.field===e.getField()}),s>-1?(i[s].dir=o,s!=i.length-1&&(s=i.splice(s,1)[0],"none"!=o&&i.push(s))):"none"!=o&&i.push({column:e,dir:o}),n.setSort(i)):"none"==o?n.clear():n.setSort(e,o),n.table.rowManager.sorterRefresh(!n.sortList.length)}}))},J.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},J.prototype.getSort=function(){var e=this,t=[];return e.sortList.forEach(function(e){e.column&&t.push({column:e.column.getComponent(),field:e.column.getField(),dir:e.dir})}),t},J.prototype.setSort=function(e,t){var o=this,i=[];Array.isArray(e)||(e=[{column:e,dir:t}]),e.forEach(function(e){var t
+;t=o.table.columnManager.findColumn(e.column),t?(e.column=t,i.push(e),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",e.column)}),o.sortList=i,this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.sort&&this.table.modules.persistence.save("sort")},J.prototype.clear=function(){this.setSort([])},J.prototype.findSorter=function(e){var t,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),e.getField()))switch(t=e.getFieldValue(o),void 0===t?"undefined":_typeof(t)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(t)||""===t?t.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},J.prototype.sort=function(e){var t=this,o=this.table.options.sortOrderReverse?t.sortList.slice().reverse():t.sortList,i=[],n=[];t.table.options.dataSorting&&t.table.options.dataSorting.call(t.table,t.getSort()),t.clearColumnHeaders(),t.table.options.ajaxSorting?o.forEach(function(e,o){t.setColumnHeader(e.column,e.dir)}):(o.forEach(function(e,o){var n=e.column.modules.sort;e.column&&n&&(n.sorter||(n.sorter=t.findSorter(e.column)),e.params="function"==typeof n.params?n.params(e.column.getComponent(),e.dir):n.params,i.push(e)),t.setColumnHeader(e.column,e.dir)}),i.length&&t._sortItems(e,i)),t.table.options.dataSorted&&(e.forEach(function(e){n.push(e.getComponent())}),t.table.options.dataSorted.call(t.table,t.getSort(),n))},J.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(e){e.modules.sort&&(e.modules.sort.dir="none",e.getElement().setAttribute("aria-sort","none"))})},J.prototype.setColumnHeader=function(e,t){e.modules.sort.dir=t,e.getElement().setAttribute("aria-sort",t)},J.prototype._sortItems=function(e,t){var o=this,i=t.length-1;e.sort(function(e,n){for(var s,a=i;a>=0;a--){var r=t[a];if(0!==(s=o._sortRow(e,n,r.column,r.dir,r.params)))break}return s})},J.prototype._sortRow=function(e,t,o,i,n){var s,a,r="asc"==i?e:t,l="asc"==i?t:e;return e=o.getFieldValue(r.getData()),t=o.getFieldValue(l.getData()),e=void 0!==e?e:"",t=void 0!==t?t:"",s=r.getComponent(),a=l.getComponent(),o.modules.sort.sorter.call(this,e,t,s,a,o.getComponent(),i,n)},J.prototype.sorters={number:function(e,t,o,i,n,s,a){var r=a.alignEmptyValues,l=a.decimalSeparator,c=a.thousandSeparator,u=0;if(e=String(e),t=String(t),c&&(e=e.split(c).join(""),t=t.split(c).join("")),l&&(e=e.split(l).join("."),t=t.split(l).join(".")),e=parseFloat(e),t=parseFloat(t),isNaN(e))u=isNaN(t)?0:-1;else{if(!isNaN(t))return e-t;u=1}return("top"===r&&"desc"===s||"bottom"===r&&"asc"===s)&&(u*=-1),u},string:function(e,t,o,i,n,s,a){var r,l=a.alignEmptyValues,c=0;if(e){if(t){switch(_typeof(a.locale)){case"boolean":a.locale&&(r=this.table.modules.localize.getLocale());break;case"string":r=a.locale}return String(e).toLowerCase().localeCompare(String(t).toLowerCase(),r)}c=1}else c=t?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c},date:function(e,t,o,i,n,s,a){return a.format||(a.format="DD/MM/YYYY"),this.sorters.datetime.call(this,e,t,o,i,n,s,a)},time:function(e,t,o,i,n,s,a){return a.format||(a.format="HH:mm"),this.sorters.datetime.call(this,e,t,o,i,n,s,a)},datetime:function(e,t,o,i,n,s,a){var r=a.format||"DD/MM/YYYY HH:mm:ss",l=a.alignEmptyValues,c=0;if("undefined"!=typeof moment){if(e=moment(e,r),t=moment(t,r),e.isValid()){if(t.isValid())return e-t;c=1}else c=t.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(c*=-1),c}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(e,t,o,i,n,s,a){return(!0===e||"true"===e||"True"===e||1===e?1:0)-(!0===t||"true"===t||"True"===t||1===t?1:0)},array:function(e,t,o,i,n,s,a){function r(e){switch(u){case"length":return e.length;case"sum":return e.reduce(function(e,t){return e+t});case"max":return Math.max.apply(null,e);case"min":return Math.min.apply(null,e);case"avg":return e.reduce(function(e,t){return e+t})/e.length}}var l=0,c=0,u=a.type||"length",d=a.alignEmptyValues,h=0;if(Array.isArray(e)){if(Array.isArray(t))return l=e?r(e):0,c=t?r(t):0,l-c;d=1}else d=Array.isArray(t)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(h*=-1),h},exists:function(e,t,o,i,n,s,a){return(void 0===e?0:1)-(void 0===t?0:1)},alphanum:function(e,t,o,i,n,s,a){var r,l,c,u,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=a.alignEmptyValues,g=0;if(e||0===e){if(t||0===t){if(isFinite(e)&&isFinite(t))return e-t;if(r=String(e).toLowerCase(),l=String(t).toLowerCase(),r===l)return 0;if(!m.test(r)||!m.test(l))return r>l?1:-1;for(r=r.match(p),l=l.match(p),d=r.length>l.length?l.length:r.length;h<d;)if(c=r[h],u=l[h++],c!==u)return isFinite(c)&&isFinite(u)?("0"===c.charAt(0)&&(c="."+c),"0"===u.charAt(0)&&(u="."+u),c-u):c>u?1:-1;return r.length>l.length}g=1}else g=t||0===t?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},h.prototype.registerModule("sort",J);var $=function(e){this.table=e,this.invalidCells=[]};return $.prototype.initializeColumn=function(e){var t,o=this,i=[];e.definition.validator&&(Array.isArray(e.definition.validator)?e.definition.validator.forEach(function(e){(t=o._extractValidator(e))&&i.push(t)}):(t=this._extractValidator(e.definition.validator))&&i.push(t),e.modules.validate=!!i.length&&i)},$.prototype._extractValidator=function(e){var t,o,i;switch(void 0===e?"undefined":_typeof(e)){case"string":return i=e.indexOf(":"),i>-1?(t=e.substring(0,i),o=e.substring(i+1)):t=e,this._buildValidator(t,o);case"function":return this._buildValidator(e);case"object":return this._buildValidator(e.type,e.parameters)}},$.prototype._buildValidator=function(e,t){var o="function"==typeof e?e:this.validators[e];return o?{type:"function"==typeof e?"function":e,func:o,params:t}:(console.warn("Validator Setup Error - No matching validator found:",e),!1)},$.prototype.validate=function(e,t,o){var i=this,n=[],s=this.invalidCells.indexOf(t);return e&&e.forEach(function(e){e.func.call(i,t.getComponent(),o,e.params)||n.push({type:e.type,parameters:e.params})}),n=!n.length||n,t.modules.validate||(t.modules.validate={}),!0===n?(t.modules.validate.invalid=!1,t.getElement().classList.remove("tabulator-validation-fail"),s>-1&&this.invalidCells.splice(s,1)):(t.modules.validate.invalid=!0,"manual"!==this.table.options.validationMode&&t.getElement().classList.add("tabulator-validation-fail"),-1==s&&this.invalidCells.push(t)),n},$.prototype.getInvalidCells=function(){var e=[];return this.invalidCells.forEach(function(t){e.push(t.getComponent())}),e},$.prototype.clearValidation=function(e){var t;e.modules.validate&&e.modules.validate.invalid&&(e.getElement().classList.remove("tabulator-validation-fail"),e.modules.validate.invalid=!1,(t=this.invalidCells.indexOf(e))>-1&&this.invalidCells.splice(t,1))},$.prototype.validators={integer:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&Math.floor(t)===t},float:function(e,t,o){return""===t||null===t||void 0===t||"number"==typeof(t=Number(t))&&isFinite(t)&&t%1!=0},numeric:function(e,t,o){return""===t||null===t||void 0===t||!isNaN(t)},string:function(e,t,o){return""===t||null===t||void 0===t||isNaN(t)},max:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)<=o},min:function(e,t,o){return""===t||null===t||void 0===t||parseFloat(t)>=o},starts:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().startsWith(String(o).toLowerCase())},ends:function(e,t,o){return""===t||null===t||void 0===t||String(t).toLowerCase().endsWith(String(o).toLowerCase())},minLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length>=o},maxLength:function(e,t,o){return""===t||null===t||void 0===t||String(t).length<=o},in:function(e,t,o){return""===t||null===t||void 0===t||("string"==typeof o&&(o=o.split("|")),""===t||o.indexOf(t)>-1)},regex:function(e,t,o){return""===t||null===t||void 0===t||new RegExp(o).test(t)},unique:function(e,t,o){if(""===t||null===t||void 0===t)return!0;var i=!0,n=e.getData(),s=e.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(e){var o=e.getData();o!==n&&t==s.getFieldValue(o)&&(i=!1)}),i},required:function(e,t,o){return""!==t&&null!==t&&void 0!==t}},h.prototype.registerModule("validate",$),h});
\ No newline at end of file
index c77d225..8e0ba9f 100644 (file)
@@ -1,4 +1,4 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
 
 'use strict';
 
@@ -1467,6 +1467,8 @@ var Column = function Column(def, parent) {
 
        this.width = null; //column width
        this.widthStyled = ""; //column width prestyled to improve render efficiency
+       this.maxWidth = null; //column maximum width
+       this.maxWidthStyled = ""; //column maximum prestyled to improve render efficiency
        this.minWidth = null; //column minimum width
        this.minWidthStyled = ""; //column minimum prestyled to improve render efficiency
        this.widthFixed = false; //user has specified a width for this column
@@ -1892,6 +1894,12 @@ Column.prototype._buildColumnHeader = function () {
        //set min width if present
        this.setMinWidth(typeof def.minWidth == "undefined" ? this.table.options.columnMinWidth : parseInt(def.minWidth));
 
+       if (def.maxWidth || this.table.options.columnMaxWidth) {
+               if (def.maxWidth !== false) {
+                       this.setMaxWidth(typeof def.maxWidth == "undefined" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth));
+               }
+       }
+
        this.reinitializeWidth();
 
        //set tooltip if present
@@ -2379,6 +2387,10 @@ Column.prototype.setWidthActual = function (width) {
 
        width = Math.max(this.minWidth, width);
 
+       if (this.maxWidth) {
+               width = Math.min(this.maxWidth, width);
+       }
+
        this.width = width;
        this.widthStyled = width ? width + "px" : "";
 
@@ -2454,6 +2466,17 @@ Column.prototype.setMinWidth = function (minWidth) {
        });
 };
 
+Column.prototype.setMaxWidth = function (maxWidth) {
+       this.maxWidth = maxWidth;
+       this.maxWidthStyled = maxWidth ? maxWidth + "px" : "";
+
+       this.element.style.maxWidth = this.maxWidthStyled;
+
+       this.cells.forEach(function (cell) {
+               cell.setMaxWidth();
+       });
+};
+
 Column.prototype.delete = function () {
        var _this9 = this;
 
@@ -2610,25 +2633,30 @@ Column.prototype.updateDefinition = function (updates) {
                var definition;
 
                if (!_this10.isGroup) {
-                       definition = Object.assign({}, _this10.getDefinition());
-                       definition = Object.assign(definition, updates);
+                       if (!_this10.parent.isGroup) {
+                               definition = Object.assign({}, _this10.getDefinition());
+                               definition = Object.assign(definition, updates);
 
-                       _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
+                               _this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {
 
-                               if (definition.field == _this10.field) {
-                                       _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
-                               }
+                                       if (definition.field == _this10.field) {
+                                               _this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays
+                                       }
 
-                               _this10.delete().then(function () {
-                                       resolve(column.getComponent());
+                                       _this10.delete().then(function () {
+                                               resolve(column.getComponent());
+                                       }).catch(function (err) {
+                                               reject(err);
+                                       });
                                }).catch(function (err) {
                                        reject(err);
                                });
-                       }).catch(function (err) {
-                               reject(err);
-                       });
+                       } else {
+                               console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns");
+                               reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                       }
                } else {
-                       console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups");
+                       console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns");
                        reject("Column Update Error - The updateDefinition function is only available on columns, not column groups");
                }
        });
@@ -2642,7 +2670,7 @@ Column.prototype.deleteCell = function (cell) {
        }
 };
 
-Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu",
+Column.prototype.defaultOptionList = ["title", "field", "columns", "visible", "align", "hozAlign", "vertAlign", "width", "minWidth", "maxWidth", "widthGrow", "widthShrink", "resizable", "frozen", "responsive", "tooltip", "cssClass", "rowHandle", "hideInHtml", "print", "htmlOutput", "sorter", "sorterParams", "formatter", "formatterParams", "variableHeight", "editable", "editor", "editorParams", "validator", "mutator", "mutatorParams", "mutatorData", "mutatorDataParams", "mutatorEdit", "mutatorEditParams", "mutatorClipboard", "mutatorClipboardParams", "accessor", "accessorParams", "accessorData", "accessorDataParams", "accessorDownload", "accessorDownloadParams", "accessorClipboard", "accessorClipboardParams", "accessorPrint", "accessorPrintParams", "accessorHtmlOutput", "accessorHtmlOutputParams", "clipboard", "download", "downloadTitle", "topCalc", "topCalcParams", "topCalcFormatter", "topCalcFormatterParams", "bottomCalc", "bottomCalcParams", "bottomCalcFormatter", "bottomCalcFormatterParams", "cellClick", "cellDblClick", "cellContext", "cellTap", "cellDblTap", "cellTapHold", "cellMouseEnter", "cellMouseLeave", "cellMouseOver", "cellMouseOut", "cellMouseMove", "cellEditing", "cellEdited", "cellEditCancelled", "headerSort", "headerSortStartingDir", "headerSortTristate", "headerClick", "headerDblClick", "headerContext", "headerTap", "headerDblTap", "headerTapHold", "headerTooltip", "headerVertical", "headerHozAlign", "editableTitle", "titleFormatter", "titleFormatterParams", "headerFilter", "headerFilterPlaceholder", "headerFilterParams", "headerFilterEmptyCheck", "headerFilterFunc", "headerFilterFuncParams", "headerFilterLiveFilter", "print", "headerContextMenu", "headerMenu", "contextMenu",
 // "headerClickMenu",
 "clickMenu", "formatterPrint", "formatterPrintParams", "formatterClipboard", "formatterClipboardParams", "formatterHtmlOutput", "formatterHtmlOutputParams", "titlePrint", "titleClipboard", "titleHtmlOutput", "titleDownload"];
 
@@ -4406,7 +4434,8 @@ RowManager.prototype.adjustTableSize = function () {
            modExists;
 
        if (this.renderMode === "virtual") {
-               var otherHeight = Math.floor(this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0));
+
+               var otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));
 
                if (this.fixedHeight) {
                        this.element.style.minHeight = "calc(100% - " + otherHeight + "px)";
@@ -4414,7 +4443,7 @@ RowManager.prototype.adjustTableSize = function () {
                        this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)";
                } else {
                        this.element.style.height = "";
-                       this.element.style.height = Math.floor(this.table.element.clientHeight) - otherHeight + "px";
+                       this.element.style.height = this.table.element.clientHeight - otherHeight + "px";
                        this.element.scrollTop = this.scrollTop;
                }
 
@@ -4422,7 +4451,7 @@ RowManager.prototype.adjustTableSize = function () {
                this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;
 
                //check if the table has changed size when dealing with variable height tables
-               if (!this.fixedHeight && Math.floor(initialHeight) != Math.floor(this.element.clientHeight)) {
+               if (!this.fixedHeight && initialHeight != this.element.clientHeight) {
                        modExists = this.table.modExists("resizeTable");
 
                        if (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {
@@ -4944,7 +4973,7 @@ VDomHoz.prototype.initializeRow = function (row) {
                for (var i = this.leftCol; i <= this.rightCol; i++) {
                        var column = this.columns[i];
 
-                       if (column.visible) {
+                       if (column && column.visible) {
                                var cell = row.getCell(column);
 
                                row.getElement().appendChild(cell.getElement());
@@ -6383,10 +6412,12 @@ Cell.prototype._generateTooltip = function () {
 };
 
 //////////////////// Getters ////////////////////
-Cell.prototype.getElement = function () {
+Cell.prototype.getElement = function (containerOnly) {
        if (!this.loaded) {
                this.loaded = true;
-               this.layoutElement();
+               if (!containerOnly) {
+                       this.layoutElement();
+               }
        }
 
        return this.element;
@@ -6526,6 +6557,11 @@ Cell.prototype.setMinWidth = function () {
        this.element.style.minWidth = this.column.minWidthStyled;
 };
 
+Cell.prototype.setMaxWidth = function () {
+       this.maxWidth = this.column.maxWidth;
+       this.element.style.maxWidth = this.column.maxWidthStyled;
+};
+
 Cell.prototype.checkHeight = function () {
        // var height = this.element.css("height");
        this.row.reinitializeHeight();
@@ -6835,6 +6871,7 @@ Tabulator.prototype.defaultOptions = {
        layoutColumnsOnNewData: false, //update column widths on setData
 
        columnMinWidth: 40, //minimum global width for a column
+       columnMaxWidth: false, //minimum global width for a column
        columnHeaderVertAlign: "top", //vertical alignment of column headers
        columnVertAlign: false, // DEPRECATED - Left to allow warning
 
@@ -7431,10 +7468,6 @@ Tabulator.prototype._buildElement = function () {
                mod.persistence.initialize();
        }
 
-       if (options.persistence && this.modExists("persistence", true) && mod.persistence.config.columns) {
-               options.columns = mod.persistence.load("columns", options.columns);
-       }
-
        if (options.movableRows && this.modExists("moveRow")) {
                mod.moveRow.initialize();
        }
@@ -8403,6 +8436,13 @@ Tabulator.prototype.setFilter = function (field, type, value, params) {
        }
 };
 
+//set standard filters
+Tabulator.prototype.refreshFilter = function () {
+       if (this.modExists("filter", true)) {
+               this.rowManager.filterRefresh();
+       }
+};
+
 //add filter to array
 Tabulator.prototype.addFilter = function (field, type, value, params) {
        if (this.modExists("filter", true)) {
@@ -8895,6 +8935,14 @@ Tabulator.prototype.getHistoryRedoSize = function () {
        }
 };
 
+Tabulator.prototype.clearHistory = function () {
+       if (this.options.history && this.modExists("history", true)) {
+               return this.modules.history.clear();
+       } else {
+               return false;
+       }
+};
+
 /////////////// Download Management //////////////
 
 Tabulator.prototype.download = function (type, filename, options, active) {
@@ -9093,6 +9141,11 @@ Layout.prototype.getMode = function () {
 Layout.prototype.layout = function () {
 
        this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);
+
+       if (this.mode.indexOf("fitData") === 0 && this.table.options.persistence && this.table.modExists("persistence", true) && this.table.modules.persistence.config.columns) {
+
+               this.table.modules.persistence.save("columns");
+       }
 };
 
 //layout render functions
@@ -9261,6 +9314,7 @@ Layout.prototype.modes = {
                            oversizeSpace = 0,
                            remainingSpace = 0,
                            nextColWidth = 0,
+                           remainingFlexGrowUnits = flexGrowUnits,
                            gap = 0,
                            changeUnits = 0,
                            undersizeCols = [];
@@ -9284,9 +9338,24 @@ Layout.prototype.modes = {
                                        oversizeCols.push(col);
                                } else {
 
-                                       undersizeCols.push(col);
+                                       if (col.column.maxWidth && col.column.maxWidth < width) {
+
+                                               col.width = col.column.maxWidth;
+
+                                               freeSpace -= col.column.maxWidth;
+
+                                               remainingFlexGrowUnits -= shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
 
-                                       changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                                               if (remainingFlexGrowUnits) {
+
+                                                       colWidth = Math.floor(freeSpace / remainingFlexGrowUnits);
+                                               }
+                                       } else {
+
+                                               undersizeCols.push(col);
+
+                                               changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;
+                                       }
                                }
                        });
 
index 5794d4b..ba420a5 100644 (file)
@@ -1,6 +1,6 @@
-/* Tabulator v4.8.4 (c) Oliver Folkerd */
-"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var l=e[n];if(t.call(i,l,n,e))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var l=e[n];if(t.call(i,l,n,e))return l;n++}}}),String.prototype.includes||(String.prototype.includes=function(t,e){if(t instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===e&&(e=0),-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;for(var n=0|e,l=Math.max(n>=0?n:i-Math.abs(n),0);l<i;){if(function(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}(o[l],t))return!0;l++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){if(null===t||void 0===t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!==n&&void 0!==n)for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(o[l]=n[l])}return o},writable:!0,configurable:!0});var ColumnManager=function(t){this.table=t,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};ColumnManager.prototype.createHeadersElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-headers"),t},ColumnManager.prototype.createHeaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-header"),this.table.options.headerVisible||t.classList.add("tabulator-header-hidden"),t},ColumnManager.prototype.initialize=function(){},ColumnManager.prototype.setRowManager=function(t){this.rowManager=t},ColumnManager.prototype.getElement=function(){return this.element},ColumnManager.prototype.getHeadersElement=function(){return this.headersElement},ColumnManager.prototype.scrollHorizontal=function(t){var e=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=t,t>o?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(t){var e,o,i=[],n=this.table.options.autoColumnsDefinitions;if(t&&t.length){e=t[0];for(var l in e){var s={field:l,title:l},a=e[l];switch(void 0===a?"undefined":_typeof(a)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(a)?"array":"string";break;default:o=isNaN(a)||""===a?a.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}s.sorter=o,i.push(s)}if(n)switch(void 0===n?"undefined":_typeof(n)){case"function":this.table.options.columns=n.call(this.table,i);break;case"object":Array.isArray(n)?i.forEach(function(t){var e=n.find(function(e){return e.field===t.field});e&&Object.assign(t,e)}):i.forEach(function(t){n[t.field]&&Object.assign(t,n[t.field])}),this.table.options.columns=i}else this.table.options.columns=i;this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),l=o?this.findColumnIndex(o):o;if(o&&l>-1){var s=this.columns.indexOf(o.getTopColumn()),a=o.getElement();e?(this.columns.splice(s,0,i),a.parentNode.insertBefore(n,a)):(this.columns.splice(s+1,0,i),a.parentNode.insertBefore(n,a.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)}),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof Column)return t;if(t instanceof ColumnComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])}),o},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getFirstVisibileColumn=function(t){var t=this.columnsByIndex.findIndex(function(t){return t.visible});return t>-1&&this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},ColumnManager.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},ColumnManager.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},ColumnManager.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},ColumnManager.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var l,s=this,a=t.indexOf(e),r=[];a>-1&&(t.splice(a,1),l=t.indexOf(o),l>-1?i&&(l+=1):l=a,t.splice(l,0,e),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach(function(t){r=r.concat(s.table.modules.dataTree.getTreeChildren(t,!1,!0))}),r=r.concat(this.table.rowManager.rows),r.forEach(function(t){if(t.cells.length){var e=t.cells.splice(a,1)[0];t.cells.splice(l,0,e)}})))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,l=0,s=0,a=t.getElement();return new Promise(function(r,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":s=-i.element.clientWidth/2;break;case"right":s=a.clientWidth-i.headersElement.clientWidth}if(!o&&(l=a.offsetLeft)>0&&l+a.offsetWidth<i.element.clientWidth)return!1;n=a.offsetLeft+s,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),r()}else console.warn("Scroll Error - Column not visible"),u("Scroll Error - Column not visible")})},ColumnManager.prototype.generateCells=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){o.push(e.generateCell(t))}),o},ColumnManager.prototype.getFlexBaseWidth=function(){var t=this,e=t.table.element.clientWidth,o=0;return t.rowManager.element.scrollHeight>t.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,l,s;i.visible&&(n=i.definition.width||0,l=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),s="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=s>l?s:l)}),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(!0),"fitColumns"!=i.table.modules.layout.getMode()&&s.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(),n(s)})},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},ColumnComponent.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},ColumnComponent.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(t){var e;return e=!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),e},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach(function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)})},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=this.definition,o=this.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(e.headerContextMenu||e.headerClickMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass){e.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(void 0===e.minWidth?this.table.options.columnMinWidth:parseInt(e.minWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign},Column.prototype._buildColumnHeaderContent=function(){var t=(this.definition,this.table,document.createElement("div"));return t.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),t.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),t},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||"&nbsp;"}):n.value=e.title||"&nbsp;"}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||"&nbsp;")}):t._formatColumnHeaderTitle(i,e.title||"&nbsp;");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,l,s,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),s=function(t){a.titleFormatterRendered=t},l={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,l,n,s),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){var t=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign,this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,l=0;l<n&&(o=o[i[l]],e=o,o);l++);return e},Column.prototype._setFlatData=function(t,e){this.field&&(t[this.field]=e)},Column.prototype._setNestedData=function(t,e){for(var o=t,i=this.fieldStructure,n=i.length,l=0;l<n;l++)if(l==n-1)o[i[l]]=e;else{if(!o[i[l]]){if(void 0===e)break;o[i[l]]={}}o=o[i[l]]}},Column.prototype.attachColumn=function(t){var e=this;e.groupElement?(e.columns.push(t),e.groupElement.appendChild(t.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},Column.prototype.verticalAlign=function(t,e){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:e||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===t||(this.element.style.paddingTop="bottom"===t?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach(function(e){e.verticalAlign(t)})},Column.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach(function(t){t.clearVerticalAlign()})},Column.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},Column.prototype.getElement=function(){return this.element},Column.prototype.getGroupElement=function(){return this.groupElement},Column.prototype.getField=function(){return this.field},Column.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},Column.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},Column.prototype.getColumns=function(){return this.columns},Column.prototype.getCells=function(){return this.cells},Column.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},Column.prototype.getDefinition=function(t){var e=[];return this.isGroup&&t&&(this.columns.forEach(function(t){e.push(t.getDefinition(!0))}),this.definition.columns=e),this.definition},Column.prototype.checkColumnVisibility=function(){var t=!1;this.columns.forEach(function(e){e.visible&&(t=!0)}),t?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},Column.prototype.show=function(t,e){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.show()}),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},Column.prototype.hide=function(t,e){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.hide()}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},Column.prototype.matchChildWidths=function(){var t=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}),this.contentElement.style.maxWidth=t-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.removeChild=function(t){var e=this.columns.indexOf(t)
-;e>-1&&this.columns.splice(e,1),this.columns.length||this.delete()},Column.prototype.setWidth=function(t){this.widthFixed=!0,this.setWidthActual(t)},Column.prototype.setWidthActual=function(t){isNaN(t)&&(t=Math.floor(this.table.element.clientWidth/100*parseInt(t))),t=Math.max(this.minWidth,t),this.width=t,this.widthStyled=t?t+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},Column.prototype.checkCellHeights=function(){var t=[];this.cells.forEach(function(e){e.row.heightInitialized&&(null!==e.row.getElement().offsetParent?(t.push(e.row),e.row.clearCellHeight()):e.row.heightInitialized=!1)}),t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()})},Column.prototype.getWidth=function(){var t=0;return this.isGroup?this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}):t=this.width,t},Column.prototype.getHeight=function(){return this.element.offsetHeight},Column.prototype.setMinWidth=function(t){this.minWidth=t,this.minWidthStyled=t?t+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})},Column.prototype.delete=function(){var t=this;return new Promise(function(e,o){t.isGroup&&t.columns.forEach(function(t){t.delete()}),t.table.modExists("edit")&&t.table.modules.edit.currentCell.column===t&&t.table.modules.edit.cancelEdit();for(var i=t.cells.length,n=0;n<i;n++)t.cells[0].delete();t.element.parentNode&&t.element.parentNode.removeChild(t.element),t.element=!1,t.contentElement=!1,t.titleElement=!1,t.groupElement=!1,t.parent.isGroup&&t.parent.removeChild(t),t.table.columnManager.deregisterColumn(t),t.table.options.virtualDomHoz&&t.table.vdomHoz.reinitialize(!0),e()})},Column.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},Column.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Column.prototype.generateCell=function(t){var e=this,o=new Cell(e,t);return this.cells.push(o),o},Column.prototype.nextColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._nextVisibleColumn(t+1)},Column.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},Column.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},Column.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},Column.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var t=this;this.widthFixed||(this.element.style.width="",t.cells.forEach(function(t){t.clearWidth()}));var e=this.element.offsetWidth;t.width&&this.widthFixed||(t.cells.forEach(function(t){var o=t.getWidth();o>e&&(e=o)}),e&&t.setWidthActual(e+1))},Column.prototype.updateDefinition=function(t){var e=this;return new Promise(function(o,i){var n;e.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on columns, not column groups"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then(function(t){n.field==e.field&&(e.field=!1),e.delete().then(function(){o(t.getComponent())}).catch(function(t){i(t)})}).catch(function(t){i(t)}))})},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e})},RowManager.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof Row)return t;if(t instanceof RowComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.rows.find(function(e){return e.getElement()===t})||!1}return!1},RowManager.prototype.getRowFromDataObject=function(t){return this.rows.find(function(e){return e.data===t})||!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,l=this.getDisplayRows().indexOf(t),s=t.getElement(),a=0;return new Promise(function(t,r){if(l>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(s).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-l)>Math.abs(n.vDomBottom-l)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(s)&&(a=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&a<n.element.clientHeight-s.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(l,!0)}switch(e){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(s.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-s.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-s.offsetTop)+s.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+s.offsetHeight}t()}else console.warn("Scroll Error - Row not visible"),r("Scroll Error - Row not visible")})},RowManager.prototype.setData=function(t,e,o){var i=this,n=this;return new Promise(function(l,s){e&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(t,!0):i.reRenderInPosition(function(){n._setDataActual(t)}):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(t),i.resetScroll(),i._setDataActual(t)),l()})},RowManager.prototype._setDataActual=function(t,e){var o=this;o.table.options.dataLoading.call(this.table,t),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(t)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(t),t.forEach(function(t,e){if(t&&"object"===(void 0===t?"undefined":_typeof(t))){var i=new Row(t,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",t)}),o.refreshActiveData(!1,!1,e),o.table.options.dataLoaded.call(this.table,t)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===t?"undefined":_typeof(t),"\nData:     ",t)},RowManager.prototype._wipeElements=function(){this.rows.forEach(function(t){t.wipe()}),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()},RowManager.prototype.deleteRow=function(t,e){var o=this.rows.indexOf(t),i=this.activeRows.indexOf(t);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,l=0,s=[];return new Promise(function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),l=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var l=n.addRow(t,e,o,!0);s.push(l)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(s)})},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,l,s=t instanceof Row?t:new Row(t||{},this),a=this.findAddRowPos(e),r=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(l=this.getDisplayRows(),a?l.length?o=l[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],a=!1):l.length&&(o=l[l.length-1],a=!(l.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(s);var u=s.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?a?u[0]!==s&&(o=u[0],this._moveRowInArray(s.getGroup().rows,s,o,!a)):u[u.length-1]!==s&&(o=u[u.length-1],this._moveRowInArray(s.getGroup().rows,s,o,!a)):this._moveRowInArray(s.getGroup().rows,s,o,!a))}return o&&(r=this.rows.indexOf(o)),o&&r>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(a?e:e+1,0,s)}),n>-1&&this.activeRows.splice(a?n:n+1,0,s),this.rows.splice(a?r:r+1,0,s)):a?(this.displayRowIterator(function(t){t.unshift(s)}),this.activeRows.unshift(s),this.rows.unshift(s)):(this.displayRowIterator(function(t){t.push(s)}),this.activeRows.push(s),this.rows.push(s)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,s.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),i||this.reRenderInPosition(),s},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof Group&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),l=t.getGroup();n===l?this._moveRowInArray(n.rows,t,e,o):(l&&l.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,l,s,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),l=t.indexOf(o),l>-1?i?t.splice(l+1,0,e):t.splice(l,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){s=n<l?n:l,a=l>n?l:n+1;for(var r=s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof Row&&"row"==i.type?i:this.nextDisplayRow(i,e)},RowManager.prototype.prevDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!e||!i||i instanceof Row&&"row"==i.type?i:this.prevDisplayRow(i,e)},RowManager.prototype.findRowIndex=function(t,e){var o;return!!((t=this.findRow(t))&&(o=e.indexOf(t))>-1)&&o},RowManager.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach(function(t){"row"==t.type&&o.push(t.getData(e||"data"))}),o},RowManager.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach(function(t){e.push(t.getComponent())}),e},RowManager.prototype.getDataCount=function(t){return this.getRows(t).length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var l=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=l}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t._setDataActual(e,!0)}).catch(function(t){})},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this,l=this.table,s=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||s.indexOf(t)<s.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:t,skipStage:e,renderInPosition:o}));switch(n.table.modExists("edit")&&n.table.modules.edit.cancelEdit(),t||(t="all"),l.options.selectable&&!l.options.selectablePersistence&&l.modExists("selectRow")&&l.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:l.modExists("filter")?n.setActiveRows(l.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":e?e=!1:l.modExists("sort")&&l.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&l.modules.frozenRows.isFrozen()&&(l.modules.frozenRows.getDisplayIndex()||l.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:l.options.groupBy&&l.modExists("groupRows")&&(l.modules.groupRows.getDisplayIndex()||l.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:l.options.dataTree&&l.modExists("dataTree")&&(l.modules.dataTree.getDisplayIndex()||l.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&l.modules.dataTree.setDisplayIndex(i)),l.options.pagination&&l.modExists("page")&&!o&&"local"==l.modules.page.getMode()&&l.modules.page.reset();case"page":e?e=!1:l.options.pagination&&l.modExists("page")&&(l.modules.page.getDisplayIndex()||l.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.page.getDisplayIndex(),"local"==l.modules.page.getMode()&&l.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(l.modules.page.getRows(this.getDisplayRows(i-1)),i))&&l.modules.page.setDisplayIndex(i))}Tabulator.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():("all"===t&&this.table.options.virtualDomHoz&&this.table.vdomHoz.dataChange(),n.renderTable(),l.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),l.modExists("columnCalcs")&&l.modules.columnCalcs.recalc(this.activeRows)},RowManager.prototype.regenerateRowNumbers=function(){var t=this;this.rowNumColumn&&this.activeRows.forEach(function(e){var o=e.getCell(t.rowNumColumn);o&&o._generateContents()})},RowManager.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},RowManager.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},RowManager.prototype.getNextDisplayIndex=function(){return this.displayRows.length},RowManager.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},RowManager.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},RowManager.prototype.getVisibleRows=function(t){var e=this.element.scrollTop,o=this.element.clientHeight+e,i=!1,n=0,l=0,s=this.getDisplayRows();if(t){this.getDisplayRows();for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a])if(i){if(!(o-s[a].getElement().offsetTop>=0))break;l=a}else if(e-s[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-s[a].getElement().offsetTop>=0))break;l=a}}else n=this.vDomTop,l=this.vDomBottom;return s.slice(n,l+1)},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;case"selected":e=this.table.modules.selectRow.selectedRows;break;default:e=this.rows}return e},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,l=this.getDisplayRows(),s=this.vDomTop;s<=this.vDomBottom;s++)if(l[s]){var a=e-l[s].getElement().offsetTop;if(!(!1===i||Math.abs(a)<i))break;i=a,o=s}t&&t(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),t&&t()},RowManager.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},RowManager.prototype.getRenderMode=function(){return this.renderMode},RowManager.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},RowManager.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},RowManager.prototype.checkClassicModeGroupHeaderWidth=function(){var t=this,e=this.tableElement,o=!0;t.getDisplayRows().forEach(function(i,n){t.styleRow(i,n),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)}),e.style.minWidth=o?t.table.columnManager.getWidth()+"px":""},RowManager.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"},RowManager.prototype._clearVirtualDom=function(){var t=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);t.firstChild;)t.removeChild(t.firstChild);t.style.paddingTop="",t.style.paddingBottom="",t.style.minWidth="",t.style.minHeight="",t.style.display="",t.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},RowManager.prototype.styleRow=function(t,e){var o=t.getElement();e%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},RowManager.prototype._virtualRenderFill=function(t,e,o){var i=this,n=i.tableElement,l=i.element,s=0,a=0,r=0,u=0,h=!0,c=i.getDisplayRows();if(t=t||0,o=o||0,t){for(;n.firstChild;)n.removeChild(n.firstChild);var d=(i.displayRowsCount-t+1)*i.vDomRowHeight;d<i.height&&(t-=Math.ceil((i.height-d)/i.vDomRowHeight))<0&&(t=0),s=Math.min(Math.max(Math.floor(i.vDomWindowBuffer/i.vDomRowHeight),i.vDomWindowMinMarginRows),t),t-=s}else i._clearVirtualDom();if(i.displayRowsCount&&Tabulator.prototype.helpers.elVisible(i.element)){for(i.vDomTop=t,i.vDomBottom=t-1;(a<=i.height+i.vDomWindowBuffer||u<i.vDomWindowMinTotalRows)&&i.vDomBottom<i.displayRowsCount-1;){var p=i.vDomBottom+1,m=c[p],f=0;i.styleRow(m,p),n.appendChild(m.getElement()),m.initialize(),m.heightInitialized||m.normalizeHeight(!0),f=m.getHeight(),u<s?r+=f:a+=f,f>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*f),"group"!==m.type&&(h=!1),i.vDomBottom++,u++}t?(i.vDomTopPad=e?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-r,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-r,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+r)/u),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=r+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",e&&(this.scrollTop=i.vDomTopPad+r+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,l.scrollTop=this.scrollTop,n.style.minWidth=h?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.insertBefore(l.getElement(),o.firstChild),l.initialized&&l.heightInitialized||(this.vDomTopNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomTopPad-=s,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=s,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e<this.vDomMaxRenderChain&&this.vDomTop&&t>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.appendChild(l.getElement()),l.initialized&&l.heightInitialized||(this.vDomBottomNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomBottomPad-=s,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=s,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),
-e<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&t>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},RowManager.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=Math.floor(this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=Math.floor(this.table.element.clientHeight)-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||Math.floor(e)==Math.floor(this.element.clientHeight)||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize(!0)})},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var VDomHoz=function(t){this.table=t,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()};VDomHoz.prototype.compatabilityCheck=function(){var t=this.table.options,e=!0;return"fitDataTable"==t.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),e=!1),t.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),e=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),e=!1),t.columns&&t.columns.find(function(t){return t.frozen})&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),e=!1),e||(t.virtualDomHoz=!1),e},VDomHoz.prototype.initialize=function(){var t=this;this.holderEl.addEventListener("scroll",function(){var e=t.holderEl.scrollLeft;t.scrollLeft!=e&&(t.scrollLeft=e,t.scroll(e-(t.vDomScrollPosLeft+t.window)))})},VDomHoz.prototype.deinitialize=function(){this.initialized=!1},VDomHoz.prototype.clear=function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0},VDomHoz.prototype.dataChange=function(){var t,e,o,i=!1,n=0,l=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach(function(t){!t.definition.width&&t.visible&&(i=!0)}),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,this.table.options.groupBy?(t=this.table.modules.groupRows.getGroups(!1)[0],e=t.getRows(!1)[0]):e=this.table.rowManager.getDisplayRows()[0],e)){o=e.getElement(),e.generateCells(),this.element.appendChild(o);for(var l=0;l<e.cells.length;l++){var s=e.cells[l];if(o.appendChild(s.getElement()),s.column.reinitializeWidth(),(n+=s.column.getWidth())>this.vDomScrollPosRight)break}for(o.parentNode.removeChild(o),this.fitDataColAvg=Math.floor(n/(l+1)),l;l<this.table.columnManager.columnsByIndex.length;l++)this.table.columnManager.columnsByIndex[l].setWidth(this.fitDataColAvg);this.reinitialize(!1,!0)}}else"fitColumns"===this.table.options.layout&&(this.table.modules.layout.layout(),this.table.vdomHoz.reinitialize(!1,!0))},VDomHoz.prototype.fitDataLayoutOverride=function(){for(var t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()},VDomHoz.prototype.reinitialize=function(t,e){var o=this,i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!t||this.initialized){this.clear(),this.scrollLeft=this.holderEl.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window;var n=0;this.table.columnManager.columnsByIndex.forEach(function(t){var e={};if(t.visible){var i=t.getWidth();e.leftPos=n,e.rightPos=n+i,n+i>o.vDomScrollPosLeft&&n<o.vDomScrollPosRight?(-1==o.leftCol&&(o.leftCol=o.columns.length,o.vDomPadLeft=n),o.rightCol=o.columns.length):-1!==o.leftCol&&(o.vDomPadRight+=i),o.columns.push(t),t.modules.vdomHoz=e,n+=i}}),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.element.style.paddingRight=this.vDomPadRight+"px",this.initialized=!0,e||t&&!this.reinitChanged(i)||this.renitializeRows(),this.holderEl.scrollLeft=this.scrollLeft}},VDomHoz.prototype.reinitChanged=function(t){var e=this,o=!0;return t.cols.length!==this.columns.length||t.leftCol!==this.leftCol||t.rightCol!==this.rightCol||(t.cols.forEach(function(t,i){t!==e.columns[i]&&(o=!1)}),!o)},VDomHoz.prototype.renitializeRows=function(){var t=this;this.table.rowManager.getVisibleRows().forEach(function(e){t.reinitializeRow(e,!0)})},VDomHoz.prototype.scroll=function(t){this.vDomScrollPosLeft+=t,this.vDomScrollPosRight+=t,t>.8*this.holderEl.clientWidth?this.reinitialize():t>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())},VDomHoz.prototype.colPositionAdjust=function(t,e,o){for(var i=t;i<e;i++){var n=this.columns[i];n.modules.vdomHoz.leftPos-=o,n.modules.vdomHoz.rightPos-=o}},VDomHoz.prototype.addColRight=function(){var t,e,o,i=this.columns[this.rightCol+1];i&&i.modules.vdomHoz.leftPos<=this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),t.forEach(function(t){if("group"!==t.type){var e=t.getCell(i);t.getElement().appendChild(e.getElement()),e.cellRendered()}}),this.fitDataColAvg&&(e=i.getWidth())===this.fitDataColAvg&&(i.reinitializeWidth(),(o=e-i.getWidth())&&(i.modules.vdomHoz.rightPos-=o,this.colPositionAdjust(this.rightCol+1,this.columns.length,o))),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())},VDomHoz.prototype.addColLeft=function(){var t=this.columns[this.leftCol-1];if(t&&t.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){this.table.rowManager.getVisibleRows().forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().prepend(o.getElement()),o.cellRendered()}}),this.leftCol?this.vDomPadLeft-=t.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft()}},VDomHoz.prototype.removeColRight=function(t){var e,t=this.columns[this.rightCol];t&&t.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(e=this.table.rowManager.getVisibleRows(),t.modules.vdomHoz.visible=!1,e.forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}}),this.vDomPadRight+=t.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())},VDomHoz.prototype.removeColLeft=function(){var t,e=this.columns[this.leftCol];e&&e.modules.vdomHoz.rightPos<this.vDomScrollPosLeft&&(t=this.table.rowManager.getVisibleRows(),t.forEach(function(t){if("group"!==t.type){var o=t.getCell(e);t.getElement().removeChild(o.getElement())}}),this.vDomPadLeft+=e.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())},VDomHoz.prototype.initializeRow=function(t){if("group"!==t.type){t.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(var e=this.leftCol;e<=this.rightCol;e++){var o=this.columns[e];if(o.visible){var i=t.getCell(o);t.getElement().appendChild(i.getElement()),i.cellRendered()}}}},VDomHoz.prototype.reinitializeRow=function(t,e){if("group"!==t.type&&(e||!t.modules.vdomHoz||t.modules.vdomHoz.leftCol!==this.leftCol||t.modules.vdomHoz.rightCol!==this.rightCol)){for(var o=t.getElement();o.firstChild;)o.removeChild(o.firstChild);this.initializeRow(t)}};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(t,e){this._row.moveToRow(t,e)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)},RowComponent.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},RowComponent.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var Row=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(t)};Row.prototype.create=function(){this.created||(this.created=!0,this.generateElement())},Row.prototype.createElement=function(){var t=document.createElement("div");t.classList.add("tabulator-row"),t.setAttribute("role","row"),this.element=t},Row.prototype.getElement=function(){return this.create(),this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var t,e,o,i=this;this.createElement(),!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),(i.table.options.rowContextMenu||i.table.options.rowClickMenu)&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(t){i.table.options.rowMouseEnter(t,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(t){i.table.options.rowMouseLeave(t,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(t){i.table.options.rowMouseOver(t,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(t){i.table.options.rowMouseOut(t,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(t){i.table.options.rowMouseMove(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(this.create(),!this.initialized||t){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(t){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach(function(t){t.reinitialize(!0)})},Row.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(t){var o=t.getHeight();o>e&&(e=o)}),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach(function(t){t.setHeight()}),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(t){var e,o=this,i=this.element&&Tabulator.prototype.helpers.elVisible(this.element),n={};return new Promise(function(l,s){"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t;for(var a in e)o.data[a]=e[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in t){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(t){var n=o.getCell(t.getField());if(n){var l=t.getFieldValue(e);n.getValue()!=l&&(n.setValueProcessData(l),i&&n.cellRendered())}})}o.table.options.groupUpdateOnCellEdit&&o.table.options.groupBy&&o.table.modExists("groupRows")&&o.table.modules.groupRows.reassignRowToGroup(o.row),i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),i&&(o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0))),o.table.options.rowUpdated.call(o.table,o.getComponent()),o.table.options.dataChanged&&o.table.options.dataChanged.call(o.table,o.table.rowManager.getData()),l()})},Row.prototype.getData=function(t){return t&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,t):this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},Row.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t<this.cells.length-1)for(var o=t+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){e=i;break}}}return e},Row.prototype.findPrevEditableCell=function(t){var e=!1;if(t>0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},Row.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Row.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(n=t.getGroup().rows,(i=n.indexOf(t))&&(i=n[i-1])):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()})},Row.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.detatchModules=function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e<t;e++)this.cells[0].delete()},Row.prototype.wipe=function(){if(this.detatchModules(),this.deleteCells(),this.element){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.parentNode&&this.element.parentNode.removeChild(this.element)}this.element=!1,this.modules={}},Row.prototype.getGroup=function(){return this.modules.group||!1},Row.prototype.getComponent=function(){return this.component||(this.component=new RowComponent(this)),this.component};var CellComponent=function(t){this._cell=t};CellComponent.prototype.getValue=function(){return this._cell.getValue()},CellComponent.prototype.getOldValue=function(){return this._cell.getOldValue()},CellComponent.prototype.getInitialValue=function(){return this._cell.initialValue},CellComponent.prototype.getElement=function(){return this._cell.getElement()},CellComponent.prototype.getRow=function(){return this._cell.row.getComponent()},CellComponent.prototype.getData=function(){return this._cell.row.getData()},CellComponent.prototype.getField=function(){return this._cell.column.getField()},CellComponent.prototype.getColumn=function(){return this._cell.column.getComponent()},CellComponent.prototype.setValue=function(t,e){void 0===e&&(e=!0),this._cell.setValue(t,e)},CellComponent.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},CellComponent.prototype.restoreInitialValue=function(){this._cell.setValueActual(this._cell.initialValue)},CellComponent.prototype.edit=function(t){return this._cell.edit(t)},CellComponent.prototype.cancelEdit=function(){this._cell.cancelEdit()},CellComponent.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},CellComponent.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},CellComponent.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},CellComponent.prototype.validate=function(){return this._cell.validate()},CellComponent.prototype.clearValidation=function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},CellComponent.prototype.nav=function(){return this._cell.nav()},CellComponent.prototype.checkHeight=function(){this._cell.checkHeight()},CellComponent.prototype.getTable=function(){return this._cell.table},CellComponent.prototype._getSelf=function(){return this._cell};var Cell=function(t,e){this.table=t.table,this.column=t,this.row=e,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()};Cell.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value},Cell.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},Cell.prototype._configureCell=function(){var t=this,e=t.column.cellEvents,o=t.element,i=this.column.getField(),n={top:"flex-start",bottom:"flex-end",middle:"center"},l={left:"flex-start",right:"flex-end",center:"center"};if(o.style.textAlign=t.column.hozAlign,t.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems=n[t.column.vertAlign]||"",t.column.hozAlign&&(o.style.justifyContent=l[t.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),t.column.definition.cssClass){t.column.definition.cssClass.split(" ").forEach(function(t){o.classList.add(t)})}"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",function(e){t._generateTooltip()}),t._bindClickEvents(e),t._bindTouchEvents(e),t._bindMouseEvents(e),t.column.modules.edit&&t.table.modules.edit.bindEditor(t),t.column.definition.rowHandle&&!1!==t.table.options.movableRows&&t.table.modExists("moveRow")&&t.table.modules.moveRow.initializeCell(t),t.column.visible||t.hide()},Cell.prototype._bindClickEvents=function(t){var e=this,o=e.element;(t.cellClick||e.table.options.cellClick)&&o.addEventListener("click",function(o){var i=e.getComponent();t.cellClick&&t.cellClick.call(e.table,o,i),e.table.options.cellClick&&e.table.options.cellClick.call(e.table,o,i)}),t.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",function(o){var i=e.getComponent();t.cellDblClick&&t.cellDblClick.call(e.table,o,i),e.table.options.cellDblClick&&e.table.options.cellDblClick.call(e.table,o,i)}):o.addEventListener("dblclick",function(t){if(!e.table.modExists("edit")||e.table.modules.edit.currentCell!==e){t.preventDefault();try{if(document.selection){var o=document.body.createTextRange();o.moveToElementText(e.element),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(e.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(t){}}}),(t.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",function(o){var i=e.getComponent();t.cellContext&&t.cellContext.call(e.table,o,i),e.table.options.cellContext&&e.table.options.cellContext.call(e.table,o,i)})},Cell.prototype._bindMouseEvents=function(t){var e=this,o=e.element;(t.cellMouseEnter||e.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",function(o){var i=e.getComponent();t.cellMouseEnter&&t.cellMouseEnter.call(e.table,o,i),e.table.options.cellMouseEnter&&e.table.options.cellMouseEnter.call(e.table,o,i)}),(t.cellMouseLeave||e.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",function(o){var i=e.getComponent();t.cellMouseLeave&&t.cellMouseLeave.call(e.table,o,i),e.table.options.cellMouseLeave&&e.table.options.cellMouseLeave.call(e.table,o,i)}),(t.cellMouseOver||e.table.options.cellMouseOver)&&o.addEventListener("mouseover",function(o){var i=e.getComponent();t.cellMouseOver&&t.cellMouseOver.call(e.table,o,i),e.table.options.cellMouseOver&&e.table.options.cellMouseOver.call(e.table,o,i)}),(t.cellMouseOut||e.table.options.cellMouseOut)&&o.addEventListener("mouseout",function(o){var i=e.getComponent();t.cellMouseOut&&t.cellMouseOut.call(e.table,o,i),e.table.options.cellMouseOut&&e.table.options.cellMouseOut.call(e.table,o,i)}),(t.cellMouseMove||e.table.options.cellMouseMove)&&o.addEventListener("mousemove",function(o){var i=e.getComponent();t.cellMouseMove&&t.cellMouseMove.call(e.table,o,i),e.table.options.cellMouseMove&&e.table.options.cellMouseMove.call(e.table,o,i)})},Cell.prototype._bindTouchEvents=function(t){var e,o,i,n=this,l=n.element;(t.cellTap||this.table.options.cellTap)&&(i=!1,l.addEventListener("touchstart",function(t){i=!0},{passive:!0}),l.addEventListener("touchend",function(e){if(i){var o=n.getComponent();t.cellTap&&t.cellTap.call(n.table,e,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,e,o)}i=!1})),(t.cellDblTap||this.table.options.cellDblTap)&&(e=null,l.addEventListener("touchend",function(o){if(e){clearTimeout(e),e=null;var i=n.getComponent();t.cellDblTap&&t.cellDblTap.call(n.table,o,i),n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else e=setTimeout(function(){clearTimeout(e),e=null},300)})),(t.cellTapHold||this.table.options.cellTapHold)&&(o=null,l.addEventListener("touchstart",function(e){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,i=!1;var l=n.getComponent();t.cellTapHold&&t.cellTapHold.call(n.table,e,l),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,e,l)},1e3)},{passive:!0}),l.addEventListener("touchend",function(t){
-clearTimeout(o),o=null}))},Cell.prototype._generateContents=function(){var t;switch(t=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value,void 0===t?"undefined":_typeof(t)){case"object":if(t instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(t)}else this.element.innerHTML="",null!=t&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",t);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=t}},Cell.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},Cell.prototype._generateTooltip=function(){var t=this.column.tooltip;t?(!0===t?t=this.value:"function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),void 0===t&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")},Cell.prototype.getElement=function(){return this.loaded||(this.loaded=!0,this.layoutElement()),this.element},Cell.prototype.getValue=function(){return this.value},Cell.prototype.getOldValue=function(){return this.oldValue},Cell.prototype.setValue=function(t,e){var o,i=this.setValueProcessData(t,e);i&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))},Cell.prototype.setValueProcessData=function(t,e){var o=!1;return this.value!=t&&(o=!0,e&&this.column.modules.mutate&&(t=this.table.modules.mutator.transformCell(this,t))),this.setValueActual(t),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},Cell.prototype.setValueActual=function(t){this.oldValue=this.value,this.value=t,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,t),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()},Cell.prototype.layoutElement=function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},Cell.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},Cell.prototype.clearWidth=function(){this.width="",this.element.style.width=""},Cell.prototype.getWidth=function(){return this.width||this.element.offsetWidth},Cell.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},Cell.prototype.checkHeight=function(){this.row.reinitializeHeight()},Cell.prototype.clearHeight=function(){this.element.style.height="",this.height=null},Cell.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},Cell.prototype.getHeight=function(){return this.height||this.element.offsetHeight},Cell.prototype.show=function(){this.element.style.display=this.column.vertAlign?"inline-flex":""},Cell.prototype.hide=function(){this.element.style.display="none"},Cell.prototype.edit=function(t){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,t)},Cell.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var t=this.table.modules.edit.getCurrentCell();t&&t._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},Cell.prototype.validate=function(){if(this.column.modules.validate&&this.table.modExists("validate",!0)){return!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}return!0},Cell.prototype.delete=function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},Cell.prototype.nav=function(){var t=this,e=!1,o=this.row.getCellIndex(this);return{next:function(){var e,o=this.right();return!!o||!(!(e=t.table.rowManager.nextDisplayRow(t.row,!0))||!(o=e.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var e,o=this.left();return!!o||!(!(e=t.table.rowManager.prevDisplayRow(t.row,!0))||!(o=e.findPrevEditableCell(e.cells.length)))&&(o.edit(),!0)},left:function(){return!!(e=t.row.findPrevEditableCell(o))&&(e.edit(),!0)},right:function(){return!!(e=t.row.findNextEditableCell(o))&&(e.edit(),!0)},up:function(){var e=t.table.rowManager.prevDisplayRow(t.row,!0);e&&e.cells[o].edit()},down:function(){var e=t.table.rowManager.nextDisplayRow(t.row,!0);e&&e.cells[o].edit()}}},Cell.prototype.getIndex=function(){this.row.getCellIndex(this)},Cell.prototype.getComponent=function(){return this.component||(this.component=new CellComponent(this)),this.component};var FooterManager=function(t){this.table=t,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};FooterManager.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-footer"),t},FooterManager.prototype._initialize=function(t){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},FooterManager.prototype.getElement=function(){return this.element},FooterManager.prototype.append=function(t,e){this.activate(e),this.element.appendChild(t),this.table.rowManager.adjustTableSize()},FooterManager.prototype.prepend=function(t,e){this.activate(e),this.element.insertBefore(t,this.element.firstChild),this.table.rowManager.adjustTableSize()},FooterManager.prototype.remove=function(t){t.parentNode.removeChild(t),this.deactivate()},FooterManager.prototype.deactivate=function(t){this.element.firstChild&&!t||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},FooterManager.prototype.activate=function(t){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),t&&this.links.push(t)},FooterManager.prototype.redraw=function(){this.links.forEach(function(t){t.footerRedraw()})};var Tabulator=function t(e,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(e)&&(this.initializeOptions(o||{}),this._create()),t.prototype.comms.register(this)};Tabulator.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"<div class='tabulator-arrow'></div>",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(t,e){return e},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(t,e){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:!1,dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},Tabulator.prototype.initializeOptions=function(t){if(!1!==t.invalidOptionWarnings)for(var e in t)void 0===this.defaultOptions[e]&&console.warn("Invalid table constructor option:",e);for(var e in this.defaultOptions)e in t?this.options[e]=t[e]:Array.isArray(this.defaultOptions[e])?this.options[e]=Object.assign([],this.defaultOptions[e]):"object"===_typeof(this.defaultOptions[e])&&null!==this.defaultOptions[e]?this.options[e]=Object.assign({},this.defaultOptions[e]):this.options[e]=this.defaultOptions[e]},Tabulator.prototype.initializeElement=function(t){return"undefined"!=typeof HTMLElement&&t instanceof HTMLElement?(this.element=t,!0):"string"==typeof t?(this.element=document.querySelector(t),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",t),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",t),!1)},Tabulator.prototype.rtlCheck=function(){var t=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==t.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}},Tabulator.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.dataEdited&&(console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"),this.options.dataChanged=this.options.dataEdited),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},Tabulator.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},Tabulator.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new ColumnManager(this),this.rowManager=new RowManager(this),this.footerManager=new FooterManager(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new VDomHoz(this)),this._buildElement(),this._loadInitialData()},Tabulator.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},Tabulator.prototype._buildElement=function(){var t=this,e=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",e.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",e.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",e.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),o.localize.initialize(),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(var n in i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var l=document.createElement("div");l.classList.add("tabulator-placeholder");var s=document.createElement("span");s.innerHTML=i.placeholder,l.appendChild(s),i.placeholder=l}if(e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.columns&&(i.columns=o.persistence.load("columns",i.columns)),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var a=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(a=o.persistence.load("sort"))&&i.initialSort&&(a=i.initialSort):i.initialSort&&(a=i.initialSort),o.sort.setSort(a)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(r=o.persistence.load("filter"))&&i.initialFilter&&(r=i.initialFilter):i.initialFilter&&(r=i.initialFilter),o.filter.setFilter(r)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach(function(e){var i=t.columnManager.findColumn(e.field);if(!i)return console.warn("Column Filter Error - No matching column found:",e.field),!1;o.filter.setHeaderFilterValue(i,e.value)}),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},Tabulator.prototype._loadInitialData=function(){var t=this;if(t.options.pagination&&t.modExists("page"))if(t.modules.page.reset(!0,!0),"local"==t.options.pagination){if(t.options.data.length)t.rowManager.setData(t.options.data,!1,!0);else{if((t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax"))return void t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)});t.rowManager.setData(t.options.data,!1,!0)}t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}else t.options.ajaxURL?t.modules.page.setPage(t.options.paginationInitialPage).then(function(){}).catch(function(){}):t.rowManager.setData([],!1,!0);else t.options.data.length?t.rowManager.setData(t.options.data):(t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax")?t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){}):t.rowManager.setData(t.options.data,!1,!0)},Tabulator.prototype.destroy=function(){var t=this.element;for(Tabulator.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach(function(t){t.wipe()}),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();t.firstChild;)t.removeChild(t.firstChild);t.classList.remove("tabulator")},Tabulator.prototype._detectBrowser=function(){var t=navigator.userAgent||navigator.vendor||window.opera;t.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",function(t){var l,s=n.files[0],a=new FileReader;a.readAsText(s),a.onload=function(t){try{l=JSON.parse(a.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e.setData(l).then(function(t){o(t)}).catch(function(t){o(t)})},a.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},Tabulator.prototype._setData=function(t,e,o,i,n){var l=this;return"string"!=typeof t?t?l.rowManager.setData(t,i,n):l.modExists("ajax")&&(l.modules.ajax.getUrl||l.options.ajaxURLGenerator)?"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n):l.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?l.rowManager.setData(JSON.parse(t),i,n):l.modExists("ajax",!0)?(e&&l.modules.ajax.setParams(e),o&&l.modules.ajax.setConfig(o),l.modules.ajax.setUrl(t),"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},Tabulator.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,l){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,l){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(l,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||l(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||l(i)})}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){function n(){++s==t.length&&a&&(l.rowManager.reRenderInPosition(),o())}var l=e,s=0,a=0,r=[];Array.isArray(t)||(t=[t]),t.forEach(function(t){var o=e.rowManager.findRow(t,!0);o?r.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),n())}),r.sort(function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1}),r.forEach(function(t){t.delete().then(function(){a++,n()}).catch(function(t){n(),i(t)})})})},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,l){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(l.getComponent())}).catch(function(t){n(t)}):l=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){i(l.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))})},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.rowManager.findRow(t);s?i.rowManager.scrollToRow(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching row found:",t),l("Scroll Error - No matching row found"))})},Tabulator.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},
-Tabulator.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,s).then(function(t){n(t.getComponent())}).catch(function(t){l(t)})})},Tabulator.prototype.deleteColumn=function(t){var e=this;return new Promise(function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Column Delete Error - No matching column found:",t),i())})},Tabulator.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise(function(i,n){var l=o.columnManager.findColumn(t);l?l.updateDefinition(e).then(function(t){i(t)}).catch(function(t){n(t)}):(console.warn("Column Update Error - No matching column found:",t),n())})},Tabulator.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(t);s?i.columnManager.scrollToColumn(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching column found:",t),l("Scroll Error - No matching column found"))})},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.validate.clearValidation(t._getSelf())}))},Tabulator.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach(function(t){var o=t.validate();!0!==o&&(e=e.concat(o))}),!e.length||e},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise(function(t,e){e()})},Tabulator.prototype.setPageToRow=function(t){var e=this;return new Promise(function(o,i){e.options.pagination&&e.modExists("page")?(t=e.rowManager.findRow(t),t?e.modules.page.setPageToRow(t).then(function(){o()}).catch(function(){i()}):i()):i()})},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then(function(){}).catch(function(){})},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupValues=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.edit.clearEdited(t._getSelf())}))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},Tabulator.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){this.modules={};for(var t in Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Object.assign(Array.isArray(t)?[]:{},t);for(var o in t)null!=t[o]&&"object"===_typeof(t[o])&&(t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]));return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if(o=document.querySelectorAll(t),o.length)for(var l=0;l<o.length;l++)(i=Tabulator.prototype.comms.matchElement(o[l]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&t instanceof HTMLElement||t instanceof Tabulator?(i=Tabulator.prototype.comms.matchElement(t))&&n.push(i):Array.isArray(t)?t.forEach(function(t){n=n.concat(Tabulator.prototype.comms.lookupTable(t))}):e||console.warn("Table Connection Error - Invalid Selector",t);return n},matchElement:function(t){return Tabulator.prototype.comms.tables.find(function(e){return t instanceof Tabulator?e===t:e.element===t})}},Tabulator.prototype.findTable=function(t){var e=Tabulator.prototype.comms.lookupTable(t,!0);return!(Array.isArray(e)&&!e.length)&&e};var Layout=function(t){this.table=t,this.mode=null};Layout.prototype.initialize=function(t){this.modes[t]?this.mode=t:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+t),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},Layout.prototype.getMode=function(){return this.mode},Layout.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex)},Layout.prototype.modes={fitData:function(t){this.table.options.virtualDomHoz?this.table.vdomHoz.fitDataLayoutOverride():t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(t){var e=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,l=!1;t.forEach(function(t,i){t.widthFixed||t.reinitializeWidth(),(e.table.options.responsiveLayout?t.modules.responsive.visible:t.visible)&&(l=t),t.visible&&(o+=t.getWidth())}),l?(n=i-o+l.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(l.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?l.setWidth(n):l.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){function e(t){return"string"==typeof t?t.indexOf("%")>-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,l){function s(t){return n*(t.column.definition.widthGrow||1)}function a(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var r=[],u=0,h=0,c=0,d=0,p=0,m=[];return t.forEach(function(t,e){var o=l?a(t):s(t);t.column.minWidth>=o?r.push(t):(m.push(t),p+=l?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),r.length?(r.forEach(function(t){u+=l?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),h=i-u,c=p?Math.floor(h/p):h,d=h-c*p,d+=o(m,h,c,l)):(d=p?i-Math.floor(i/p)*p:i,m.forEach(function(t){t.width=l?a(t):s(t)})),d}var i=this,n=i.table.element.clientWidth,l=0,s=0,a=0,r=0,u=[],h=[],c=0,d=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),l+=n>i?n:i,t.definition.widthShrink&&(h.push({column:t,width:n>i?n:i}),c+=t.definition.widthShrink)):(u.push({column:t,width:0}),a+=t.definition.widthGrow||1))}),s=n-l,r=Math.floor(s/a);var p=o(u,s,r,!1);u.length&&p>0&&(u[u.length-1].width+=+p),u.forEach(function(t){s-=t.width}),d=Math.abs(p)+s,d>0&&c&&(p=o(h,d,Math.floor(d/c),!0)),h.length&&(h[h.length-1].width-=p),u.forEach(function(t){t.column.setWidth(t.width)}),h.forEach(function(t){t.column.setWidth(t.width)})}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={},this.langList={}};Localize.prototype.initialize=function(){this.langList=Tabulator.prototype.helpers.deepClone(this.langs)},Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langList.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langList.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langList[t]?this._setLangProp(this.langList[t],e):this.langList[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langList[t]){var i=t.split("-")[0];o.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=Tabulator.prototype.helpers.deepClone(o.langList.default||{}),"default"!=t&&e(o.langList[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langList[t]:this.lang},Localize.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e,o=this,i=[];return e=Tabulator.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},Comms.prototype.send=function(t,e,o,i){var n=this,l=this.getConnections(t);l.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!l.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms);
\ No newline at end of file
+/* Tabulator v4.9.3 (c) Oliver Folkerd */
+"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var l=e[n];if(t.call(i,l,n,e))return n;n++}return-1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n<o;){var l=e[n];if(t.call(i,l,n,e))return l;n++}}}),String.prototype.includes||(String.prototype.includes=function(t,e){if(t instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===e&&(e=0),-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),i=o.length>>>0;if(0===i)return!1;for(var n=0|e,l=Math.max(n>=0?n:i-Math.abs(n),0);l<i;){if(function(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}(o[l],t))return!0;l++}return!1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){if(null===t||void 0===t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!==n&&void 0!==n)for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(o[l]=n[l])}return o},writable:!0,configurable:!0});var ColumnManager=function(t){this.table=t,this.blockHozScrollEvent=!1,this.headersElement=this.createHeadersElement(),this.element=this.createHeaderElement(),this.rowManager=null,this.columns=[],this.columnsByIndex=[],this.columnsByField={},this.scrollLeft=0,this.element.insertBefore(this.headersElement,this.element.firstChild)};ColumnManager.prototype.createHeadersElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-headers"),t},ColumnManager.prototype.createHeaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-header"),this.table.options.headerVisible||t.classList.add("tabulator-header-hidden"),t},ColumnManager.prototype.initialize=function(){},ColumnManager.prototype.setRowManager=function(t){this.rowManager=t},ColumnManager.prototype.getElement=function(){return this.element},ColumnManager.prototype.getHeadersElement=function(){return this.headersElement},ColumnManager.prototype.scrollHorizontal=function(t){var e=0,o=this.element.scrollWidth-this.table.element.clientWidth;this.element.scrollLeft=t,t>o?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.scrollHorizontal()},ColumnManager.prototype.generateColumnsFromRowData=function(t){var e,o,i=[],n=this.table.options.autoColumnsDefinitions;if(t&&t.length){e=t[0];for(var l in e){var s={field:l,title:l},a=e[l];switch(void 0===a?"undefined":_typeof(a)){case"undefined":o="string";break;case"boolean":o="boolean";break;case"object":o=Array.isArray(a)?"array":"string";break;default:o=isNaN(a)||""===a?a.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)?"alphanum":"string":"number"}s.sorter=o,i.push(s)}if(n)switch(void 0===n?"undefined":_typeof(n)){case"function":this.table.options.columns=n.call(this.table,i);break;case"object":Array.isArray(n)?i.forEach(function(t){var e=n.find(function(e){return e.field===t.field});e&&Object.assign(t,e)}):i.forEach(function(t){n[t.field]&&Object.assign(t,n[t.field])}),this.table.options.columns=i}else this.table.options.columns=i;this.setColumns(this.table.options.columns)}},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField={},o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!1,!0),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),l=o?this.findColumnIndex(o):o;if(o&&l>-1){var s=this.columns.indexOf(o.getTopColumn()),a=o.getElement();e?(this.columns.splice(s,0,i),a.parentNode.insertBefore(n,a)):(this.columns.splice(s+1,0,i),a.parentNode.insertBefore(n,a.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement())),i.columnRendered();return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnHeaderVertAlign,e)}),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof Column)return t;if(t instanceof ColumnComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnsByFieldRoot=function(t){var e=this,o=[];return Object.keys(this.columnsByField).forEach(function(i){i.split(".")[0]===t&&o.push(e.columnsByField[i])}),o},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getFirstVisibileColumn=function(t){var t=this.columnsByIndex.findIndex(function(t){return t.visible});return t>-1&&this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},ColumnManager.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},ColumnManager.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},ColumnManager.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},ColumnManager.prototype.moveColumn=function(t,e,o){this.moveColumnActual(t,e,o),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),e.element.parentNode.insertBefore(t.element,e.element),o&&e.element.parentNode.insertBefore(e.element,t.element),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.moveColumnActual=function(t,e,o){t.parent.isGroup?this._moveColumnInArray(t.parent.columns,t,e,o):this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize(!0),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var l,s=this,a=t.indexOf(e),r=[];a>-1&&(t.splice(a,1),l=t.indexOf(o),l>-1?i&&(l+=1):l=a,t.splice(l,0,e),n&&(this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.rowManager.rows.forEach(function(t){r=r.concat(s.table.modules.dataTree.getTreeChildren(t,!1,!0))}),r=r.concat(this.table.rowManager.rows),r.forEach(function(t){if(t.cells.length){var e=t.cells.splice(a,1)[0];t.cells.splice(l,0,e)}})))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,l=0,s=0,a=t.getElement();return new Promise(function(r,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":s=-i.element.clientWidth/2;break;case"right":s=a.clientWidth-i.headersElement.clientWidth}if(!o&&(l=a.offsetLeft)>0&&l+a.offsetWidth<i.element.clientWidth)return!1;n=a.offsetLeft+s,n=Math.max(Math.min(n,i.table.rowManager.element.scrollWidth-i.table.rowManager.element.clientWidth),0),i.table.rowManager.scrollHorizontal(n),i.scrollHorizontal(n),r()}else console.warn("Scroll Error - Column not visible"),u("Scroll Error - Column not visible")})},ColumnManager.prototype.generateCells=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){o.push(e.generateCell(t))}),o},ColumnManager.prototype.getFlexBaseWidth=function(){var t=this,e=t.table.element.clientWidth,o=0;return t.rowManager.element.scrollHeight>t.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,l,s;i.visible&&(n=i.definition.width||0,l=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),s="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=s>l?s:l)}),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i._addColumn(t,e,o);i._reIndexColumns(),i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout",!0)&&i.table.modules.responsiveLayout.initialize(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.redraw(!0),"fitColumns"!=i.table.modules.layout.getMode()&&s.reinitializeWidth(),i._verticalAlignHeaders(),i.table.rowManager.reinitialize(),i.table.options.virtualDomHoz&&i.table.vdomHoz.reinitialize(),n(s)})},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this._verticalAlignHeaders(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),["fitColumns","fitDataStretch"].indexOf(this.table.modules.layout.getMode())>-1?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getVisibility=function(){return console.warn("getVisibility function is deprecated, you should now use the isVisible function"),this._column.visible},ColumnComponent.prototype.isVisible=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){return this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.getHeaderFilterValue=function(){if(this._column.table.modExists("filter",!0))return this._column.table.modules.filter.getHeaderFilterValue(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)},ColumnComponent.prototype.move=function(t,e){var o=this._column.table.columnManager.findColumn(t);o?this._column.table.columnManager.moveColumn(this._column,o,e):console.warn("Move Error - No matching column found:",o)},ColumnComponent.prototype.getNextColumn=function(){var t=this._column.nextColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.getPrevColumn=function(){var t=this._column.prevColumn();return!!t&&t.getComponent()},ColumnComponent.prototype.updateDefinition=function(t){return this._column.updateDefinition(t)},ColumnComponent.prototype.getWidth=function(){return this._column.getWidth()},ColumnComponent.prototype.setWidth=function(t){var e;return e=!0===t?this._column.reinitializeWidth(!0):this._column.setWidth(t),this._column.table.options.virtualDomHoz&&this._column.table.vdomHoz.reinitialize(!0),e},ColumnComponent.prototype.validate=function(){return this._column.validate()};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.titleHolderElement=!1,this.titleElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.vertAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.titleFormatterRendered=!1,this.setField(this.definition.field),this.table.options.invalidOptionWarnings&&this.checkDefinition(),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1},this.width=null,this.widthStyled="",this.maxWidth=null,this.maxWidthStyled="",this.minWidth=null,this.minWidthStyled="",this.widthFixed=!1,this.visible=!0,this.component=null,this._mapDepricatedFunctionality(),e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader(),this.bindModuleColumns()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.checkDefinition=function(){var t=this;Object.keys(this.definition).forEach(function(e){-1===t.defaultOptionList.indexOf(e)&&console.warn("Invalid column definition option in '"+(t.field||t.definition.title)+"' column:",e)})},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNestedData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},Column.prototype._mapDepricatedFunctionality=function(){void 0!==this.definition.hideInHtml&&(this.definition.htmlOutput=!this.definition.hideInHtml,console.warn("hideInHtml column definition property is deprecated, you should now use htmlOutput")),void 0!==this.definition.align&&(this.definition.hozAlign=this.definition.align,console.warn("align column definition property is deprecated, you should now use hozAlign")),void 0!==this.definition.downloadTitle&&(this.definition.titleDownload=this.definition.downloadTitle,console.warn("downloadTitle definition property is deprecated, you should now use titleDownload"))},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.table.modExists("persistence")&&t.table.modules.persistence.config.columns&&t.table.modules.persistence.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellMouseEnter&&(i.cellEvents.cellMouseEnter=n.cellMouseEnter),"function"==typeof n.cellMouseLeave&&(i.cellEvents.cellMouseLeave=n.cellMouseLeave),"function"==typeof n.cellMouseOver&&(i.cellEvents.cellMouseOver=n.cellMouseOver),"function"==typeof n.cellMouseOut&&(i.cellEvents.cellMouseOut=n.cellMouseOut),"function"==typeof n.cellMouseMove&&(i.cellEvents.cellMouseMove=n.cellMouseMove),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=this.definition,o=this.table;if(o.modExists("sort")&&o.modules.sort.initializeColumn(this,this.titleHolderElement),(e.headerContextMenu||e.headerClickMenu||e.headerMenu)&&o.modExists("menu")&&o.modules.menu.initializeColumnHeader(this),o.modExists("format")&&o.modules.format.initializeColumn(this),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(this),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(this),o.modExists("mutator")&&o.modules.mutator.initializeColumn(this),o.modExists("accessor")&&o.modules.accessor.initializeColumn(this),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(this),void 0!==e.visible&&(e.visible?this.show(!0):this.hide(!0)),e.cssClass){e.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}e.field&&this.element.setAttribute("tabulator-field",e.field),this.setMinWidth(void 0===e.minWidth?this.table.options.columnMinWidth:parseInt(e.minWidth)),(e.maxWidth||this.table.options.columnMaxWidth)&&!1!==e.maxWidth&&this.setMaxWidth(void 0===e.maxWidth?this.table.options.columnMaxWidth:parseInt(e.maxWidth)),this.reinitializeWidth(),this.tooltip=this.definition.tooltip||!1===this.definition.tooltip?this.definition.tooltip:this.table.options.tooltips,this.hozAlign=void 0===this.definition.hozAlign?this.table.options.cellHozAlign:this.definition.hozAlign,this.vertAlign=void 0===this.definition.vertAlign?this.table.options.cellVertAlign:this.definition.vertAlign,this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign},Column.prototype._buildColumnHeaderContent=function(){var t=(this.definition,this.table,document.createElement("div"));return t.classList.add("tabulator-col-content"),this.titleHolderElement=document.createElement("div"),this.titleHolderElement.classList.add("tabulator-col-title-holder"),t.appendChild(this.titleHolderElement),this.titleElement=this._buildColumnHeaderTitle(),this.titleHolderElement.appendChild(this.titleElement),t},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||"&nbsp;"}):n.value=e.title||"&nbsp;"}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||"&nbsp;")}):t._formatColumnHeaderTitle(i,e.title||"&nbsp;");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,l,s,a=this;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),s=function(t){a.titleFormatterRendered=t},l={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,l,n,s),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?t.appendChild(i):(t.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":t.innerHTML="";break;default:t.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){var t=this;if(this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.definition.cssClass){this.definition.cssClass.split(" ").forEach(function(e){t.element.classList.add(e)})}(this.definition.headerContextMenu||this.definition.headerMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeColumnHeader(this),this.titleElement.style.textAlign=this.definition.headerHozAlign||this.table.options.headerHozAlign,this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,l=0;l<n&&(o=o[i[l]],e=o,o);l++);return e},Column.prototype._setFlatData=function(t,e){this.field&&(t[this.field]=e)},Column.prototype._setNestedData=function(t,e){for(var o=t,i=this.fieldStructure,n=i.length,l=0;l<n;l++)if(l==n-1)o[i[l]]=e;else{if(!o[i[l]]){if(void 0===e)break;o[i[l]]={}}o=o[i[l]]}},Column.prototype.attachColumn=function(t){var e=this;e.groupElement?(e.columns.push(t),e.groupElement.appendChild(t.getElement())):console.warn("Column Warning - Column being attached to another column instead of column group")},Column.prototype.verticalAlign=function(t,e){var o=this.parent.isGroup?this.parent.getGroupElement().clientHeight:e||this.parent.getHeadersElement().clientHeight;this.element.style.height=o+"px",this.isGroup&&(this.groupElement.style.minHeight=o-this.contentElement.offsetHeight+"px"),this.isGroup||"top"===t||(this.element.style.paddingTop="bottom"===t?this.element.clientHeight-this.contentElement.offsetHeight+"px":(this.element.clientHeight-this.contentElement.offsetHeight)/2+"px"),this.columns.forEach(function(e){e.verticalAlign(t)})},Column.prototype.clearVerticalAlign=function(){this.element.style.paddingTop="",this.element.style.height="",this.element.style.minHeight="",this.groupElement.style.minHeight="",this.columns.forEach(function(t){t.clearVerticalAlign()})},Column.prototype.bindModuleColumns=function(){"rownum"==this.definition.formatter&&(this.table.rowManager.rowNumColumn=this)},Column.prototype.getElement=function(){return this.element},Column.prototype.getGroupElement=function(){return this.groupElement},Column.prototype.getField=function(){return this.field},Column.prototype.getFirstColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[0].getFirstColumn():this},Column.prototype.getLastColumn=function(){return this.isGroup?!!this.columns.length&&this.columns[this.columns.length-1].getLastColumn():this},Column.prototype.getColumns=function(){return this.columns},Column.prototype.getCells=function(){return this.cells},Column.prototype.getTopColumn=function(){return this.parent.isGroup?this.parent.getTopColumn():this},Column.prototype.getDefinition=function(t){var e=[];return this.isGroup&&t&&(this.columns.forEach(function(t){e.push(t.getDefinition(!0))}),this.definition.columns=e),this.definition},Column.prototype.checkColumnVisibility=function(){var t=!1;this.columns.forEach(function(e){e.visible&&(t=!0)}),t?(this.show(),this.parent.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1)):this.hide()},Column.prototype.show=function(t,e){this.visible||(this.visible=!0,this.element.style.display="",this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.show()}),this.isGroup||null!==this.width||this.reinitializeWidth(),this.table.columnManager._verticalAlignHeaders(),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!0),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},Column.prototype.hide=function(t,e){this.visible&&(this.visible=!1,this.element.style.display="none",this.table.columnManager._verticalAlignHeaders(),this.parent.isGroup&&this.parent.checkColumnVisibility(),this.cells.forEach(function(t){t.hide()}),this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns"),!e&&this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.updateColumnVisibility(this,this.visible),t||this.table.options.columnVisibilityChanged.call(this.table,this.getComponent(),!1),this.parent.isGroup&&this.parent.matchChildWidths(),!this.silent&&this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitialize())},Column.prototype.matchChildWidths=function(){var t=0;this.contentElement&&this.columns.length&&(this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())
+}),this.contentElement.style.maxWidth=t-1+"px",this.parent.isGroup&&this.parent.matchChildWidths())},Column.prototype.removeChild=function(t){var e=this.columns.indexOf(t);e>-1&&this.columns.splice(e,1),this.columns.length||this.delete()},Column.prototype.setWidth=function(t){this.widthFixed=!0,this.setWidthActual(t)},Column.prototype.setWidthActual=function(t){isNaN(t)&&(t=Math.floor(this.table.element.clientWidth/100*parseInt(t))),t=Math.max(this.minWidth,t),this.maxWidth&&(t=Math.min(this.maxWidth,t)),this.width=t,this.widthStyled=t?t+"px":"",this.element.style.width=this.widthStyled,this.isGroup||this.cells.forEach(function(t){t.setWidth()}),this.parent.isGroup&&this.parent.matchChildWidths(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},Column.prototype.checkCellHeights=function(){var t=[];this.cells.forEach(function(e){e.row.heightInitialized&&(null!==e.row.getElement().offsetParent?(t.push(e.row),e.row.clearCellHeight()):e.row.heightInitialized=!1)}),t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()})},Column.prototype.getWidth=function(){var t=0;return this.isGroup?this.columns.forEach(function(e){e.visible&&(t+=e.getWidth())}):t=this.width,t},Column.prototype.getHeight=function(){return this.element.offsetHeight},Column.prototype.setMinWidth=function(t){this.minWidth=t,this.minWidthStyled=t?t+"px":"",this.element.style.minWidth=this.minWidthStyled,this.cells.forEach(function(t){t.setMinWidth()})},Column.prototype.setMaxWidth=function(t){this.maxWidth=t,this.maxWidthStyled=t?t+"px":"",this.element.style.maxWidth=this.maxWidthStyled,this.cells.forEach(function(t){t.setMaxWidth()})},Column.prototype.delete=function(){var t=this;return new Promise(function(e,o){t.isGroup&&t.columns.forEach(function(t){t.delete()}),t.table.modExists("edit")&&t.table.modules.edit.currentCell.column===t&&t.table.modules.edit.cancelEdit();for(var i=t.cells.length,n=0;n<i;n++)t.cells[0].delete();t.element.parentNode&&t.element.parentNode.removeChild(t.element),t.element=!1,t.contentElement=!1,t.titleElement=!1,t.groupElement=!1,t.parent.isGroup&&t.parent.removeChild(t),t.table.columnManager.deregisterColumn(t),t.table.options.virtualDomHoz&&t.table.vdomHoz.reinitialize(!0),e()})},Column.prototype.columnRendered=function(){this.titleFormatterRendered&&this.titleFormatterRendered()},Column.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Column.prototype.generateCell=function(t){var e=this,o=new Cell(e,t);return this.cells.push(o),o},Column.prototype.nextColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._nextVisibleColumn(t+1)},Column.prototype._nextVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._nextVisibleColumn(t+1)},Column.prototype.prevColumn=function(){var t=this.table.columnManager.findColumnIndex(this);return t>-1&&this._prevVisibleColumn(t-1)},Column.prototype._prevVisibleColumn=function(t){var e=this.table.columnManager.getColumnByIndex(t);return!e||e.visible?e:this._prevVisibleColumn(t-1)},Column.prototype.reinitializeWidth=function(t){this.widthFixed=!1,void 0===this.definition.width||t||this.setWidth(this.definition.width),this.table.modExists("filter")&&this.table.modules.filter.hideHeaderFilterElements(),this.fitToData(),this.table.modExists("filter")&&this.table.modules.filter.showHeaderFilterElements()},Column.prototype.fitToData=function(){var t=this;this.widthFixed||(this.element.style.width="",t.cells.forEach(function(t){t.clearWidth()}));var e=this.element.offsetWidth;t.width&&this.widthFixed||(t.cells.forEach(function(t){var o=t.getWidth();o>e&&(e=o)}),e&&t.setWidthActual(e+1))},Column.prototype.updateDefinition=function(t){var e=this;return new Promise(function(o,i){var n;e.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):e.parent.isGroup?(console.warn("Column Update Error - The updateDefinition function is only available on ungrouped columns"),i("Column Update Error - The updateDefinition function is only available on columns, not column groups")):(n=Object.assign({},e.getDefinition()),n=Object.assign(n,t),e.table.columnManager.addColumn(n,!1,e).then(function(t){n.field==e.field&&(e.field=!1),e.delete().then(function(){o(t.getComponent())}).catch(function(t){i(t)})}).catch(function(t){i(t)}))})},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.defaultOptionList=["title","field","columns","visible","align","hozAlign","vertAlign","width","minWidth","maxWidth","widthGrow","widthShrink","resizable","frozen","responsive","tooltip","cssClass","rowHandle","hideInHtml","print","htmlOutput","sorter","sorterParams","formatter","formatterParams","variableHeight","editable","editor","editorParams","validator","mutator","mutatorParams","mutatorData","mutatorDataParams","mutatorEdit","mutatorEditParams","mutatorClipboard","mutatorClipboardParams","accessor","accessorParams","accessorData","accessorDataParams","accessorDownload","accessorDownloadParams","accessorClipboard","accessorClipboardParams","accessorPrint","accessorPrintParams","accessorHtmlOutput","accessorHtmlOutputParams","clipboard","download","downloadTitle","topCalc","topCalcParams","topCalcFormatter","topCalcFormatterParams","bottomCalc","bottomCalcParams","bottomCalcFormatter","bottomCalcFormatterParams","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellEditing","cellEdited","cellEditCancelled","headerSort","headerSortStartingDir","headerSortTristate","headerClick","headerDblClick","headerContext","headerTap","headerDblTap","headerTapHold","headerTooltip","headerVertical","headerHozAlign","editableTitle","titleFormatter","titleFormatterParams","headerFilter","headerFilterPlaceholder","headerFilterParams","headerFilterEmptyCheck","headerFilterFunc","headerFilterFuncParams","headerFilterLiveFilter","print","headerContextMenu","headerMenu","contextMenu","clickMenu","formatterPrint","formatterPrintParams","formatterClipboard","formatterClipboardParams","formatterHtmlOutput","formatterHtmlOutputParams","titlePrint","titleClipboard","titleHtmlOutput","titleDownload"],Column.prototype.getComponent=function(){return this.component||(this.component=new ColumnComponent(this)),this.component};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.heightFixer=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="virtual",this.fixedHeight=!1,this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[],this.rowNumColumn=!1,this.redrawBlock=!1,this.redrawBlockRestoreConfig=!1,this.redrawBlockRederInPosition=!1};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e),t.table.options.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e),t.table.options.scrollVertical(e)):t.scrollTop=e})},RowManager.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof Row)return t;if(t instanceof RowComponent)return t._getSelf()||!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement){return e.rows.find(function(e){return e.getElement()===t})||!1}return!1},RowManager.prototype.getRowFromDataObject=function(t){return this.rows.find(function(e){return e.data===t})||!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,l=this.getDisplayRows().indexOf(t),s=t.getElement(),a=0;return new Promise(function(t,r){if(l>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(s).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-l)>Math.abs(n.vDomBottom-l)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(s)&&(a=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&a<n.element.clientHeight-s.offsetHeight)return!1;switch(n.renderMode){case"classic":n.element.scrollTop=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top+n.element.scrollTop;break;case"virtual":n._virtualRenderFill(l,!0)}switch(e){case"middle":case"center":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop+(s.offsetTop-n.element.scrollTop)-(n.element.scrollHeight-s.offsetTop)/2:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight/2;break;case"bottom":n.element.scrollHeight-n.element.scrollTop==n.element.clientHeight?n.element.scrollTop=n.element.scrollTop-(n.element.scrollHeight-s.offsetTop)+s.offsetHeight:n.element.scrollTop=n.element.scrollTop-n.element.clientHeight+s.offsetHeight}t()}else console.warn("Scroll Error - Row not visible"),r("Scroll Error - Row not visible")})},RowManager.prototype.setData=function(t,e,o){var i=this,n=this;return new Promise(function(l,s){e&&i.getDisplayRows().length?n.table.options.pagination?n._setDataActual(t,!0):i.reRenderInPosition(function(){n._setDataActual(t)}):(i.table.options.autoColumns&&o&&i.table.columnManager.generateColumnsFromRowData(t),i.resetScroll(),i._setDataActual(t)),l()})},RowManager.prototype._setDataActual=function(t,e){var o=this;o.table.options.dataLoading.call(this.table,t),this._wipeElements(),this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.clear(),Array.isArray(t)?(this.table.modExists("selectRow")&&this.table.modules.selectRow.clearSelectionData(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchData(t),t.forEach(function(t,e){if(t&&"object"===(void 0===t?"undefined":_typeof(t))){var i=new Row(t,o);o.rows.push(i)}else console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:",t)}),o.refreshActiveData(!1,!1,e),o.table.options.dataLoaded.call(this.table,t)):console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ",void 0===t?"undefined":_typeof(t),"\nData:     ",t)},RowManager.prototype._wipeElements=function(){this.rows.forEach(function(t){t.wipe()}),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.wipe(),this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.adjustTableSize()},RowManager.prototype.deleteRow=function(t,e){var o=this.rows.indexOf(t),i=this.activeRows.indexOf(t);i>-1&&this.activeRows.splice(i,1),o>-1&&this.rows.splice(o,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),e||this.reRenderInPosition(),this.regenerateRowNumbers(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,l=0,s=[];return new Promise(function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),l=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var l=n.addRow(t,e,o,!0);s.push(l)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),i.regenerateRowNumbers(),a(s)})},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,l,s=t instanceof Row?t:new Row(t||{},this),a=this.findAddRowPos(e),r=-1;if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(l=this.getDisplayRows(),a?l.length?o=l[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],a=!1):l.length&&(o=l[l.length-1],a=!(l.length<this.table.modules.page.getPageSize()))),void 0!==o&&(o=this.findRow(o)),this.table.options.groupBy&&this.table.modExists("groupRows")){this.table.modules.groupRows.assignRowToGroup(s);var u=s.getGroup().rows;u.length>1&&(!o||o&&-1==u.indexOf(o)?a?u[0]!==s&&(o=u[0],this._moveRowInArray(s.getGroup().rows,s,o,!a)):u[u.length-1]!==s&&(o=u[u.length-1],this._moveRowInArray(s.getGroup().rows,s,o,!a)):this._moveRowInArray(s.getGroup().rows,s,o,!a))}return o&&(r=this.rows.indexOf(o)),o&&r>-1?(n=this.activeRows.indexOf(o),this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(a?e:e+1,0,s)}),n>-1&&this.activeRows.splice(a?n:n+1,0,s),this.rows.splice(a?r:r+1,0,s)):a?(this.displayRowIterator(function(t){t.unshift(s)}),this.activeRows.unshift(s),this.rows.unshift(s)):(this.displayRowIterator(function(t){t.push(s)}),this.activeRows.push(s),this.rows.push(s)),this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,s.getComponent()),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.getData()),i||this.reRenderInPosition(),s},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{posFrom:this.getRowPosition(t),posTo:this.getRowPosition(e),to:e,after:o}),this.moveRowActual(t,e,o),this.regenerateRowNumbers(),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){!o&&e instanceof Group&&(e=this.table.rowManager.prevDisplayRow(t)||e);var n=e.getGroup(),l=t.getGroup();n===l?this._moveRowInArray(n.rows,t,e,o):(l&&l.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,l,s,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),l=t.indexOf(o),l>-1?i?t.splice(l+1,0,e):t.splice(l,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){s=n<l?n:l,a=l>n?l:n+1;for(var r=s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o<this.displayRowsCount-1&&(i=this.getDisplayRows()[o+1]),!i||i instanceof Row&&"row"==i.type?i:this.nextDisplayRow(i,e)},RowManager.prototype.prevDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return o&&(i=this.getDisplayRows()[o-1]),!e||!i||i instanceof Row&&"row"==i.type?i:this.prevDisplayRow(i,e)},RowManager.prototype.findRowIndex=function(t,e){var o;return!!((t=this.findRow(t))&&(o=e.indexOf(t))>-1)&&o},RowManager.prototype.getData=function(t,e){var o=[];return this.getRows(t).forEach(function(t){"row"==t.type&&o.push(t.getData(e||"data"))}),o},RowManager.prototype.getComponents=function(t){var e=[];return this.getRows(t).forEach(function(t){e.push(t.getComponent())}),e},RowManager.prototype.getDataCount=function(t){return this.getRows(t).length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=this.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=this.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[this.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var l=this.table.modules.filter.getFilters(!0,!0);i[this.table.modules.page.paginationDataSentNames.filters]=l}this.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t._setDataActual(e,!0)}).catch(function(t){})},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1).then(function(){}).catch(function(){})):e.ajaxProgressiveLoad?t.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(t){var e=this.table,o=this.table.options,i=this.scrollLeft;o.ajaxSorting?("remote"==o.pagination||o.progressiveLoad)&&e.modExists("page")?(e.modules.page.reset(!0),e.modules.page.setPage(1).then(function(){}).catch(function(){})):o.ajaxProgressiveLoad?e.modules.ajax.loadData().then(function(){}).catch(function(){}):this._genRemoteRequest():this.refreshActiveData(t?"filter":"sort"),this.scrollHorizontal(i)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this,l=this.table,s=["all","filter","sort","display","freeze","group","tree","page"];if(this.redrawBlock)return void((!this.redrawBlockRestoreConfig||s.indexOf(t)<s.indexOf(this.redrawBlockRestoreConfig.stage))&&(this.redrawBlockRestoreConfig={stage:t,skipStage:e,renderInPosition:o}));switch(n.table.modExists("edit")&&n.table.modules.edit.cancelEdit(),t||(t="all"),l.options.selectable&&!l.options.selectablePersistence&&l.modExists("selectRow")&&l.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:l.modExists("filter")?n.setActiveRows(l.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":e?e=!1:l.modExists("sort")&&l.modules.sort.sort(this.activeRows),this.regenerateRowNumbers();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&l.modules.frozenRows.isFrozen()&&(l.modules.frozenRows.getDisplayIndex()||l.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:l.options.groupBy&&l.modExists("groupRows")&&(l.modules.groupRows.getDisplayIndex()||l.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:l.options.dataTree&&l.modExists("dataTree")&&(l.modules.dataTree.getDisplayIndex()||l.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&l.modules.dataTree.setDisplayIndex(i)),l.options.pagination&&l.modExists("page")&&!o&&"local"==l.modules.page.getMode()&&l.modules.page.reset();case"page":e?e=!1:l.options.pagination&&l.modExists("page")&&(l.modules.page.getDisplayIndex()||l.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.page.getDisplayIndex(),"local"==l.modules.page.getMode()&&l.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(l.modules.page.getRows(this.getDisplayRows(i-1)),i))&&l.modules.page.setDisplayIndex(i))}Tabulator.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():("all"===t&&this.table.options.virtualDomHoz&&this.table.vdomHoz.dataChange(),n.renderTable(),l.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),l.modExists("columnCalcs")&&l.modules.columnCalcs.recalc(this.activeRows)},RowManager.prototype.regenerateRowNumbers=function(){var t=this;this.rowNumColumn&&this.activeRows.forEach(function(e){var o=e.getCell(t.rowNumColumn);o&&o._generateContents()})},RowManager.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},RowManager.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},RowManager.prototype.getNextDisplayIndex=function(){return this.displayRows.length},RowManager.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},RowManager.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},RowManager.prototype.getVisibleRows=function(t){var e=this.element.scrollTop,o=this.element.clientHeight+e,i=!1,n=0,l=0,s=this.getDisplayRows();if(t){this.getDisplayRows();for(var a=this.vDomTop;a<=this.vDomBottom;a++)if(s[a])if(i){if(!(o-s[a].getElement().offsetTop>=0))break;l=a}else if(e-s[a].getElement().offsetTop>=0)n=a;else{if(i=!0,!(o-s[a].getElement().offsetTop>=0))break;l=a}}else n=this.vDomTop,l=this.vDomBottom;return s.slice(n,l+1)},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(t){var e;switch(t){case"active":e=this.activeRows;break;case"display":e=this.table.rowManager.getDisplayRows();break;case"visible":e=this.getVisibleRows(!0);break;case"selected":e=this.table.modules.selectRow.selectedRows;break;default:e=this.rows}return e},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode())if(this.redrawBlock)t?t():this.redrawBlockRederInPosition=!0;else{for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,l=this.getDisplayRows(),s=this.vDomTop;s<=this.vDomBottom;s++)if(l[s]){var a=e-l[s].getElement().offsetTop;if(!(!1===i||Math.abs(a)<i))break;i=a,o=s}t&&t(),this._virtualRenderFill(!1===o?this.displayRowsCount-1:o,!0,i||0),this.scrollHorizontal(n)}else this.renderTable(),t&&t()},RowManager.prototype.setRenderMode=function(){this.table.options.virtualDom?(this.renderMode="virtual",this.table.element.clientHeight||this.table.options.height?this.fixedHeight=!0:this.fixedHeight=!1):this.renderMode="classic"},RowManager.prototype.getRenderMode=function(){return this.renderMode},RowManager.prototype.renderTable=function(){switch(this.table.options.renderStarted.call(this.table),this.element.scrollTop=0,this.renderMode){case"classic":this._simpleRender();break;case"virtual":this._virtualRenderFill()}this.firstRender&&(this.displayRowsCount?(this.firstRender=!1,this.table.modules.layout.layout()):this.renderEmptyScroll()),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.displayRowsCount||this.table.options.placeholder&&(this.table.options.placeholder.setAttribute("tabulator-render-mode",this.renderMode),this.getElement().appendChild(this.table.options.placeholder),this.table.options.placeholder.style.width=this.table.columnManager.getWidth()+"px"),this.table.options.renderComplete.call(this.table)},RowManager.prototype._simpleRender=function(){this._clearVirtualDom(),this.displayRowsCount?this.checkClassicModeGroupHeaderWidth():this.renderEmptyScroll()},RowManager.prototype.checkClassicModeGroupHeaderWidth=function(){var t=this,e=this.tableElement,o=!0;t.getDisplayRows().forEach(function(i,n){t.styleRow(i,n),e.appendChild(i.getElement()),i.initialize(!0),"group"!==i.type&&(o=!1)}),e.style.minWidth=o?t.table.columnManager.getWidth()+"px":""},RowManager.prototype.renderEmptyScroll=function(){this.table.options.placeholder?this.tableElement.style.display="none":this.tableElement.style.minWidth=this.table.columnManager.getWidth()+"px"},RowManager.prototype._clearVirtualDom=function(){var t=this.tableElement;for(this.table.options.placeholder&&this.table.options.placeholder.parentNode&&this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);t.firstChild;)t.removeChild(t.firstChild);t.style.paddingTop="",t.style.paddingBottom="",t.style.minWidth="",t.style.minHeight="",t.style.display="",t.style.visibility="",this.scrollTop=0,this.scrollLeft=0,this.vDomTop=0,this.vDomBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0},RowManager.prototype.styleRow=function(t,e){var o=t.getElement();e%2?(o.classList.add("tabulator-row-even"),o.classList.remove("tabulator-row-odd")):(o.classList.add("tabulator-row-odd"),o.classList.remove("tabulator-row-even"))},RowManager.prototype._virtualRenderFill=function(t,e,o){var i=this,n=i.tableElement,l=i.element,s=0,a=0,r=0,u=0,h=!0,c=i.getDisplayRows();if(t=t||0,o=o||0,t){for(;n.firstChild;)n.removeChild(n.firstChild);var d=(i.displayRowsCount-t+1)*i.vDomRowHeight;d<i.height&&(t-=Math.ceil((i.height-d)/i.vDomRowHeight))<0&&(t=0),s=Math.min(Math.max(Math.floor(i.vDomWindowBuffer/i.vDomRowHeight),i.vDomWindowMinMarginRows),t),t-=s}else i._clearVirtualDom();if(i.displayRowsCount&&Tabulator.prototype.helpers.elVisible(i.element)){for(i.vDomTop=t,i.vDomBottom=t-1;(a<=i.height+i.vDomWindowBuffer||u<i.vDomWindowMinTotalRows)&&i.vDomBottom<i.displayRowsCount-1;){var p=i.vDomBottom+1,m=c[p],f=0;i.styleRow(m,p),n.appendChild(m.getElement()),m.initialize(),m.heightInitialized||m.normalizeHeight(!0),f=m.getHeight(),u<s?r+=f:a+=f,f>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*f),"group"!==m.type&&(h=!1),i.vDomBottom++,u++}t?(i.vDomTopPad=e?i.vDomRowHeight*this.vDomTop+o:i.scrollTop-r,i.vDomBottomPad=i.vDomBottom==i.displayRowsCount-1?0:Math.max(i.vDomScrollHeight-i.vDomTopPad-a-r,0)):(this.vDomTopPad=0,i.vDomRowHeight=Math.floor((a+r)/u),i.vDomBottomPad=i.vDomRowHeight*(i.displayRowsCount-i.vDomBottom-1),i.vDomScrollHeight=r+a+i.vDomBottomPad-i.height),n.style.paddingTop=i.vDomTopPad+"px",n.style.paddingBottom=i.vDomBottomPad+"px",e&&(this.scrollTop=i.vDomTopPad+r+o-(this.element.scrollWidth>this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&e&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,l.scrollTop=this.scrollTop,n.style.minWidth=h?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll();this.fixedHeight||this.adjustTableSize()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),o<0&&(this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer?this._removeBottomRow(-o):this.vDomScrollPosBottom=this.scrollTop)):(e>=0&&(this.scrollTop>this.vDomWindowBuffer?this._removeTopRow(e):this.vDomScrollPosTop=this.scrollTop),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.insertBefore(l.getElement(),o.firstChild),l.initialized&&l.heightInitialized||(this.vDomTopNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomTopPad-=s,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=s,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e<this.vDomMaxRenderChain&&this.vDomTop&&t>=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom<this.displayRowsCount-1){var n=this.vDomBottom+1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),
+o.appendChild(l.getElement()),l.initialized&&l.heightInitialized||(this.vDomBottomNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomBottomPad-=s,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=s,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,l.getHeight()>this.vDomWindowBuffer&&(this.vDomWindowBuffer=2*l.getHeight()),e<this.vDomMaxRenderChain&&this.vDomBottom<this.displayRowsCount-1&&t>=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},RowManager.prototype.adjustTableSize=function(){var t,e=this.element.clientHeight;if("virtual"===this.renderMode){var o=Math.floor(this.columnManager.getElement().getBoundingClientRect().height+(this.table.footerManager&&this.table.footerManager.active&&!this.table.footerManager.external?this.table.footerManager.getElement().getBoundingClientRect().height:0));this.fixedHeight?(this.element.style.minHeight="calc(100% - "+o+"px)",this.element.style.height="calc(100% - "+o+"px)",this.element.style.maxHeight="calc(100% - "+o+"px)"):(this.element.style.height="",this.element.style.height=this.table.element.clientHeight-o+"px",this.element.scrollTop=this.scrollTop),this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height,this.fixedHeight||e==this.element.clientHeight||((t=this.table.modExists("resizeTable"))&&!this.table.modules.resizeTable.autoResize||!t)&&this.redraw()}},RowManager.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize(!0)})},RowManager.prototype.blockRedraw=function(){this.redrawBlock=!0,this.redrawBlockRestoreConfig=!1},RowManager.prototype.restoreRedraw=function(){this.redrawBlock=!1,this.redrawBlockRestoreConfig?(this.refreshActiveData(this.redrawBlockRestoreConfig.stage,this.redrawBlockRestoreConfig.skipStage,this.redrawBlockRestoreConfig.renderInPosition),this.redrawBlockRestoreConfig=!1):this.redrawBlockRederInPosition&&this.reRenderInPosition(),this.redrawBlockRederInPosition=!1},RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),this.table.tableWidth=this.table.element.clientWidth,t?this.renderTable():("classic"==this.renderMode?this.table.options.groupBy?this.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var VDomHoz=function(t){this.table=t,this.element=this.table.rowManager.tableElement,this.holderEl=this.table.rowManager.element,this.leftCol=0,this.rightCol=0,this.scrollLeft=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0,this.fitDataColAvg=0,this.window=200,this.initialized=!1,this.columns=[],this.compatabilityCheck()&&this.initialize()};VDomHoz.prototype.compatabilityCheck=function(){var t=this.table.options,e=!0;return"fitDataTable"==t.layout&&(console.warn("Horizontal Vitrual DOM is not compatible with fitDataTable layout mode"),e=!1),t.responsiveLayout&&(console.warn("Horizontal Vitrual DOM is not compatible with responsive columns"),e=!1),this.table.rtl&&(console.warn("Horizontal Vitrual DOM is not currently compatible with RTL text direction"),e=!1),t.columns&&t.columns.find(function(t){return t.frozen})&&(console.warn("Horizontal Vitrual DOM is not compatible with frozen columns"),e=!1),e||(t.virtualDomHoz=!1),e},VDomHoz.prototype.initialize=function(){var t=this;this.holderEl.addEventListener("scroll",function(){var e=t.holderEl.scrollLeft;t.scrollLeft!=e&&(t.scrollLeft=e,t.scroll(e-(t.vDomScrollPosLeft+t.window)))})},VDomHoz.prototype.deinitialize=function(){this.initialized=!1},VDomHoz.prototype.clear=function(){this.columns=[],this.leftCol=-1,this.rightCol=0,this.vDomScrollPosLeft=0,this.vDomScrollPosRight=0,this.vDomPadLeft=0,this.vDomPadRight=0},VDomHoz.prototype.dataChange=function(){var t,e,o,i=!1,n=0,l=0;if("fitData"===this.table.options.layout){if(this.table.columnManager.columnsByIndex.forEach(function(t){!t.definition.width&&t.visible&&(i=!0)}),i&&i&&this.table.rowManager.getDisplayRows().length&&(this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window,this.table.options.groupBy?(t=this.table.modules.groupRows.getGroups(!1)[0],e=t.getRows(!1)[0]):e=this.table.rowManager.getDisplayRows()[0],e)){o=e.getElement(),e.generateCells(),this.element.appendChild(o);for(var l=0;l<e.cells.length;l++){var s=e.cells[l];if(o.appendChild(s.getElement()),s.column.reinitializeWidth(),(n+=s.column.getWidth())>this.vDomScrollPosRight)break}for(o.parentNode.removeChild(o),this.fitDataColAvg=Math.floor(n/(l+1)),l;l<this.table.columnManager.columnsByIndex.length;l++)this.table.columnManager.columnsByIndex[l].setWidth(this.fitDataColAvg);this.reinitialize(!1,!0)}}else"fitColumns"===this.table.options.layout&&(this.table.modules.layout.layout(),this.table.vdomHoz.reinitialize(!1,!0))},VDomHoz.prototype.fitDataLayoutOverride=function(){for(var t=this.leftCol;t<=this.rightCol;t++)this.columns[t].reinitializeWidth()},VDomHoz.prototype.reinitialize=function(t,e){var o=this,i={cols:this.columns,leftCol:this.leftCol,rightCol:this.rightCol};if(!t||this.initialized){this.clear(),this.scrollLeft=this.holderEl.scrollLeft,this.vDomScrollPosLeft=this.scrollLeft-this.window,this.vDomScrollPosRight=this.scrollLeft+this.holderEl.clientWidth+this.window;var n=0;this.table.columnManager.columnsByIndex.forEach(function(t){var e={};if(t.visible){var i=t.getWidth();e.leftPos=n,e.rightPos=n+i,n+i>o.vDomScrollPosLeft&&n<o.vDomScrollPosRight?(-1==o.leftCol&&(o.leftCol=o.columns.length,o.vDomPadLeft=n),o.rightCol=o.columns.length):-1!==o.leftCol&&(o.vDomPadRight+=i),o.columns.push(t),t.modules.vdomHoz=e,n+=i}}),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.element.style.paddingRight=this.vDomPadRight+"px",this.initialized=!0,e||t&&!this.reinitChanged(i)||this.renitializeRows(),this.holderEl.scrollLeft=this.scrollLeft}},VDomHoz.prototype.reinitChanged=function(t){var e=this,o=!0;return t.cols.length!==this.columns.length||t.leftCol!==this.leftCol||t.rightCol!==this.rightCol||(t.cols.forEach(function(t,i){t!==e.columns[i]&&(o=!1)}),!o)},VDomHoz.prototype.renitializeRows=function(){var t=this;this.table.rowManager.getVisibleRows().forEach(function(e){t.reinitializeRow(e,!0)})},VDomHoz.prototype.scroll=function(t){this.vDomScrollPosLeft+=t,this.vDomScrollPosRight+=t,t>.8*this.holderEl.clientWidth?this.reinitialize():t>0?(this.addColRight(),this.removeColLeft()):(this.addColLeft(),this.removeColRight())},VDomHoz.prototype.colPositionAdjust=function(t,e,o){for(var i=t;i<e;i++){var n=this.columns[i];n.modules.vdomHoz.leftPos-=o,n.modules.vdomHoz.rightPos-=o}},VDomHoz.prototype.addColRight=function(){var t,e,o,i=this.columns[this.rightCol+1];i&&i.modules.vdomHoz.leftPos<=this.vDomScrollPosRight&&(t=this.table.rowManager.getVisibleRows(),t.forEach(function(t){if("group"!==t.type){var e=t.getCell(i);t.getElement().appendChild(e.getElement()),e.cellRendered()}}),this.fitDataColAvg&&(e=i.getWidth())===this.fitDataColAvg&&(i.reinitializeWidth(),(o=e-i.getWidth())&&(i.modules.vdomHoz.rightPos-=o,this.colPositionAdjust(this.rightCol+1,this.columns.length,o))),this.rightCol++,this.rightCol>=this.columns.length-1?this.vDomPadRight=0:this.vDomPadRight-=i.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.addColRight())},VDomHoz.prototype.addColLeft=function(){var t=this.columns[this.leftCol-1];if(t&&t.modules.vdomHoz.rightPos>=this.vDomScrollPosLeft){this.table.rowManager.getVisibleRows().forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().prepend(o.getElement()),o.cellRendered()}}),this.leftCol?this.vDomPadLeft-=t.getWidth():this.vDomPadLeft=0,this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol--,this.addColLeft()}},VDomHoz.prototype.removeColRight=function(t){var e,t=this.columns[this.rightCol];t&&t.modules.vdomHoz.leftPos>this.vDomScrollPosRight&&(e=this.table.rowManager.getVisibleRows(),t.modules.vdomHoz.visible=!1,e.forEach(function(e){if("group"!==e.type){var o=e.getCell(t);e.getElement().removeChild(o.getElement())}}),this.vDomPadRight+=t.getWidth(),this.element.style.paddingRight=this.vDomPadRight+"px",this.rightCol--,this.removeColRight())},VDomHoz.prototype.removeColLeft=function(){var t,e=this.columns[this.leftCol];e&&e.modules.vdomHoz.rightPos<this.vDomScrollPosLeft&&(t=this.table.rowManager.getVisibleRows(),t.forEach(function(t){if("group"!==t.type){var o=t.getCell(e);t.getElement().removeChild(o.getElement())}}),this.vDomPadLeft+=e.getWidth(),this.element.style.paddingLeft=this.vDomPadLeft+"px",this.leftCol++,this.removeColLeft())},VDomHoz.prototype.initializeRow=function(t){if("group"!==t.type){t.modules.vdomHoz={leftCol:this.leftCol,rightCol:this.rightCol};for(var e=this.leftCol;e<=this.rightCol;e++){var o=this.columns[e];if(o&&o.visible){var i=t.getCell(o);t.getElement().appendChild(i.getElement()),i.cellRendered()}}}},VDomHoz.prototype.reinitializeRow=function(t,e){if("group"!==t.type&&(e||!t.modules.vdomHoz||t.modules.vdomHoz.leftCol!==this.leftCol||t.modules.vdomHoz.rightCol!==this.rightCol)){for(var o=t.getElement();o.firstChild;)o.removeChild(o.firstChild);this.initializeRow(t)}};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.pageTo=function(){if(this._row.table.modExists("page",!0))return this._row.table.modules.page.setPageToRow(this._row)},RowComponent.prototype.move=function(t,e){this._row.moveToRow(t,e)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.validate=function(){return this._row.validate()},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.isFrozen=function(){if(this._row.table.modExists("frozenRows",!0)){return this._row.table.modules.frozenRows.rows.indexOf(this._row)>-1}return!1},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row,!0)},RowComponent.prototype.addTreeChild=function(t,e,o){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.addTreeChildRow(this._row,t,e,o)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){var t=this._row.nextRow();return t?t.getComponent():t},RowComponent.prototype.getPrevRow=function(){var t=this._row.prevRow();return t?t.getComponent():t};var Row=function(t,e){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"row";this.table=e.table,this.parent=e,this.data={},this.type=o,this.element=!1,this.modules={},this.cells=[],this.height=0,this.heightStyled="",this.manualHeight=!1,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.component=null,this.created=!1,this.setData(t)};Row.prototype.create=function(){this.created||(this.created=!0,this.generateElement())},Row.prototype.createElement=function(){var t=document.createElement("div");t.classList.add("tabulator-row"),t.setAttribute("role","row"),this.element=t},Row.prototype.getElement=function(){return this.create(),this.element},Row.prototype.detachElement=function(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},Row.prototype.generateElement=function(){var t,e,o,i=this;this.createElement(),!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),"collapse"===i.table.options.responsiveLayout&&i.table.modExists("responsiveLayout")&&i.table.modules.responsiveLayout.initializeRow(this),(i.table.options.rowContextMenu||i.table.options.rowClickMenu)&&this.table.modExists("menu")&&i.table.modules.menu.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowMouseEnter&&i.element.addEventListener("mouseenter",function(t){i.table.options.rowMouseEnter(t,i.getComponent())}),i.table.options.rowMouseLeave&&i.element.addEventListener("mouseleave",function(t){i.table.options.rowMouseLeave(t,i.getComponent())}),i.table.options.rowMouseOver&&i.element.addEventListener("mouseover",function(t){i.table.options.rowMouseOver(t,i.getComponent())}),i.table.options.rowMouseOut&&i.element.addEventListener("mouseout",function(t){i.table.options.rowMouseOut(t,i.getComponent())}),i.table.options.rowMouseMove&&i.element.addEventListener("mousemove",function(t){i.table.options.rowMouseMove(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0},{passive:!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)},{passive:!0}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(this.create(),!this.initialized||t){for(this.deleteCells();this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),this.table.options.virtualDomHoz&&this.table.vdomHoz.initialized?this.table.vdomHoz.initializeRow(this):this.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&this.normalizeHeight(),this.table.options.dataTree&&this.table.modExists("dataTree")&&this.table.modules.dataTree.layoutRow(this),"collapse"===this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout")&&this.table.modules.responsiveLayout.layoutRow(this),this.table.options.rowFormatter&&this.table.options.rowFormatter(this.getComponent()),this.table.options.resizableRows&&this.table.modExists("resizeRows")&&this.table.modules.resizeRows.initializeRow(this),this.initialized=!0}else this.table.options.virtualDomHoz&&this.table.vdomHoz.reinitializeRow(this)},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,this.element&&null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(t){this.initialized=!1,this.heightInitialized=!1,this.manualHeight||(this.height=0,this.heightStyled=""),this.element&&null!==this.element.offsetParent&&this.initialize(!0),this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.getTreeChildren(this,!1,!0).forEach(function(t){t.reinitialize(!0)})},Row.prototype.calcHeight=function(t){var e=0,o=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(t){var o=t.getHeight();o>e&&(e=o)}),this.height=t?Math.max(e,o):this.manualHeight?this.height:Math.max(e,o),this.heightStyled=this.height?this.height+"px":"",this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){this.cells.forEach(function(t){t.setHeight()}),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(t),this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.manualHeight=!0,this.height=t,this.heightStyled=t?t+"px":"",this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){this.table.modExists("mutator")&&(t=this.table.modules.mutator.transformRow(t,"data")),this.data=t,this.table.options.reactiveData&&this.table.modExists("reactiveData",!0)&&this.table.modules.reactiveData.watchRow(this)},Row.prototype.updateData=function(t){var e,o=this,i=this.element&&Tabulator.prototype.helpers.elVisible(this.element),n={};return new Promise(function(l,s){"string"==typeof t&&(t=JSON.parse(t)),o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.block(),o.table.modExists("mutator")?(n=Object.assign(n,o.data),n=Object.assign(n,t),e=o.table.modules.mutator.transformRow(n,"data",t)):e=t;for(var a in e)o.data[a]=e[a];o.table.options.reactiveData&&o.table.modExists("reactiveData",!0)&&o.table.modules.reactiveData.unblock();for(var a in t){o.table.columnManager.getColumnsByFieldRoot(a).forEach(function(t){var n=o.getCell(t.getField());if(n){var l=t.getFieldValue(e);n.getValue()!=l&&(n.setValueProcessData(l),i&&n.cellRendered())}})}o.table.options.groupUpdateOnCellEdit&&o.table.options.groupBy&&o.table.modExists("groupRows")&&o.table.modules.groupRows.reassignRowToGroup(o.row),i?(o.normalizeHeight(!0),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(o.initialized=!1,o.height=0,o.heightStyled=""),!1!==o.table.options.dataTree&&o.table.modExists("dataTree")&&o.table.modules.dataTree.redrawNeeded(t)&&(o.table.modules.dataTree.initializeRow(o),i&&(o.table.modules.dataTree.layoutRow(o),o.table.rowManager.refreshActiveData("tree",!1,!0))),o.table.options.rowUpdated.call(o.table,o.getComponent()),o.table.options.dataChanged&&o.table.options.dataChanged.call(o.table,o.table.rowManager.getData()),l()})},Row.prototype.getData=function(t){return t&&this.table.modExists("accessor")?this.table.modules.accessor.transformRow(this,t):this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},Row.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t<this.cells.length-1)for(var o=t+1;o<this.cells.length;o++){var i=this.cells[o];if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())){var n=!0;if("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n){e=i;break}}}return e},Row.prototype.findPrevEditableCell=function(t){var e=!1;if(t>0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){return this.table.rowManager.nextDisplayRow(this,!0)||!1},Row.prototype.prevRow=function(){return this.table.rowManager.prevDisplayRow(this,!0)||!1},Row.prototype.moveToRow=function(t,e){var o=this.table.rowManager.findRow(t);o?(this.table.rowManager.moveRowActual(this,o,!e),this.table.rowManager.refreshActiveData("display",!1,!0)):console.warn("Move Error - No matching row found:",t)},Row.prototype.validate=function(){var t=[];return this.cells.forEach(function(e){e.validate()||t.push(e.getComponent())}),!t.length||t},Row.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i,n;t.table.options.history&&t.table.modExists("history")&&(t.table.options.groupBy&&t.table.modExists("groupRows")?(n=t.getGroup().rows,(i=n.indexOf(t))&&(i=n[i-1])):(i=t.table.rowManager.getRowIndex(t))&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),t.deleteActual(),e()})},Row.prototype.deleteActual=function(t){this.table.rowManager.getRowIndex(this);this.detatchModules(),this.table.options.reactiveData&&this.table.modExists("reactiveData",!0),this.modules.group&&this.modules.group.removeRow(this),this.table.rowManager.deleteRow(this,t),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.element=!1,this.table.options.dataTree&&this.table.modExists("dataTree",!0)&&this.table.modules.dataTree.rowDelete(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.detatchModules=function(){this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.modExists("edit")&&this.table.modules.edit.currentCell.row===this&&this.table.modules.edit.cancelEdit(),this.table.modExists("frozenRows")&&this.table.modules.frozenRows.detachRow(this)},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e<t;e++)this.cells[0].delete()},Row.prototype.wipe=function(){if(this.detatchModules(),this.deleteCells(),this.element){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.parentNode&&this.element.parentNode.removeChild(this.element)}this.element=!1,this.modules={}},Row.prototype.getGroup=function(){return this.modules.group||!1},Row.prototype.getComponent=function(){return this.component||(this.component=new RowComponent(this)),this.component};var CellComponent=function(t){this._cell=t};CellComponent.prototype.getValue=function(){return this._cell.getValue()},CellComponent.prototype.getOldValue=function(){return this._cell.getOldValue()},CellComponent.prototype.getInitialValue=function(){return this._cell.initialValue},CellComponent.prototype.getElement=function(){return this._cell.getElement()},CellComponent.prototype.getRow=function(){return this._cell.row.getComponent()},CellComponent.prototype.getData=function(){return this._cell.row.getData()},CellComponent.prototype.getField=function(){return this._cell.column.getField()},CellComponent.prototype.getColumn=function(){return this._cell.column.getComponent()},CellComponent.prototype.setValue=function(t,e){void 0===e&&(e=!0),this._cell.setValue(t,e)},CellComponent.prototype.restoreOldValue=function(){this._cell.setValueActual(this._cell.getOldValue())},CellComponent.prototype.restoreInitialValue=function(){this._cell.setValueActual(this._cell.initialValue)},CellComponent.prototype.edit=function(t){return this._cell.edit(t)},CellComponent.prototype.cancelEdit=function(){this._cell.cancelEdit()},CellComponent.prototype.isEdited=function(){return!!this._cell.modules.edit&&this._cell.modules.edit.edited},CellComponent.prototype.clearEdited=function(){self.table.modExists("edit",!0)&&this._cell.table.modules.edit.clearEdited(this._cell)},CellComponent.prototype.isValid=function(){return!this._cell.modules.validate||!this._cell.modules.validate.invalid},CellComponent.prototype.validate=function(){return this._cell.validate()},CellComponent.prototype.clearValidation=function(){this._cell.table.modExists("validate",!0)&&this._cell.table.modules.validate.clearValidation(this._cell)},CellComponent.prototype.nav=function(){return this._cell.nav()},CellComponent.prototype.checkHeight=function(){this._cell.checkHeight()},CellComponent.prototype.getTable=function(){return this._cell.table},CellComponent.prototype._getSelf=function(){return this._cell};var Cell=function(t,e){this.table=t.table,this.column=t,this.row=e,this.element=null,this.value=null,this.initialValue,this.oldValue=null,this.modules={},this.height=null,this.width=null,this.minWidth=null,this.component=null,this.loaded=!1,this.build()};Cell.prototype.build=function(){this.generateElement(),this.setWidth(),this._configureCell(),this.setValueActual(this.column.getFieldValue(this.row.data)),this.initialValue=this.value},Cell.prototype.generateElement=function(){this.element=document.createElement("div"),this.element.className="tabulator-cell",this.element.setAttribute("role","gridcell"),this.element=this.element},Cell.prototype._configureCell=function(){var t=this,e=t.column.cellEvents,o=t.element,i=this.column.getField(),n={top:"flex-start",bottom:"flex-end",middle:"center"},l={left:"flex-start",right:"flex-end",center:"center"};if(o.style.textAlign=t.column.hozAlign,t.column.vertAlign&&(o.style.display="inline-flex",o.style.alignItems=n[t.column.vertAlign]||"",t.column.hozAlign&&(o.style.justifyContent=l[t.column.hozAlign]||"")),i&&o.setAttribute("tabulator-field",i),t.column.definition.cssClass){t.column.definition.cssClass.split(" ").forEach(function(t){o.classList.add(t)})}"hover"===this.table.options.tooltipGenerationMode&&o.addEventListener("mouseenter",function(e){t._generateTooltip()}),t._bindClickEvents(e),t._bindTouchEvents(e),t._bindMouseEvents(e),t.column.modules.edit&&t.table.modules.edit.bindEditor(t),t.column.definition.rowHandle&&!1!==t.table.options.movableRows&&t.table.modExists("moveRow")&&t.table.modules.moveRow.initializeCell(t),t.column.visible||t.hide()},Cell.prototype._bindClickEvents=function(t){var e=this,o=e.element;(t.cellClick||e.table.options.cellClick)&&o.addEventListener("click",function(o){var i=e.getComponent();t.cellClick&&t.cellClick.call(e.table,o,i),e.table.options.cellClick&&e.table.options.cellClick.call(e.table,o,i)}),t.cellDblClick||this.table.options.cellDblClick?o.addEventListener("dblclick",function(o){var i=e.getComponent();t.cellDblClick&&t.cellDblClick.call(e.table,o,i),e.table.options.cellDblClick&&e.table.options.cellDblClick.call(e.table,o,i)}):o.addEventListener("dblclick",function(t){if(!e.table.modExists("edit")||e.table.modules.edit.currentCell!==e){t.preventDefault();try{if(document.selection){var o=document.body.createTextRange();o.moveToElementText(e.element),o.select()}else if(window.getSelection){var o=document.createRange();o.selectNode(e.element),window.getSelection().removeAllRanges(),window.getSelection().addRange(o)}}catch(t){}}}),(t.cellContext||this.table.options.cellContext)&&o.addEventListener("contextmenu",function(o){var i=e.getComponent();t.cellContext&&t.cellContext.call(e.table,o,i),e.table.options.cellContext&&e.table.options.cellContext.call(e.table,o,i)})},Cell.prototype._bindMouseEvents=function(t){var e=this,o=e.element;(t.cellMouseEnter||e.table.options.cellMouseEnter)&&o.addEventListener("mouseenter",function(o){var i=e.getComponent();t.cellMouseEnter&&t.cellMouseEnter.call(e.table,o,i),e.table.options.cellMouseEnter&&e.table.options.cellMouseEnter.call(e.table,o,i)}),(t.cellMouseLeave||e.table.options.cellMouseLeave)&&o.addEventListener("mouseleave",function(o){var i=e.getComponent();t.cellMouseLeave&&t.cellMouseLeave.call(e.table,o,i),e.table.options.cellMouseLeave&&e.table.options.cellMouseLeave.call(e.table,o,i)}),(t.cellMouseOver||e.table.options.cellMouseOver)&&o.addEventListener("mouseover",function(o){var i=e.getComponent();t.cellMouseOver&&t.cellMouseOver.call(e.table,o,i),e.table.options.cellMouseOver&&e.table.options.cellMouseOver.call(e.table,o,i)}),(t.cellMouseOut||e.table.options.cellMouseOut)&&o.addEventListener("mouseout",function(o){var i=e.getComponent();t.cellMouseOut&&t.cellMouseOut.call(e.table,o,i),e.table.options.cellMouseOut&&e.table.options.cellMouseOut.call(e.table,o,i)}),(t.cellMouseMove||e.table.options.cellMouseMove)&&o.addEventListener("mousemove",function(o){var i=e.getComponent();t.cellMouseMove&&t.cellMouseMove.call(e.table,o,i),e.table.options.cellMouseMove&&e.table.options.cellMouseMove.call(e.table,o,i)})},Cell.prototype._bindTouchEvents=function(t){var e,o,i,n=this,l=n.element;(t.cellTap||this.table.options.cellTap)&&(i=!1,l.addEventListener("touchstart",function(t){i=!0},{passive:!0}),l.addEventListener("touchend",function(e){if(i){var o=n.getComponent();t.cellTap&&t.cellTap.call(n.table,e,o),n.table.options.cellTap&&n.table.options.cellTap.call(n.table,e,o)}i=!1})),(t.cellDblTap||this.table.options.cellDblTap)&&(e=null,l.addEventListener("touchend",function(o){if(e){clearTimeout(e),e=null;var i=n.getComponent();t.cellDblTap&&t.cellDblTap.call(n.table,o,i),
+n.table.options.cellDblTap&&n.table.options.cellDblTap.call(n.table,o,i)}else e=setTimeout(function(){clearTimeout(e),e=null},300)})),(t.cellTapHold||this.table.options.cellTapHold)&&(o=null,l.addEventListener("touchstart",function(e){clearTimeout(o),o=setTimeout(function(){clearTimeout(o),o=null,i=!1;var l=n.getComponent();t.cellTapHold&&t.cellTapHold.call(n.table,e,l),n.table.options.cellTapHold&&n.table.options.cellTapHold.call(n.table,e,l)},1e3)},{passive:!0}),l.addEventListener("touchend",function(t){clearTimeout(o),o=null}))},Cell.prototype._generateContents=function(){var t;switch(t=this.table.modExists("format")?this.table.modules.format.formatValue(this):this.element.innerHTML=this.value,void 0===t?"undefined":_typeof(t)){case"object":if(t instanceof Node){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.element.appendChild(t)}else this.element.innerHTML="",null!=t&&console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",t);break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=t}},Cell.prototype.cellRendered=function(){this.table.modExists("format")&&this.table.modules.format.cellRendered&&this.table.modules.format.cellRendered(this)},Cell.prototype._generateTooltip=function(){var t=this.column.tooltip;t?(!0===t?t=this.value:"function"==typeof t&&!1===(t=t(this.getComponent()))&&(t=""),void 0===t&&(t=""),this.element.setAttribute("title",t)):this.element.setAttribute("title","")},Cell.prototype.getElement=function(t){return this.loaded||(this.loaded=!0,t||this.layoutElement()),this.element},Cell.prototype.getValue=function(){return this.value},Cell.prototype.getOldValue=function(){return this.oldValue},Cell.prototype.setValue=function(t,e){var o,i=this.setValueProcessData(t,e);i&&(this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("cellEdit",this,{oldValue:this.oldValue,newValue:this.value}),o=this.getComponent(),this.column.cellEvents.cellEdited&&this.column.cellEvents.cellEdited.call(this.table,o),this.table.options.groupUpdateOnCellEdit&&this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.reassignRowToGroup(this.row),this.cellRendered(),this.table.options.cellEdited.call(this.table,o),this.table.options.dataChanged&&this.table.options.dataChanged.call(this.table,this.table.rowManager.getData()))},Cell.prototype.setValueProcessData=function(t,e){var o=!1;return this.value!=t&&(o=!0,e&&this.column.modules.mutate&&(t=this.table.modules.mutator.transformCell(this,t))),this.setValueActual(t),o&&this.table.modExists("columnCalcs")&&(this.column.definition.topCalc||this.column.definition.bottomCalc)&&(this.table.options.groupBy&&this.table.modExists("groupRows")?("table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs||this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),"table"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.recalcRowGroup(this.row)):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows)),o},Cell.prototype.setValueActual=function(t){this.oldValue=this.value,this.value=t,this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.block(),this.column.setFieldValue(this.row.data,t),this.table.options.reactiveData&&this.table.modExists("reactiveData")&&this.table.modules.reactiveData.unblock(),this.loaded&&this.layoutElement()},Cell.prototype.layoutElement=function(){this._generateContents(),this._generateTooltip(),this.table.options.resizableColumns&&this.table.modExists("resizeColumns")&&"row"===this.row.type&&this.table.modules.resizeColumns.initializeColumn("cell",this.column,this.element),(this.column.definition.contextMenu||this.column.definition.clickMenu)&&this.table.modExists("menu")&&this.table.modules.menu.initializeCell(this),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutElement(this.element,this.column)},Cell.prototype.setWidth=function(){this.width=this.column.width,this.element.style.width=this.column.widthStyled},Cell.prototype.clearWidth=function(){this.width="",this.element.style.width=""},Cell.prototype.getWidth=function(){return this.width||this.element.offsetWidth},Cell.prototype.setMinWidth=function(){this.minWidth=this.column.minWidth,this.element.style.minWidth=this.column.minWidthStyled},Cell.prototype.setMaxWidth=function(){this.maxWidth=this.column.maxWidth,this.element.style.maxWidth=this.column.maxWidthStyled},Cell.prototype.checkHeight=function(){this.row.reinitializeHeight()},Cell.prototype.clearHeight=function(){this.element.style.height="",this.height=null},Cell.prototype.setHeight=function(){this.height=this.row.height,this.element.style.height=this.row.heightStyled},Cell.prototype.getHeight=function(){return this.height||this.element.offsetHeight},Cell.prototype.show=function(){this.element.style.display=this.column.vertAlign?"inline-flex":""},Cell.prototype.hide=function(){this.element.style.display="none"},Cell.prototype.edit=function(t){if(this.table.modExists("edit",!0))return this.table.modules.edit.editCell(this,t)},Cell.prototype.cancelEdit=function(){if(this.table.modExists("edit",!0)){var t=this.table.modules.edit.getCurrentCell();t&&t._getSelf()===this?this.table.modules.edit.cancelEdit():console.warn("Cancel Editor Error - This cell is not currently being edited ")}},Cell.prototype.validate=function(){if(this.column.modules.validate&&this.table.modExists("validate",!0)){return!0===this.table.modules.validate.validate(this.column.modules.validate,this,this.getValue())}return!0},Cell.prototype.delete=function(){!this.table.rowManager.redrawBlock&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.modules.validate&&this.modules.validate.invalid&&this.table.modules.validate.clearValidation(this),this.modules.edit&&this.modules.edit.edited&&this.table.modules.edit.clearEdited(this),this.table.options.history&&this.table.modules.history.clearComponentHistory(this),this.element=!1,this.column.deleteCell(this),this.row.deleteCell(this),this.calcs={}},Cell.prototype.nav=function(){var t=this,e=!1,o=this.row.getCellIndex(this);return{next:function(){var e,o=this.right();return!!o||!(!(e=t.table.rowManager.nextDisplayRow(t.row,!0))||!(o=e.findNextEditableCell(-1)))&&(o.edit(),!0)},prev:function(){var e,o=this.left();return!!o||!(!(e=t.table.rowManager.prevDisplayRow(t.row,!0))||!(o=e.findPrevEditableCell(e.cells.length)))&&(o.edit(),!0)},left:function(){return!!(e=t.row.findPrevEditableCell(o))&&(e.edit(),!0)},right:function(){return!!(e=t.row.findNextEditableCell(o))&&(e.edit(),!0)},up:function(){var e=t.table.rowManager.prevDisplayRow(t.row,!0);e&&e.cells[o].edit()},down:function(){var e=t.table.rowManager.nextDisplayRow(t.row,!0);e&&e.cells[o].edit()}}},Cell.prototype.getIndex=function(){this.row.getCellIndex(this)},Cell.prototype.getComponent=function(){return this.component||(this.component=new CellComponent(this)),this.component};var FooterManager=function(t){this.table=t,this.active=!1,this.element=this.createElement(),this.external=!1,this.links=[],this._initialize()};FooterManager.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-footer"),t},FooterManager.prototype._initialize=function(t){if(this.table.options.footerElement)switch(_typeof(this.table.options.footerElement)){case"string":"<"===this.table.options.footerElement[0]?this.element.innerHTML=this.table.options.footerElement:(this.external=!0,this.element=document.querySelector(this.table.options.footerElement));break;default:this.element=this.table.options.footerElement}},FooterManager.prototype.getElement=function(){return this.element},FooterManager.prototype.append=function(t,e){this.activate(e),this.element.appendChild(t),this.table.rowManager.adjustTableSize()},FooterManager.prototype.prepend=function(t,e){this.activate(e),this.element.insertBefore(t,this.element.firstChild),this.table.rowManager.adjustTableSize()},FooterManager.prototype.remove=function(t){t.parentNode.removeChild(t),this.deactivate()},FooterManager.prototype.deactivate=function(t){this.element.firstChild&&!t||(this.external||this.element.parentNode.removeChild(this.element),this.active=!1)},FooterManager.prototype.activate=function(t){this.active||(this.active=!0,this.external||(this.table.element.appendChild(this.getElement()),this.table.element.style.display="")),t&&this.links.push(t)},FooterManager.prototype.redraw=function(){this.links.forEach(function(t){t.footerRedraw()})};var Tabulator=function t(e,o){this.options={},this.columnManager=null,this.rowManager=null,this.footerManager=null,this.vdomHoz=null,this.browser="",this.browserSlow=!1,this.browserMobile=!1,this.rtl=!1,this.modules={},this.initializeElement(e)&&(this.initializeOptions(o||{}),this._create()),t.prototype.comms.register(this)};Tabulator.prototype.defaultOptions={height:!1,minHeight:!1,maxHeight:!1,layout:"fitData",layoutColumnsOnNewData:!1,columnMinWidth:40,columnMaxWidth:!1,columnHeaderVertAlign:"top",columnVertAlign:!1,resizableColumns:!0,resizableRows:!1,autoResize:!0,columns:[],cellHozAlign:"",cellVertAlign:"",headerHozAlign:"",data:[],autoColumns:!1,autoColumnsDefinitions:!1,reactiveData:!1,nestedFieldSeparator:".",tooltips:!1,tooltipsHeader:!1,tooltipGenerationMode:"load",initialSort:!1,initialFilter:!1,initialHeaderFilter:!1,columnHeaderSortMulti:!0,sortOrderReverse:!1,headerSort:!0,headerSortTristate:!1,headerSortElement:"<div class='tabulator-arrow'></div>",footerElement:!1,index:"id",textDirection:"auto",keybindings:[],tabEndNewRow:!1,invalidOptionWarnings:!0,clipboard:!1,clipboardCopyStyled:!0,clipboardCopyConfig:!1,clipboardCopyFormatter:!1,clipboardCopyRowRange:"active",clipboardPasteParser:"table",clipboardPasteAction:"insert",clipboardCopied:function(){},clipboardPasted:function(){},clipboardPasteError:function(){},downloadDataFormatter:!1,downloadReady:function(t,e){return e},downloadComplete:!1,downloadConfig:{},downloadRowRange:"active",dataTree:!1,dataTreeFilter:!0,dataTreeSort:!0,dataTreeElementColumn:!1,dataTreeBranchElement:!0,dataTreeChildIndent:9,dataTreeChildField:"_children",dataTreeCollapseElement:!1,dataTreeExpandElement:!1,dataTreeStartExpanded:!1,dataTreeRowExpanded:function(){},dataTreeRowCollapsed:function(){},dataTreeChildColumnCalcs:!1,dataTreeSelectPropagate:!1,printAsHtml:!1,printFormatter:!1,printHeader:!1,printFooter:!1,printCopyStyle:!0,printStyled:!0,printVisibleRows:!0,printRowRange:"visible",printConfig:{},addRowPos:"bottom",selectable:"highlight",selectableRangeMode:"drag",selectableRollingSelection:!0,selectablePersistence:!0,selectableCheck:function(t,e){return!0},headerFilterLiveFilterDelay:300,headerFilterPlaceholder:!1,headerVisible:!0,history:!1,locale:!1,langs:{},virtualDom:!0,virtualDomBuffer:0,virtualDomHoz:!1,persistentLayout:!1,persistentSort:!1,persistentFilter:!1,persistenceID:"",persistenceMode:!0,persistenceReaderFunc:!1,persistenceWriterFunc:!1,persistence:!1,responsiveLayout:!1,responsiveLayoutCollapseStartOpen:!0,responsiveLayoutCollapseUseFormatters:!0,responsiveLayoutCollapseFormatter:!1,pagination:!1,paginationSize:!1,paginationInitialPage:1,paginationButtonCount:5,paginationSizeSelector:!1,paginationElement:!1,paginationDataSent:{},paginationDataReceived:{},paginationAddRow:"page",ajaxURL:!1,ajaxURLGenerator:!1,ajaxParams:{},ajaxConfig:"get",ajaxContentType:"form",ajaxRequestFunc:!1,ajaxLoader:!0,ajaxLoaderLoading:!1,ajaxLoaderError:!1,ajaxFiltering:!1,ajaxSorting:!1,ajaxProgressiveLoad:!1,ajaxProgressiveLoadDelay:0,ajaxProgressiveLoadScrollMargin:0,groupBy:!1,groupStartOpen:!0,groupValues:!1,groupUpdateOnCellEdit:!1,groupHeader:!1,groupHeaderPrint:null,groupHeaderClipboard:null,groupHeaderHtmlOutput:null,groupHeaderDownload:null,htmlOutputConfig:!1,movableColumns:!1,movableRows:!1,movableRowsConnectedTables:!1,movableRowsConnectedElements:!1,movableRowsSender:!1,movableRowsReceiver:"insert",movableRowsSendingStart:function(){},movableRowsSent:function(){},movableRowsSentFailed:function(){},movableRowsSendingStop:function(){},movableRowsReceivingStart:function(){},movableRowsReceived:function(){},movableRowsReceivedFailed:function(){},movableRowsReceivingStop:function(){},movableRowsElementDrop:function(){},scrollToRowPosition:"top",scrollToRowIfVisible:!0,scrollToColumnPosition:"left",scrollToColumnIfVisible:!0,rowFormatter:!1,rowFormatterPrint:null,rowFormatterClipboard:null,rowFormatterHtmlOutput:null,placeholder:!1,tableBuilding:function(){},tableBuilt:function(){},renderStarted:function(){},renderComplete:function(){},rowClick:!1,rowDblClick:!1,rowContext:!1,rowTap:!1,rowDblTap:!1,rowTapHold:!1,rowMouseEnter:!1,rowMouseLeave:!1,rowMouseOver:!1,rowMouseOut:!1,rowMouseMove:!1,rowContextMenu:!1,rowClickMenu:!1,rowAdded:function(){},rowDeleted:function(){},rowMoved:function(){},rowUpdated:function(){},rowSelectionChanged:function(){},rowSelected:function(){},rowDeselected:function(){},rowResized:function(){},cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1,cellMouseEnter:!1,cellMouseLeave:!1,cellMouseOver:!1,cellMouseOut:!1,cellMouseMove:!1,cellEditing:function(){},cellEdited:function(){},cellEditCancelled:function(){},columnMoved:!1,columnResized:function(){},columnTitleChanged:function(){},columnVisibilityChanged:function(){},htmlImporting:function(){},htmlImported:function(){},dataLoading:function(){},dataLoaded:function(){},dataEdited:!1,dataChanged:!1,ajaxRequesting:function(){},ajaxResponse:!1,ajaxError:function(){},dataFiltering:!1,dataFiltered:!1,dataSorting:function(){},dataSorted:function(){},groupToggleElement:"arrow",groupClosedShowCalcs:!1,dataGrouping:function(){},dataGrouped:!1,groupVisibilityChanged:function(){},groupClick:!1,groupDblClick:!1,groupContext:!1,groupContextMenu:!1,groupClickMenu:!1,groupTap:!1,groupDblTap:!1,groupTapHold:!1,columnCalcs:!0,pageLoaded:function(){},localized:function(){},validationMode:"blocking",validationFailed:function(){},historyUndo:function(){},historyRedo:function(){},scrollHorizontal:function(){},scrollVertical:function(){}},Tabulator.prototype.initializeOptions=function(t){if(!1!==t.invalidOptionWarnings)for(var e in t)void 0===this.defaultOptions[e]&&console.warn("Invalid table constructor option:",e);for(var e in this.defaultOptions)e in t?this.options[e]=t[e]:Array.isArray(this.defaultOptions[e])?this.options[e]=Object.assign([],this.defaultOptions[e]):"object"===_typeof(this.defaultOptions[e])&&null!==this.defaultOptions[e]?this.options[e]=Object.assign({},this.defaultOptions[e]):this.options[e]=this.defaultOptions[e]},Tabulator.prototype.initializeElement=function(t){return"undefined"!=typeof HTMLElement&&t instanceof HTMLElement?(this.element=t,!0):"string"==typeof t?(this.element=document.querySelector(t),!!this.element||(console.error("Tabulator Creation Error - no element found matching selector: ",t),!1)):(console.error("Tabulator Creation Error - Invalid element provided:",t),!1)},Tabulator.prototype.rtlCheck=function(){var t=window.getComputedStyle(this.element);switch(this.options.textDirection){case"auto":if("rtl"!==t.direction)break;case"rtl":this.element.classList.add("tabulator-rtl"),this.rtl=!0;break;case"ltr":this.element.classList.add("tabulator-ltr");default:this.rtl=!1}},Tabulator.prototype._mapDepricatedFunctionality=function(){(this.options.persistentLayout||this.options.persistentSort||this.options.persistentFilter)&&(this.options.persistence||(this.options.persistence={})),this.options.dataEdited&&(console.warn("DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead"),this.options.dataChanged=this.options.dataEdited),this.options.downloadDataFormatter&&console.warn("DEPRECATION WARNING - downloadDataFormatter option has been deprecated"),void 0!==this.options.clipboardCopyHeader&&(this.options.columnHeaders=this.options.clipboardCopyHeader,console.warn("DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option")),!0!==this.options.printVisibleRows&&(console.warn("printVisibleRows option is deprecated, you should now use the printRowRange option"),this.options.persistence.printRowRange="active"),!0!==this.options.printCopyStyle&&(console.warn("printCopyStyle option is deprecated, you should now use the printStyled option"),this.options.persistence.printStyled=this.options.printCopyStyle),this.options.persistentLayout&&(console.warn("persistentLayout option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.columns&&(this.options.persistence.columns=!0)),this.options.persistentSort&&(console.warn("persistentSort option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.sort&&(this.options.persistence.sort=!0)),this.options.persistentFilter&&(console.warn("persistentFilter option is deprecated, you should now use the persistence option"),!0!==this.options.persistence&&void 0===this.options.persistence.filter&&(this.options.persistence.filter=!0)),this.options.columnVertAlign&&(console.warn("columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option"),this.options.columnHeaderVertAlign=this.options.columnVertAlign)},Tabulator.prototype._clearSelection=function(){this.element.classList.add("tabulator-block-select"),window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),this.element.classList.remove("tabulator-block-select")},Tabulator.prototype._create=function(){this._clearObjectPointers(),this._mapDepricatedFunctionality(),this.bindModules(),this.rtlCheck(),"TABLE"===this.element.tagName&&this.modExists("htmlTableImport",!0)&&this.modules.htmlTableImport.parseTable(),this.columnManager=new ColumnManager(this),this.rowManager=new RowManager(this),this.footerManager=new FooterManager(this),this.columnManager.setRowManager(this.rowManager),this.rowManager.setColumnManager(this.columnManager),this.options.virtualDomHoz&&(this.vdomHoz=new VDomHoz(this)),this._buildElement(),this._loadInitialData()},Tabulator.prototype._clearObjectPointers=function(){this.options.columns=this.options.columns.slice(0),this.options.reactiveData||(this.options.data=this.options.data.slice(0))},Tabulator.prototype._buildElement=function(){var t=this,e=this.element,o=this.modules,i=this.options;for(i.tableBuilding.call(this),e.classList.add("tabulator"),e.setAttribute("role","grid");e.firstChild;)e.removeChild(e.firstChild);i.height&&(i.height=isNaN(i.height)?i.height:i.height+"px",e.style.height=i.height),!1!==i.minHeight&&(i.minHeight=isNaN(i.minHeight)?i.minHeight:i.minHeight+"px",e.style.minHeight=i.minHeight),!1!==i.maxHeight&&(i.maxHeight=isNaN(i.maxHeight)?i.maxHeight:i.maxHeight+"px",e.style.maxHeight=i.maxHeight),this.columnManager.initialize(),this.rowManager.initialize(),this._detectBrowser(),this.modExists("layout",!0)&&o.layout.initialize(i.layout),o.localize.initialize(),!1!==i.headerFilterPlaceholder&&o.localize.setHeaderFilterPlaceholder(i.headerFilterPlaceholder);for(var n in i.langs)o.localize.installLang(n,i.langs[n]);if(o.localize.setLocale(i.locale),"string"==typeof i.placeholder){var l=document.createElement("div");l.classList.add("tabulator-placeholder");var s=document.createElement("span");s.innerHTML=i.placeholder,l.appendChild(s),i.placeholder=l}if(e.appendChild(this.columnManager.getElement()),e.appendChild(this.rowManager.getElement()),i.footerElement&&this.footerManager.activate(),i.persistence&&this.modExists("persistence",!0)&&o.persistence.initialize(),i.movableRows&&this.modExists("moveRow")&&o.moveRow.initialize(),i.autoColumns&&this.options.data&&this.columnManager.generateColumnsFromRowData(this.options.data),this.modExists("columnCalcs")&&o.columnCalcs.initialize(),this.columnManager.setColumns(i.columns),i.dataTree&&this.modExists("dataTree",!0)&&o.dataTree.initialize(),this.modExists("frozenRows")&&this.modules.frozenRows.initialize(),(i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort||i.initialSort)&&this.modExists("sort",!0)){var a=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.sort?!1===(a=o.persistence.load("sort"))&&i.initialSort&&(a=i.initialSort):i.initialSort&&(a=i.initialSort),o.sort.setSort(a)}if((i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter||i.initialFilter)&&this.modExists("filter",!0)){var r=[];i.persistence&&this.modExists("persistence",!0)&&o.persistence.config.filter?!1===(r=o.persistence.load("filter"))&&i.initialFilter&&(r=i.initialFilter):i.initialFilter&&(r=i.initialFilter),o.filter.setFilter(r)}i.initialHeaderFilter&&this.modExists("filter",!0)&&i.initialHeaderFilter.forEach(function(e){var i=t.columnManager.findColumn(e.field);if(!i)return console.warn("Column Filter Error - No matching column found:",e.field),!1;o.filter.setHeaderFilterValue(i,e.value)}),this.modExists("ajax")&&o.ajax.initialize(),i.pagination&&this.modExists("page",!0)&&o.page.initialize(),i.groupBy&&this.modExists("groupRows",!0)&&o.groupRows.initialize(),this.modExists("keybindings")&&o.keybindings.initialize(),this.modExists("selectRow")&&o.selectRow.clearSelectionData(!0),i.autoResize&&this.modExists("resizeTable")&&o.resizeTable.initialize(),this.modExists("clipboard")&&o.clipboard.initialize(),i.printAsHtml&&this.modExists("print")&&o.print.initialize(),i.tableBuilt.call(this)},Tabulator.prototype._loadInitialData=function(){var t=this;if(t.options.pagination&&t.modExists("page"))if(t.modules.page.reset(!0,!0),"local"==t.options.pagination){if(t.options.data.length)t.rowManager.setData(t.options.data,!1,!0);else{if((t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax"))return void t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)});t.rowManager.setData(t.options.data,!1,!0)}t.options.paginationInitialPage&&t.modules.page.setPage(t.options.paginationInitialPage)}else t.options.ajaxURL?t.modules.page.setPage(t.options.paginationInitialPage).then(function(){}).catch(function(){}):t.rowManager.setData([],!1,!0);else t.options.data.length?t.rowManager.setData(t.options.data):(t.options.ajaxURL||t.options.ajaxURLGenerator)&&t.modExists("ajax")?t.modules.ajax.loadData(!1,!0).then(function(){}).catch(function(){}):t.rowManager.setData(t.options.data,!1,!0)},Tabulator.prototype.destroy=function(){var t=this.element;for(Tabulator.prototype.comms.deregister(this),this.options.reactiveData&&this.modExists("reactiveData",!0)&&this.modules.reactiveData.unwatchData(),this.rowManager.rows.forEach(function(t){t.wipe()}),this.rowManager.rows=[],this.rowManager.activeRows=[],this.rowManager.displayRows=[],this.options.autoResize&&this.modExists("resizeTable")&&this.modules.resizeTable.clearBindings(),this.modExists("keybindings")&&this.modules.keybindings.clearBindings();t.firstChild;)t.removeChild(t.firstChild);t.classList.remove("tabulator")},Tabulator.prototype._detectBrowser=function(){var t=navigator.userAgent||navigator.vendor||window.opera;t.indexOf("Trident")>-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1),this.browserMobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))},Tabulator.prototype.blockRedraw=function(){return this.rowManager.blockRedraw()},Tabulator.prototype.restoreRedraw=function(){return this.rowManager.restoreRedraw()},Tabulator.prototype.setDataFromLocalFile=function(t){var e=this;return new Promise(function(o,i){var n=document.createElement("input");n.type="file",n.accept=t||".json,application/json",n.addEventListener("change",function(t){var l,s=n.files[0],a=new FileReader;a.readAsText(s),a.onload=function(t){try{l=JSON.parse(a.result)}catch(t){return console.warn("File Load Error - File contents is invalid JSON",t),void i(t)}e.setData(l).then(function(t){o(t)}).catch(function(t){o(t)})},a.onerror=function(t){console.warn("File Load Error - Unable to read file"),i()}}),n.click()})},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!1,!0)},Tabulator.prototype._setData=function(t,e,o,i,n){var l=this;return"string"!=typeof t?t?l.rowManager.setData(t,i,n):l.modExists("ajax")&&(l.modules.ajax.getUrl||l.options.ajaxURLGenerator)?"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n):l.rowManager.setData([],i,n):0==t.indexOf("{")||0==t.indexOf("[")?l.rowManager.setData(JSON.parse(t),i,n):l.modExists("ajax",!0)?(e&&l.modules.ajax.setParams(e),o&&l.modules.ajax.setConfig(o),l.modules.ajax.setUrl(t),"remote"==l.options.pagination&&l.modExists("page",!0)?(l.modules.page.reset(!0,!0),l.modules.page.setPage(1)):l.modules.ajax.loadData(i,n)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return!0===t&&(console.warn("passing a boolean to the getData function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return!0===t&&(console.warn("passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t,e,o){if(this.modExists("export",!0))return this.modules.export.getHtml(t,e,o)},Tabulator.prototype.print=function(t,e,o){if(this.modExists("print",!0))return this.modules.print.printFullscreen(t,e,o)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,l){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,l){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(l,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||l(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||l(i)})}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){function n(){++s==t.length&&a&&(l.rowManager.reRenderInPosition(),o())}var l=e,s=0,a=0,r=[];Array.isArray(t)||(t=[t]),t.forEach(function(t){var o=e.rowManager.findRow(t,!0);o?r.push(o):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"),n())}),r.sort(function(t,o){return e.rowManager.rows.indexOf(t)>e.rowManager.rows.indexOf(o)?1:-1}),r.forEach(function(t){t.delete().then(function(){a++,n()}).catch(function(t){n(),i(t)})})})},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,l){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(l.getComponent())}).catch(function(t){n(t)}):l=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){i(l.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),
+n("Update Error - No matching row found"))})},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.rowManager.findRow(t);s?i.rowManager.scrollToRow(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching row found:",t),l("Scroll Error - No matching row found"))})},Tabulator.prototype.moveRow=function(t,e,o){var i=this.rowManager.findRow(t);i?i.moveToRow(e,o):console.warn("Move Error - No matching row found:",t)},Tabulator.prototype.getRows=function(t){return!0===t&&(console.warn("passing a boolean to the getRows function is deprecated, you should now pass the string 'active'"),t="active"),this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(o);i.columnManager.addColumn(t,e,s).then(function(t){n(t.getComponent())}).catch(function(t){l(t)})})},Tabulator.prototype.deleteColumn=function(t){var e=this;return new Promise(function(o,i){var n=e.columnManager.findColumn(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Column Delete Error - No matching column found:",t),i())})},Tabulator.prototype.updateColumnDefinition=function(t,e){var o=this;return new Promise(function(i,n){var l=o.columnManager.findColumn(t);l?l.updateDefinition(e).then(function(t){i(t)}).catch(function(t){n(t)}):(console.warn("Column Update Error - No matching column found:",t),n())})},Tabulator.prototype.moveColumn=function(t,e,o){var i=this.columnManager.findColumn(t),n=this.columnManager.findColumn(e);i?n?this.columnManager.moveColumn(i,n,o):console.warn("Move Error - No matching column found:",n):console.warn("Move Error - No matching column found:",t)},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(t);s?i.columnManager.scrollToColumn(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching column found:",t),l("Scroll Error - No matching column found"))})},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){"classic"!==this.rowManager.renderMode?(this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.setRenderMode(),this.rowManager.redraw()):console.warn("setHeight function is not available in classic render mode")},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.refreshFilter=function(){this.modExists("filter",!0)&&this.rowManager.filterRefresh()},Tabulator.prototype.addFilter=function(t,e,o,i){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o,i),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.getHeaderFilterValue=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(e)return this.modules.filter.getHeaderFilterValue(e);console.warn("Column Filter Error - No matching column found:",t)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&(!0===t&&(console.warn("passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'"),t="active"),this.modules.selectRow.selectRows(t))},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.getInvalidCells=function(){if(this.modExists("validate",!0))return this.modules.validate.getInvalidCells()},Tabulator.prototype.clearCellValidation=function(t){var e=this;this.modExists("validate",!0)&&(t||(t=this.modules.validate.getInvalidCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.validate.clearValidation(t._getSelf())}))},Tabulator.prototype.validate=function(t){var e=[];return this.rowManager.rows.forEach(function(t){var o=t.validate();!0!==o&&(e=e.concat(o))}),!e.length||e},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){return this.options.pagination&&this.modExists("page")?this.modules.page.setPage(t):new Promise(function(t,e){e()})},Tabulator.prototype.setPageToRow=function(t){var e=this;return new Promise(function(o,i){e.options.pagination&&e.modExists("page")?(t=e.rowManager.findRow(t),t?e.modules.page.setPageToRow(t).then(function(){o()}).catch(function(){i()}):i()):i()})},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1).then(function(){}).catch(function(){})},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupValues=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupValues=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?(this.rowManager.refreshActiveData("group"),this.options.persistence&&this.modExists("persistence",!0)&&this.modules.persistence.config.group&&this.modules.persistence.save("group")):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getEditedCells=function(){if(this.modExists("edit",!0))return this.modules.edit.getEditedCells()},Tabulator.prototype.clearCellEdited=function(t){var e=this;this.modExists("edit",!0)&&(t||(t=this.modules.edit.getEditedCells()),Array.isArray(t)||(t=[t]),t.forEach(function(t){e.modules.edit.clearEdited(t._getSelf())}))},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.recalc=function(){this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.recalcAll(this.rowManager.activeRows)},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().prev()},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&t.nav().next()},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().down())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.clearHistory=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.clear()},Tabulator.prototype.download=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i)},Tabulator.prototype.downloadToTab=function(t,e,o,i){this.modExists("download",!0)&&this.modules.download.download(t,e,o,i,!0)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){this.modules={};for(var t in Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Object.assign(Array.isArray(t)?[]:{},t);for(var o in t)null!=t[o]&&"object"===_typeof(t[o])&&(t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]));return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t,e){var o,i,n=[];if("string"==typeof t){if(o=document.querySelectorAll(t),o.length)for(var l=0;l<o.length;l++)(i=Tabulator.prototype.comms.matchElement(o[l]))&&n.push(i)}else"undefined"!=typeof HTMLElement&&t instanceof HTMLElement||t instanceof Tabulator?(i=Tabulator.prototype.comms.matchElement(t))&&n.push(i):Array.isArray(t)?t.forEach(function(t){n=n.concat(Tabulator.prototype.comms.lookupTable(t))}):e||console.warn("Table Connection Error - Invalid Selector",t);return n},matchElement:function(t){return Tabulator.prototype.comms.tables.find(function(e){return t instanceof Tabulator?e===t:e.element===t})}},Tabulator.prototype.findTable=function(t){var e=Tabulator.prototype.comms.lookupTable(t,!0);return!(Array.isArray(e)&&!e.length)&&e};var Layout=function(t){this.table=t,this.mode=null};Layout.prototype.initialize=function(t){this.modes[t]?this.mode=t:(console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : "+t),this.mode="fitData"),this.table.element.setAttribute("tabulator-layout",this.mode)},Layout.prototype.getMode=function(){return this.mode},Layout.prototype.layout=function(){this.modes[this.mode].call(this,this.table.columnManager.columnsByIndex),0===this.mode.indexOf("fitData")&&this.table.options.persistence&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.config.columns&&this.table.modules.persistence.save("columns")},Layout.prototype.modes={fitData:function(t){this.table.options.virtualDomHoz?this.table.vdomHoz.fitDataLayoutOverride():t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataFill:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataTable:function(t){t.forEach(function(t){t.reinitializeWidth()}),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitDataStretch:function(t){var e=this,o=0,i=this.table.rowManager.element.clientWidth,n=0,l=!1;t.forEach(function(t,i){t.widthFixed||t.reinitializeWidth(),(e.table.options.responsiveLayout?t.modules.responsive.visible:t.visible)&&(l=t),t.visible&&(o+=t.getWidth())}),l?(n=i-o+l.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(l.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?l.setWidth(n):l.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()},fitColumns:function(t){function e(t){return"string"==typeof t?t.indexOf("%")>-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,l){function s(t){return n*(t.column.definition.widthGrow||1)}function r(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var u=[],h=0,c=0,d=0,p=a,m=0,f=0,g=[];return t.forEach(function(t,e){var o=l?r(t):s(t);t.column.minWidth>=o?u.push(t):t.column.maxWidth&&t.column.maxWidth<o?(t.width=t.column.maxWidth,i-=t.column.maxWidth,(p-=l?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)&&(n=Math.floor(i/p))):(g.push(t),f+=l?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),u.length?(u.forEach(function(t){h+=l?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),c=i-h,d=f?Math.floor(c/f):c,m=c-d*f,m+=o(g,c,d,l)):(m=f?i-Math.floor(i/f)*f:i,g.forEach(function(t){t.width=l?r(t):s(t)})),m}var i=this,n=i.table.element.clientWidth,l=0,s=0,a=0,r=0,u=[],h=[],c=0,d=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),l+=n>i?n:i,t.definition.widthShrink&&(h.push({column:t,width:n>i?n:i}),c+=t.definition.widthShrink)):(u.push({column:t,width:0}),a+=t.definition.widthGrow||1))}),s=n-l,r=Math.floor(s/a);var p=o(u,s,r,!1);u.length&&p>0&&(u[u.length-1].width+=+p),u.forEach(function(t){s-=t.width}),d=Math.abs(p)+s,d>0&&c&&(p=o(h,d,Math.floor(d/c),!0)),h.length&&(h[h.length-1].width-=p),u.forEach(function(t){t.column.setWidth(t.width)}),h.forEach(function(t){t.column.setWidth(t.width)})}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={},this.langList={}};Localize.prototype.initialize=function(){this.langList=Tabulator.prototype.helpers.deepClone(this.langs)},Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langList.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langList.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langList[t]?this._setLangProp(this.langList[t],e):this.langList[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langList[t]){var i=t.split("-")[0];o.langList[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=Tabulator.prototype.helpers.deepClone(o.langList.default||{}),"default"!=t&&e(o.langList[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langList[t]:this.lang},Localize.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{page_size:"Page Size",page_title:"Show Page",first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page",all:"All"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e,o=this,i=[];return e=Tabulator.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},Comms.prototype.send=function(t,e,o,i){var n=this,l=this.getConnections(t);l.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!l.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms);
\ No newline at end of file
index 5a00891..e497986 100644 (file)
@@ -3,9 +3,9 @@ DBUSER="potlu2_user"
 DBPWD="dMY8xGB6cBLzrDGE"
 export PGPASSWORD="dMY8xGB6cBLzrDGE"
 DBLIVEHOST="sql12.your-server.de"
-DBDEVHOST="dks-pc1"
+DBDEVHOST="dks-laptop"
 DBSCHEMA="public"
-DBREFSCHEMA="brasserie_du_theatre"
+DBREFSCHEMA="alicehartmann"
 REMOTEAPPFOLDER="public_html/app_plandutravail_lu"
 REMOTEWEBSITEFOLDER="public_html/plandutravail_lu"
 SSHUSER="dksalu"
diff --git a/dev/db/potlu2_db.alicehartmann.pg.schema.sql b/dev/db/potlu2_db.alicehartmann.pg.schema.sql
new file mode 100644 (file)
index 0000000..4a60424
--- /dev/null
@@ -0,0 +1,646 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 11.14 (Debian 11.14-0+deb10u1)
+-- Dumped by pg_dump version 12.7
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: alicehartmann; Type: SCHEMA; Schema: -; Owner: -
+--
+
+CREATE SCHEMA alicehartmann;
+
+
+--
+-- Name: trg_before_upd_schematable(); Type: FUNCTION; Schema: alicehartmann; Owner: -
+--
+
+CREATE FUNCTION alicehartmann.trg_before_upd_schematable() RETURNS trigger
+    LANGUAGE plpgsql
+    AS $$
+    begin
+           new.modified = now();
+        RETURN NEW;
+    END;
+$$;
+
+
+SET default_tablespace = '';
+
+--
+-- Name: reportperiod; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.reportperiod (
+    periodname text,
+    startdate date,
+    enddate date,
+    id_parentreportperiod text,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    periodtype text,
+    subinterval text,
+    viewpartunempl boolean
+);
+
+
+--
+-- Name: staff; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.staff (
+    staffnumber text,
+    surname text,
+    prename text,
+    job text,
+    birthdate date,
+    matricule text,
+    email text,
+    phone text,
+    city text,
+    zip text,
+    country text,
+    address text,
+    id_staffgroup text,
+    id text DEFAULT public.getuuid() NOT NULL,
+    isdeleted boolean,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    istimetrackenabled boolean,
+    timetrackerpin text,
+    timetrackerfixtime integer,
+    timetrackerlang text,
+    timetrackers json,
+    timetrackerrestriction text,
+    note text,
+    monstart time without time zone,
+    monend time without time zone,
+    tuestart time without time zone,
+    tueend time without time zone,
+    wedstart time without time zone,
+    wedend time without time zone,
+    thustart time without time zone,
+    thuend time without time zone,
+    fristart time without time zone,
+    friend time without time zone,
+    satstart time without time zone,
+    satend time without time zone,
+    sunstart time without time zone,
+    sunend time without time zone,
+    nfcuid text
+);
+
+
+--
+-- Name: staffcontract; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.staffcontract (
+    id_staff text,
+    startdate date,
+    enddate date,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    weekdays integer,
+    weekhours interval,
+    defaultfreedays json,
+    id_contractworkplan text,
+    freeweekdaysonstart json,
+    freeweekdaysonend json
+);
+
+
+--
+-- Name: staffgroups; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.staffgroups (
+    groupname text,
+    groupcolor text,
+    editoruser_ids json,
+    isdefault boolean,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now()
+);
+
+
+--
+-- Name: staffreportperiod; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.staffreportperiod (
+    id_reportperiod text,
+    id_staff text,
+    workhours interval DEFAULT '00:00:00'::interval,
+    contracthours interval DEFAULT '00:00:00'::interval,
+    totalhours interval DEFAULT '00:00:00'::interval,
+    vacancyhours interval DEFAULT '00:00:00'::interval,
+    recuperationhours interval DEFAULT '00:00:00'::interval,
+    hoursdiff interval DEFAULT '00:00:00'::interval,
+    payedhours interval,
+    diffhourspayed interval,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    transferedhours interval,
+    suppvacancysunwork integer,
+    suppvacancy44hours integer,
+    transferedhourscalc interval,
+    statussuncount integer DEFAULT 0,
+    status44hcount integer DEFAULT 0,
+    last44date date,
+    lastsundate date,
+    itmcontracthours interval DEFAULT '00:00:00'::interval,
+    maxdays integer DEFAULT 0,
+    avgtotalweekhours interval,
+    vacancyill interval,
+    vacancynormal interval,
+    isvalidated boolean,
+    payedhours40 interval,
+    payedhours40calc interval,
+    hourstotransfer interval,
+    hourstotransfercalc interval,
+    payedhours0 interval,
+    unpayedprevious interval,
+    vacancyextra interval,
+    partunemplhours interval,
+    otherpaidhours interval,
+    nighthours interval
+);
+
+
+--
+-- Name: staffreportperioddays; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.staffreportperioddays (
+    id_staff text NOT NULL,
+    daydate date NOT NULL,
+    timestart1 time without time zone,
+    timeend1 time without time zone,
+    timestart2 time without time zone,
+    timeend2 time without time zone,
+    timepause time without time zone,
+    vacancyhours time without time zone,
+    contracthours time without time zone,
+    id_staffgroup text,
+    id_vacancytype text,
+    daytype text,
+    workhours time without time zone,
+    recuperationhours time without time zone,
+    trackedhours time without time zone,
+    id_reportperiod text,
+    dayhours time without time zone,
+    id_recuperationtype text,
+    interruptionhours time without time zone,
+    wdcontracthours time without time zone,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    pausestart1 time without time zone,
+    pauseend1 time without time zone,
+    pausestart2 time without time zone,
+    pauseend2 time without time zone,
+    payedpause boolean,
+    vacextrahours time without time zone,
+    vacextracomment text,
+    vacillhours time without time zone,
+    vacillcomment text,
+    partunemplhours time without time zone,
+    recupcomment text,
+    partunempcomment text,
+    vacancycomment text,
+    otherpaidhours time without time zone,
+    otherpaidhourscomment text,
+    nighthours interval,
+    daycomment text
+);
+
+
+--
+-- Name: staffvacancyyear; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.staffvacancyyear (
+    id text DEFAULT public.getuuid() NOT NULL,
+    id_staff text,
+    vacyear integer,
+    vachours interval(6)
+);
+
+
+--
+-- Name: timetracker; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.timetracker (
+    id text DEFAULT public.getuuid() NOT NULL,
+    id_staff text,
+    daydate date,
+    stamp_in timestamp without time zone,
+    stamp_out timestamp without time zone,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    stampin_tracker text,
+    stampout_tracker text
+);
+
+
+--
+-- Name: timetrackerconfig; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.timetrackerconfig (
+    id text DEFAULT public.getuuid() NOT NULL,
+    trackername text,
+    trackerhostname text,
+    trackershortkey text,
+    trackertype text,
+    authmethod text
+);
+
+
+--
+-- Name: vacancydays; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.vacancydays (
+    daydate date,
+    vacancyname text,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now()
+);
+
+
+--
+-- Name: vacancytypes; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.vacancytypes (
+    vacancyname text,
+    isworktime boolean,
+    isfreetime boolean,
+    color text,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    legend text
+);
+
+
+--
+-- Name: workplandays; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.workplandays (
+    id_workplan text,
+    weekday integer,
+    start1 time without time zone,
+    end1 time without time zone,
+    start2 time without time zone,
+    end2 time without time zone,
+    pause time without time zone,
+    id text DEFAULT public.getuuid() NOT NULL,
+    weeknum integer,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    pausestart1 time without time zone,
+    pauseend1 time without time zone,
+    pausestart2 time without time zone,
+    pauseend2 time without time zone
+);
+
+
+--
+-- Name: workplans; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.workplans (
+    workplan text,
+    weekhours interval,
+    weekdays integer,
+    freeweekdayslist json,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    isdefault boolean
+);
+
+
+--
+-- Name: worktimes; Type: TABLE; Schema: alicehartmann; Owner: -
+--
+
+CREATE TABLE alicehartmann.worktimes (
+    startdate date,
+    enddate date,
+    defaultdayhours interval,
+    maxdayhours interval,
+    defaultweekhours interval,
+    maxweekhours interval,
+    maxinterruptionhours interval,
+    isdefault boolean,
+    id text DEFAULT public.getuuid() NOT NULL,
+    modified timestamp without time zone DEFAULT now(),
+    created timestamp without time zone DEFAULT now(),
+    mindailyrecuperation time without time zone,
+    maxhourspercents numeric(4,2)
+);
+
+
+--
+-- Name: reportperiod reportperiod_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.reportperiod
+    ADD CONSTRAINT reportperiod_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: staff staff_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staff
+    ADD CONSTRAINT staff_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: staffcontract staffcontract_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffcontract
+    ADD CONSTRAINT staffcontract_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: staffgroups staffgroups_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffgroups
+    ADD CONSTRAINT staffgroups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: staffreportperiod staffreportperiod_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffreportperiod
+    ADD CONSTRAINT staffreportperiod_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: staffreportperioddays staffreportperioddays_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffreportperioddays
+    ADD CONSTRAINT staffreportperioddays_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: staffvacancyyear staffvacancyyear_id_staff_vacyear_key; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffvacancyyear
+    ADD CONSTRAINT staffvacancyyear_id_staff_vacyear_key UNIQUE (id_staff, vacyear);
+
+
+--
+-- Name: staffvacancyyear staffvacancyyear_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffvacancyyear
+    ADD CONSTRAINT staffvacancyyear_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: timetracker timetracker_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.timetracker
+    ADD CONSTRAINT timetracker_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: timetrackerconfig timetrackerconfig_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.timetrackerconfig
+    ADD CONSTRAINT timetrackerconfig_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: staffreportperiod uniq_staffreportperiod_cal; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffreportperiod
+    ADD CONSTRAINT uniq_staffreportperiod_cal UNIQUE (id_reportperiod, id_staff);
+
+
+--
+-- Name: staffreportperioddays uniq_staffworplan_staffday; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffreportperioddays
+    ADD CONSTRAINT uniq_staffworplan_staffday UNIQUE (id_staff, daydate);
+
+
+--
+-- Name: vacancydays vacancydays_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.vacancydays
+    ADD CONSTRAINT vacancydays_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: vacancytypes vacancytypes_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.vacancytypes
+    ADD CONSTRAINT vacancytypes_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: workplandays workplandays_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.workplandays
+    ADD CONSTRAINT workplandays_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: workplandays workplandays_un; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.workplandays
+    ADD CONSTRAINT workplandays_un UNIQUE (id_workplan, weekday);
+
+
+--
+-- Name: workplans workplans_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.workplans
+    ADD CONSTRAINT workplans_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: worktimes worktimes_pkey; Type: CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.worktimes
+    ADD CONSTRAINT worktimes_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: reportperiod trg_alicehartmann_before_upd_reportperiod; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_reportperiod BEFORE UPDATE ON alicehartmann.reportperiod FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: staff trg_alicehartmann_before_upd_staff; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_staff BEFORE UPDATE ON alicehartmann.staff FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: staffcontract trg_alicehartmann_before_upd_staffcontract; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_staffcontract BEFORE UPDATE ON alicehartmann.staffcontract FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: staffgroups trg_alicehartmann_before_upd_staffgroups; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_staffgroups BEFORE UPDATE ON alicehartmann.staffgroups FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: staffreportperiod trg_alicehartmann_before_upd_staffreportperiod; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_staffreportperiod BEFORE UPDATE ON alicehartmann.staffreportperiod FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: staffreportperioddays trg_alicehartmann_before_upd_staffreportperioddays; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_staffreportperioddays BEFORE UPDATE ON alicehartmann.staffreportperioddays FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: timetracker trg_alicehartmann_before_upd_timetracker; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_timetracker BEFORE UPDATE ON alicehartmann.timetracker FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: vacancydays trg_alicehartmann_before_upd_vacancydays; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_vacancydays BEFORE UPDATE ON alicehartmann.vacancydays FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: vacancytypes trg_alicehartmann_before_upd_vacancytypes; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_vacancytypes BEFORE UPDATE ON alicehartmann.vacancytypes FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: workplandays trg_alicehartmann_before_upd_workplandays; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_workplandays BEFORE UPDATE ON alicehartmann.workplandays FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: workplans trg_alicehartmann_before_upd_workplans; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_workplans BEFORE UPDATE ON alicehartmann.workplans FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: worktimes trg_alicehartmann_before_upd_worktimes; Type: TRIGGER; Schema: alicehartmann; Owner: -
+--
+
+CREATE TRIGGER trg_alicehartmann_before_upd_worktimes BEFORE UPDATE ON alicehartmann.worktimes FOR EACH ROW EXECUTE PROCEDURE alicehartmann.trg_before_upd_schematable();
+
+
+--
+-- Name: staffcontract staffcontract_fk; Type: FK CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffcontract
+    ADD CONSTRAINT staffcontract_fk FOREIGN KEY (id_staff) REFERENCES alicehartmann.staff(id);
+
+
+--
+-- Name: staffreportperiod staffreportperiod_fk; Type: FK CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffreportperiod
+    ADD CONSTRAINT staffreportperiod_fk FOREIGN KEY (id_staff) REFERENCES alicehartmann.staff(id);
+
+
+--
+-- Name: staffreportperiod staffreportperiod_fk_1; Type: FK CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffreportperiod
+    ADD CONSTRAINT staffreportperiod_fk_1 FOREIGN KEY (id_reportperiod) REFERENCES alicehartmann.reportperiod(id);
+
+
+--
+-- Name: staffreportperioddays staffworkplan_fk; Type: FK CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffreportperioddays
+    ADD CONSTRAINT staffworkplan_fk FOREIGN KEY (id_staff) REFERENCES alicehartmann.staff(id);
+
+
+--
+-- Name: staffreportperioddays staffworkplan_fk_1; Type: FK CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.staffreportperioddays
+    ADD CONSTRAINT staffworkplan_fk_1 FOREIGN KEY (id_staffgroup) REFERENCES alicehartmann.staffgroups(id);
+
+
+--
+-- Name: workplandays workplandays_fk; Type: FK CONSTRAINT; Schema: alicehartmann; Owner: -
+--
+
+ALTER TABLE ONLY alicehartmann.workplandays
+    ADD CONSTRAINT workplandays_fk FOREIGN KEY (id_workplan) REFERENCES alicehartmann.workplans(id);
+
+
+--
+-- PostgreSQL database dump complete
+--
+
index 3698170..52cb557 100644 (file)
@@ -21,10 +21,10 @@ fi
 # #export PGPASSWORD="r2btTTRfuJz4whez"
 # #echo ${CALLDIR}
 
-# echo "export ${DBDEVHOST} ${DBNAME} ${DBSCHEMA}" 
+echo "export ${DBLIVEHOST} ${DBNAME} ${DBSCHEMA}" 
 # export PGPASSWORD="dMY8xGB6cBLzrDGE"
 
-#pg_dump -h ${DBDEVHOST} -U ${DBUSER} -n ${DBSCHEMA} -w -O -x -s ${DBNAME} > ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.pg.schema.sql'
+pg_dump -h ${DBLIVEHOST} -U ${DBUSER} -n ${DBSCHEMA} -w -O -x -s ${DBNAME} > ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.pg.schema.sql'
 cat ${CALLDIR}"/db/dev/"${DBNAME}"."${DBSCHEMA}".pg.schema.sql" | \
 grep -v -e "^--" | \
 grep -v -e "^SET" | \