From 4c4fbf3704a5e9ecab99ebe52f5ebc9cc90b3d2b Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Wed, 3 Nov 2021 09:13:04 +0100 Subject: [PATCH] v20211102 --- .gitignore | 1 + app/css/font/appicons.eot | Bin 0 -> 37428 bytes app/css/font/appicons.svg | 240 ++ app/css/font/appicons.ttf | Bin 0 -> 37260 bytes app/css/font/appicons.woff | Bin 0 -> 22096 bytes app/css/font/appicons.woff2 | Bin 0 -> 18384 bytes app/css/fonts/appicons.eot | Bin 37760 -> 0 bytes app/css/fonts/appicons.svg | 123 - app/css/fonts/appicons.ttf | Bin 39664 -> 0 bytes app/css/fonts/appicons.woff | Bin 39740 -> 0 bytes app/css/icons.css | 515 ++-- app/css/theme.css | 5 + app/db.php | 25 +- app/lib/POT/Period.php | 2 +- app/lib/POT/Workplan.php | 6 +- app/lib/POT/Worktime.php | 1 + app/lib/config.php | 4 +- app/lib/lang/de.php | 3 +- app/lib/lang/fr.php | 5 +- app/lib/version.php | 2 +- app/log/csql.log | 2 - app/log/nsql.log | 1452 ------------ app/log/sql.log | 2338 +++++++++++++++++++ app/log/xsql.log | 867 ------- app/tmpl/.htaccess | 5 +- app/tmpl/block/common_head.html | 2 +- app/tmpl/block/common_scripts.html | 18 +- app/tmpl/block/dlgstaffperioddays.html | 5 + app/tmpl/index.html | 1 + app/tmpl/module/index/index.js | 6 +- app/tmpl/module/js/app.js | 12 +- app/tmpl/module/js/tablehelper.js | 48 + app/tmpl/module/manifest.webmanifest | 53 + app/tmpl/module/periods/reportperiod.js | 25 +- app/tmpl/module/periods/staffperiodweeks.js | 22 +- app/tmpl/module/staff/staff.js | 2 +- app/tmpl/module/staff/staffperiods.js | 2 +- app/tmpl/module/timeclock.html | 4 +- dev/create_cssicons.ps1 | 14 + icons/Floppy.svg | 5 + icons/Save.svg | 5 + icons/access.svg | 5 + icons/address.svg | 5 + icons/aggrement.svg | 5 + icons/apps.svg | 5 + icons/archive.svg | 5 + icons/back.svg | 5 + icons/baggage.svg | 5 + icons/bulletlist.svg | 5 + icons/calendar.svg | 5 + icons/calendar1.svg | 5 + icons/category.svg | 5 + icons/check.svg | 5 + icons/clocktime.svg | 5 + icons/code.svg | 5 + icons/coin.svg | 5 + icons/company.svg | 5 + icons/copy.svg | 5 + icons/cube.svg | 5 + icons/cube1.svg | 5 + icons/cubelight.svg | 5 + icons/cubelight1.svg | 5 + icons/dashboard.svg | 5 + icons/dashboard1.svg | 5 + icons/datarefresh.svg | 5 + icons/dataset.svg | 5 + icons/detailview.svg | 5 + icons/documents.svg | 5 + icons/documentsave.svg | 5 + icons/download.svg | 5 + icons/duplicate.svg | 5 + icons/duplicate1.svg | 5 + icons/edit.svg | 5 + icons/entry.svg | 5 + icons/erase.svg | 5 + icons/excel.svg | 5 + icons/exit.svg | 5 + icons/expand.svg | 5 + icons/expand2.svg | 5 + icons/eye-close.svg | 5 + icons/eye-open.svg | 5 + icons/file.svg | 5 + icons/finger1.svg | 5 + icons/finger2.svg | 5 + icons/finger3.svg | 5 + icons/finger4.svg | 5 + icons/finger5.svg | 5 + icons/fingerprint-check.svg | 5 + icons/fingerprint-crosshair.svg | 5 + icons/fingerprint-remove.svg | 5 + icons/fingerprint-scanning.svg | 5 + icons/fingerprint-search.svg | 5 + icons/fingerprint-simple.svg | 5 + icons/folder.svg | 5 + icons/folder_add.svg | 5 + icons/folder_delete.svg | 5 + icons/folder_find.svg | 5 + icons/globe.svg | 5 + icons/group.svg | 5 + icons/help.svg | 5 + icons/helpfile.svg | 5 + icons/history.svg | 5 + icons/home.svg | 5 + icons/house.svg | 5 + icons/inbox.svg | 5 + icons/info.svg | 5 + icons/key.svg | 5 + icons/library.svg | 5 + icons/list.svg | 5 + icons/lock.svg | 5 + icons/log.svg | 5 + icons/logout.svg | 5 + icons/menu.svg | 5 + icons/menudown.svg | 5 + icons/newspaper.svg | 5 + icons/next.svg | 5 + icons/normalview.svg | 5 + icons/numberlist.svg | 5 + icons/package.svg | 5 + icons/paste.svg | 5 + icons/pause.svg | 5 + icons/pay.svg | 5 + icons/pdf.svg | 5 + icons/pdfexport.svg | 5 + icons/pictures.svg | 5 + icons/plus.svg | 5 + icons/projects.svg | 5 + icons/qube.svg | 5 + icons/remove.svg | 5 + icons/rename.svg | 5 + icons/replace.svg | 5 + icons/rndcheck-not.svg | 5 + icons/rndcheck-ok.svg | 5 + icons/sector.svg | 5 + icons/sendemail.svg | 5 + icons/settings.svg | 5 + icons/shop.svg | 5 + icons/shrink.svg | 5 + icons/squares.svg | 5 + icons/staff.svg | 5 + icons/star.svg | 5 + icons/sum.svg | 5 + icons/table.svg | 5 + icons/template.svg | 5 + icons/timeentry.svg | 5 + icons/timeexit.svg | 5 + icons/trash.svg | 5 + icons/unlock.svg | 5 + icons/untitled.svg | 5 + icons/upload.svg | 5 + icons/user.svg | 5 + icons/usertime.svg | 5 + icons/vacancydays.svg | 5 + icons/week.svg | 5 + install/update_app.sh | 82 +- webfonts/README.txt | 75 + webfonts/config.json | 1873 +++++++++++++++ webfonts/css/animation.css | 85 + webfonts/css/appicons-codes.css | 134 ++ webfonts/css/appicons-codes.scss | 134 ++ webfonts/css/appicons-embedded.css | 187 ++ webfonts/css/appicons-ie7-codes.css | 134 ++ webfonts/css/appicons-ie7.css | 145 ++ webfonts/css/appicons.css | 190 ++ webfonts/demo.html | 470 ++++ webfonts/font/appicons.eot | Bin 0 -> 34560 bytes webfonts/font/appicons.svg | 276 +++ webfonts/font/appicons.ttf | Bin 0 -> 34392 bytes webfonts/font/appicons.woff | Bin 0 -> 21892 bytes webfonts/font/appicons.woff2 | Bin 0 -> 18128 bytes 170 files changed, 7273 insertions(+), 2897 deletions(-) create mode 100644 app/css/font/appicons.eot create mode 100644 app/css/font/appicons.svg create mode 100644 app/css/font/appicons.ttf create mode 100644 app/css/font/appicons.woff create mode 100644 app/css/font/appicons.woff2 delete mode 100644 app/css/fonts/appicons.eot delete mode 100644 app/css/fonts/appicons.svg delete mode 100644 app/css/fonts/appicons.ttf delete mode 100644 app/css/fonts/appicons.woff delete mode 100644 app/log/csql.log delete mode 100644 app/log/nsql.log delete mode 100644 app/log/xsql.log create mode 100644 app/tmpl/module/js/tablehelper.js create mode 100644 app/tmpl/module/manifest.webmanifest create mode 100644 dev/create_cssicons.ps1 create mode 100644 icons/Floppy.svg create mode 100644 icons/Save.svg create mode 100644 icons/access.svg create mode 100644 icons/address.svg create mode 100644 icons/aggrement.svg create mode 100644 icons/apps.svg create mode 100644 icons/archive.svg create mode 100644 icons/back.svg create mode 100644 icons/baggage.svg create mode 100644 icons/bulletlist.svg create mode 100644 icons/calendar.svg create mode 100644 icons/calendar1.svg create mode 100644 icons/category.svg create mode 100644 icons/check.svg create mode 100644 icons/clocktime.svg create mode 100644 icons/code.svg create mode 100644 icons/coin.svg create mode 100644 icons/company.svg create mode 100644 icons/copy.svg create mode 100644 icons/cube.svg create mode 100644 icons/cube1.svg create mode 100644 icons/cubelight.svg create mode 100644 icons/cubelight1.svg create mode 100644 icons/dashboard.svg create mode 100644 icons/dashboard1.svg create mode 100644 icons/datarefresh.svg create mode 100644 icons/dataset.svg create mode 100644 icons/detailview.svg create mode 100644 icons/documents.svg create mode 100644 icons/documentsave.svg create mode 100644 icons/download.svg create mode 100644 icons/duplicate.svg create mode 100644 icons/duplicate1.svg create mode 100644 icons/edit.svg create mode 100644 icons/entry.svg create mode 100644 icons/erase.svg create mode 100644 icons/excel.svg create mode 100644 icons/exit.svg create mode 100644 icons/expand.svg create mode 100644 icons/expand2.svg create mode 100644 icons/eye-close.svg create mode 100644 icons/eye-open.svg create mode 100644 icons/file.svg create mode 100644 icons/finger1.svg create mode 100644 icons/finger2.svg create mode 100644 icons/finger3.svg create mode 100644 icons/finger4.svg create mode 100644 icons/finger5.svg create mode 100644 icons/fingerprint-check.svg create mode 100644 icons/fingerprint-crosshair.svg create mode 100644 icons/fingerprint-remove.svg create mode 100644 icons/fingerprint-scanning.svg create mode 100644 icons/fingerprint-search.svg create mode 100644 icons/fingerprint-simple.svg create mode 100644 icons/folder.svg create mode 100644 icons/folder_add.svg create mode 100644 icons/folder_delete.svg create mode 100644 icons/folder_find.svg create mode 100644 icons/globe.svg create mode 100644 icons/group.svg create mode 100644 icons/help.svg create mode 100644 icons/helpfile.svg create mode 100644 icons/history.svg create mode 100644 icons/home.svg create mode 100644 icons/house.svg create mode 100644 icons/inbox.svg create mode 100644 icons/info.svg create mode 100644 icons/key.svg create mode 100644 icons/library.svg create mode 100644 icons/list.svg create mode 100644 icons/lock.svg create mode 100644 icons/log.svg create mode 100644 icons/logout.svg create mode 100644 icons/menu.svg create mode 100644 icons/menudown.svg create mode 100644 icons/newspaper.svg create mode 100644 icons/next.svg create mode 100644 icons/normalview.svg create mode 100644 icons/numberlist.svg create mode 100644 icons/package.svg create mode 100644 icons/paste.svg create mode 100644 icons/pause.svg create mode 100644 icons/pay.svg create mode 100644 icons/pdf.svg create mode 100644 icons/pdfexport.svg create mode 100644 icons/pictures.svg create mode 100644 icons/plus.svg create mode 100644 icons/projects.svg create mode 100644 icons/qube.svg create mode 100644 icons/remove.svg create mode 100644 icons/rename.svg create mode 100644 icons/replace.svg create mode 100644 icons/rndcheck-not.svg create mode 100644 icons/rndcheck-ok.svg create mode 100644 icons/sector.svg create mode 100644 icons/sendemail.svg create mode 100644 icons/settings.svg create mode 100644 icons/shop.svg create mode 100644 icons/shrink.svg create mode 100644 icons/squares.svg create mode 100644 icons/staff.svg create mode 100644 icons/star.svg create mode 100644 icons/sum.svg create mode 100644 icons/table.svg create mode 100644 icons/template.svg create mode 100644 icons/timeentry.svg create mode 100644 icons/timeexit.svg create mode 100644 icons/trash.svg create mode 100644 icons/unlock.svg create mode 100644 icons/untitled.svg create mode 100644 icons/upload.svg create mode 100644 icons/user.svg create mode 100644 icons/usertime.svg create mode 100644 icons/vacancydays.svg create mode 100644 icons/week.svg create mode 100644 webfonts/README.txt create mode 100644 webfonts/config.json create mode 100644 webfonts/css/animation.css create mode 100644 webfonts/css/appicons-codes.css create mode 100644 webfonts/css/appicons-codes.scss create mode 100644 webfonts/css/appicons-embedded.css create mode 100644 webfonts/css/appicons-ie7-codes.css create mode 100644 webfonts/css/appicons-ie7.css create mode 100644 webfonts/css/appicons.css create mode 100644 webfonts/demo.html create mode 100644 webfonts/font/appicons.eot create mode 100644 webfonts/font/appicons.svg create mode 100644 webfonts/font/appicons.ttf create mode 100644 webfonts/font/appicons.woff create mode 100644 webfonts/font/appicons.woff2 diff --git a/.gitignore b/.gitignore index 1a4cffb2..afcf0819 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ release install/tmp/* app/sql.log app/put.log +app/log/*.log diff --git a/app/css/font/appicons.eot b/app/css/font/appicons.eot new file mode 100644 index 0000000000000000000000000000000000000000..556457f443708c55f8e044cc5712b9a34812a8cf GIT binary patch literal 37428 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 lsAPDwL9|5 + + +Copyright (C) 2021 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/css/font/appicons.ttf b/app/css/font/appicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8afc6072ff16ec90ddd6ff141bf6cb846c330bd2 GIT binary patch literal 37260 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ℜI4X`Kail`#^3D_hZc;R1}s5H z9d8sX^N@}H+yQ+^Zj3@(*=A`_E-`t?E7fyOttQY~1Rvq(7Hv`twh^V4KAlxlQ4*W^ zF)O@3dV>{LYY$grRyAx|ioz-!K{4uHXecv<3b?Z6D=GKQ0N}z5fHpOvJfm9depCr% z_Ej4FcBw$nwek*`_S*X_75<*$hUeXP_mf0%kLQo+SMLy~zK5NMgTwQxx#B->YjYD| znz`k6d0WU!yJT}TEgJdbLLNnXG4T|GS?z$0=YTMUI3!^^rlS6GD8tRcremG=HY<%S z8Qi2DF!67BU-#=2PGHr_+4l{E{IPa<(3dti_vfwdS0}OqNvUo+COD9ESg;H%)o5B8 zjL+iy*DM?lpL(I$!wF6mFZ3q{nw`6=4xO#Y=YGUH>J>Q>e7&9a&*~P>SZ-tZNA!Q4 zj_uoW_MN1FzmgG1Dh706#iDoA5xlBYw9PDa=*OLtuwYg{k|i(4UJcEVU8^faSp=vi_x}|p zJsOj#)0haCY-;HouZ?#UJ|%QmqTkX`6M}ZMD8SVe!$v1mbDx@*m!_cN3$5D874ei4 zWT4iioJd@8kySLaZMn=FV|m}ScvQ;t2!Pjmrd9y!fo(p3@#vVZDwat;uYkk64M8k8 zyLFU*Ean>lf^Qb)J^00g zCe$iKJ7j~u4%UcSak?V@*UV%CHY|v_K_wMkQ(T?*RE;-S_6lJw7^(l4B_vuvp86g$ za0parBfDrr1i2KGebMcbqF}DBp57$i7aM~J8c1#0$g6VR4_P8HyJE@hR_i^La1u`%aiyrLazuRGI(L)$1;>^`>68csP!M#h0jG7iB zta`Tr%%hfq>NdklV>x1xL)JheswSs!td53jz`=4<8)}I`tM5&6ZO(Cyf6kEey?+6A z?go_BEt4mCTy+SPN_n}hC?_a|#X0*E))Wv`okyb(sjC-URA_Wj(AoMB%tF$}?EOQ9 ztVBA>L7{(3�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 Cx_Y+& literal 0 HcmV?d00001 diff --git a/app/css/font/appicons.woff2 b/app/css/font/appicons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8fd60c94cc8f5a8abed51d6ce7d42a6ea652f9e9 GIT binary patch literal 18384 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 - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/css/fonts/appicons.ttf b/app/css/fonts/appicons.ttf deleted file mode 100644 index f052558c812cf2a3bdbdd71d1d888a35d7693ddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39664 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 - $html["result"] = $retid["0"]; + if (isset($retid) && isset($retid["0"])){ + $html["result"] = $retid["0"]; + } else { + $html["result"] = null; + } + } } elseif (isset($p["fn"])){ + error_log("FN isset!".$p["fn"].print_r($p,true)); + $schema = "public"; if (isset($p["schemata"])){ $schema = $db->securetext($p["schemata"]); } if (preg_match('/getfreeschema$|installschema$|del_company$|del_staffgroup$|set_staffgroup$/',$p["fn"])){ + //error_log("Pregmatch Company"); $cp = new Company($db,$cfg); # print STDERR $p["fn"].": Company\n"; if ($p["fn"] == "installschema"){ @@ -337,7 +345,8 @@ }elseif ($p["fn"] = "set_staffgroup"){ $html["result"] = $cp->setStaffGroup($schema,$db->securetext($p["id_staffgroup"]),$db->securetext($p["groupname"])); } - } elseif (preg_match('/del_staff$|del_staffcontract$|add_staff$|/',$p["fn"])) { + } elseif (preg_match('/del_staff$|del_staffcontract$|add_staff$/',$p["fn"])) { + error_log("Pregmatch Staff"); # print STDERR $p["fn"].": Staff\n"; $st = new Staff($db,$cfg); if ($p["fn"] == "del_staff"){ @@ -352,6 +361,7 @@ // } } elseif (preg_match('/clone_staffperiodweekdayhours$|clean_staffperiodday$|replace_staffperiodweekdayhours$|update_staff_in_period$|getworktimelimits$|refresh_periods$|add_reportperiod$|save_payedhours$|^invalidate_period$|^validate_period$/',$p["fn"])) { # print STDERR $p["fn"].": Period\n"; + //error_log("Pregmatch Period"); $pd= new Period($db,$cfg); if ($p["fn"] == "clone_staffperiodweekdayhours"){ @@ -377,6 +387,7 @@ $html["result"] = $pd->invalidatePeriod($schema,$db->securetext($p["id_period"]),$db->securetext($p["id_staff"])); } } elseif (preg_match('/add_workplan$|del_workplan$|duplicate_workplan$|workplan_replaceday$|workplan_saveday$/',$p["fn"])) { + //error_log("Pregmatch Workplan"); $wp = new Workplan($db,$cfg); # print STDERR $p["fn"].": Workplan\n"; if ($p["fn"] == "add_workplan"){ @@ -389,9 +400,11 @@ $html["result"] = $wp->replaceWorkplanDay($schema,$db->securetext($p["copyid"]),$db->securetext($p["pasteid"])); } elseif ($p["fn"] == "workplan_saveday"){ #print STDERR Dumper($p["workplanday"]); + error_log("saveday!!!!"); $html["result"] = $wp->saveWorkplanDay($schema,$p["workplanday"],$db->securetext($p["id"])); } } elseif (preg_match('/del_worktimes$/',$p["fn"])) { + //error_log("Pregmatch del_worktimes"); # print STDERR $p["fn"].": Worktime\n"; $wk = new Worktime($db,$cfg); if ($p["fn"] == "del_worktimes"){ @@ -399,6 +412,7 @@ } } elseif (preg_match('/del_user$|add_user$|useracceptedterms$|validatelogin$|changelanguage$/',$p["fn"])) { # print STDERR $p["fn"].": User\n"; + //error_log("Pregmatch Users"); $us = new User($db,$cfg); if ($p["fn"] == "del_user"){ if ($sess["id"] != $p["id"]){ @@ -417,15 +431,16 @@ } } elseif (preg_match('/savetrackdatasets$/',$p["fn"])) { + // error_log("pregmatch savetrackdatasety"); $tt = new TimeTracker($db,$cfg); //error_log("Save Track DataSET!!!".print_r($p,true)); if ($p["fn"] == "savetrackdatasets"){ $html["result"] = $tt->saveTrackDataSets($schema,$p["daydate"],$p["id_staff"],$p["timetrackdata"]); } } - # else{ - # print STDERR "fn:".$p["fn"]." not found\n"; - # } + // else{ + // error_log("NOOO Pregmatch!"); + // } } header('Content-Type: application/json'); diff --git a/app/lib/POT/Period.php b/app/lib/POT/Period.php index d5f3d152..64892d31 100644 --- a/app/lib/POT/Period.php +++ b/app/lib/POT/Period.php @@ -297,7 +297,7 @@ where daydate between date('".$pstart."') and date('".$pend."') and id_staff ='" } function getPeriodDays($schema,$id_staff,$date_start,$date_end){ - $sql = "SELECT pd.id,pd.id_staff,pd.id_reportperiod,pd.daydate,pd.payedpause,pd.daytype, + $sql = "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, diff --git a/app/lib/POT/Workplan.php b/app/lib/POT/Workplan.php index afd4886c..834e40c3 100644 --- a/app/lib/POT/Workplan.php +++ b/app/lib/POT/Workplan.php @@ -21,7 +21,7 @@ class Workplan{ $this->dbh->exec($sql); $cnt = $this->dbh->query("select count(id) as cnt from ".$schema.".workplans;"); if ($cnt["cnt"] == "1"){ - $this->dbh->exec("update ".$schema.".workplans set isdefault = true where id='".$wk["id"]."';"); + $this->dbh->exec(" set isdefault = true where id='".$wk["id"]."';"); } return $wk["id"]; } @@ -143,9 +143,9 @@ class Workplan{ $ispayedpause = $this->dbh->query("select payedpauses from public.companies where schemata='".$schema."'"); $payedpauses = ""; if ($ispayedpause["payedpauses"] != "1"){ - $payedpauses = " - coalesce(pause, '00:00:00'::time without time zo!=)"; + $payedpauses = " - coalesce(pause, '00:00:00'::time without time zone)"; } - $sql = "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) ".$payedpauses.") as weekhours from ".$schema.".workplandays where id_workplan='".$workplan_id."' group by id_workplan;"; + $sql = "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) ".$payedpauses.") as weekhours from ".$schema.".workplandays where id_workplan='".$workplan_id."' group by id_workplan;"; $wddata = $this->dbh->query($sql); $updsql = "UPDATE ".$schema.".workplans SET weekhours='".$wddata["weekhours"]."', weekdays=".$wddata["weekdays"].", freeweekdayslist='".$wddata["freedays"]."' WHERE id='".$workplan_id."'"; $this->dbh->exec($updsql); diff --git a/app/lib/POT/Worktime.php b/app/lib/POT/Worktime.php index 3e5e50fc..e93b8ab6 100644 --- a/app/lib/POT/Worktime.php +++ b/app/lib/POT/Worktime.php @@ -7,6 +7,7 @@ class Worktime{ $this->dbh = $dblink; $this->cfg = $cfg; } + public function __destruct(){ $this->conn = null; } diff --git a/app/lib/config.php b/app/lib/config.php index 88187085..6da61e2a 100644 --- a/app/lib/config.php +++ b/app/lib/config.php @@ -7,7 +7,7 @@ "datapath" => "data/output/", "helppath" => "data/help/", "liveurl" => "https://dks-laptop/potapp/", - "debug" => 0, + "debug" => 1, //"cookie" => "potlu140", // "db"=> array( // "type" => "pgsql", @@ -23,7 +23,7 @@ "user" => 'potlu2_user', "password" => 'dMY8xGB6cBLzrDGE', "logfile" => "log/sql.log", - "debug" => 0 + "debug" => 1 ), "htxuser" => "htx", "htxpwd" => "Aib5aevo", diff --git a/app/lib/lang/de.php b/app/lib/lang/de.php index 76ba2cc5..4102e0a3 100644 --- a/app/lib/lang/de.php +++ b/app/lib/lang/de.php @@ -230,7 +230,7 @@ "avgweek_short2" => "Durchschnitt", "validated2" => "val.", "vacancyextra3" => "Sonderurl.", - "comment" => "Bemerkung...", + "comment" => "Bemerkung", "datasaved" => "Die Daten wurden gespeichert!", "timeperiod" => "Zeitraum", "viewonlyweeks" => "Tage ausblenden", @@ -265,4 +265,5 @@ "freeweekdays" => "freie Wochentage (option)", "freedays" => "freie Wochentage", "maxdays" => "Arbeits-
tage", + "difference" => "Differenz" ); ?> \ No newline at end of file diff --git a/app/lib/lang/fr.php b/app/lib/lang/fr.php index c592ac7d..268e2bdf 100644 --- a/app/lib/lang/fr.php +++ b/app/lib/lang/fr.php @@ -230,7 +230,7 @@ "avgweek_short2" => "moyenne", "validated2" => "val.", "vacancyextra3" => "c. except.", - "comment" => "note...", + "comment" => "remarque", "datasaved" => "Les données ont été sauvegardées!", "timeperiod" => "période", "viewonlyweeks" => "masquer jours", @@ -265,5 +265,6 @@ "supphoursworked" => "heures suppl. travaillées", "freeweekdays" => "jours de repos (option)", "freedays" => "jours de repos", - "maxdays" => "jours
de travail" + "maxdays" => "jours
de travail", + "difference" => "différence" ); ?> \ No newline at end of file diff --git a/app/lib/version.php b/app/lib/version.php index 533d45c0..77d0982c 100644 --- a/app/lib/version.php +++ b/app/lib/version.php @@ -1,5 +1,5 @@ 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '20b53171-4182-d837-21b7-33ef52d49329' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '7969b272-ba37-e27a-b374-f8ae12278a7f' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '7969b272-ba37-e27a-b374-f8ae12278a7f' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '20b53171-4182-d837-21b7-33ef52d49329' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '20b53171-4182-d837-21b7-33ef52d49329' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '20b53171-4182-d837-21b7-33ef52d49329' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = 'f18a67e3-1b2f-dbed-85e9-1b35912f943e' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = 'f18a67e3-1b2f-dbed-85e9-1b35912f943e' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = 'f18a67e3-1b2f-dbed-85e9-1b35912f943e' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '5966c9c3-f97a-0cf5-2d99-6ad2aceb2dec' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '2eec5d6c-2cc6-cb11-3439-596e210dea5c' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; -PD: -SELECT st.prename, st.surname, coalesce(st.surname || ' ','') || coalesce(st.prename,'') as name, - to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours, - to_char(srp.workhours, 'HH24:MI'::text) AS workhours, - --to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours, - to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill, - to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal, - to_char(srp.vacancyextra, 'HH24:MI'::text) AS vacancyextra, - to_char(srp.otherpaidhours, 'HH24:MI'::text) AS otherpaidhours, - to_char(srp.partunemplhours, 'HH24:MI'::text) AS partunemplhours, - to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours, - case when position('-' in to_char(srp.hoursdiff, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff, - to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours, - srp.id as id_staffreportperiod,srp.id_reportperiod, srp.id_staff, srp.id, rp.startdate, rp.enddate, - COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname, - st.id_staffgroup, sgr.groupname, - case when position('-' in to_char(srp.transferedhours, 'HH24:MI')) > 0 then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours, - case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork, - case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours - ,itmcontracthours,maxdays,srp.isvalidated, - to_char(srp.payedhours40calc,'HH24:MI'::text) AS payedhours, - to_char(payedhours0, 'HH24:MI'::text) as payedhours0, - to_char(payedhours40, 'HH24:MI'::text) as payedhours40, - to_char(payedhours40calc, 'HH24:MI'::text) as payedhours40calc, - to_char(hourstotransfer, 'HH24:MI'::text) as hourstotransfer, - to_char(hourstotransfercalc, 'HH24:MI'::text) as hourstotransfercalc, - to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours - FROM kraeltgen.staffreportperiod srp - LEFT JOIN kraeltgen.staff st ON srp.id_staff = st.id - LEFT JOIN kraeltgen.reportperiod rp ON srp.id_reportperiod = rp.id - LEFT JOIN kraeltgen.staffgroups sgr ON st.id_staffgroup = sgr.id - WHERE st.isdeleted IS NULL AND srp.id_staff = '6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ORDER BY st.surname, st.prename, srp.id_staff, rp.startdate, rp.enddate; diff --git a/app/log/sql.log b/app/log/sql.log index e69de29b..5343fc7c 100644 --- a/app/log/sql.log +++ b/app/log/sql.log @@ -0,0 +1,2338 @@ +QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from 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 se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from 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 '
' 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 '
' 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 '
' 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 '
' 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 '
' 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 '
' 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'; +QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from 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 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 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 * 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; +QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from 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 '
' 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 '
' 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 + 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; +QUERY: select se.id as idsession,us.lang,us.id,us.username,ugrp.id as usergroup,us.id_staffgroups as staffgroups,se.sessiondata from 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 '
' 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 '
' 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 '
' 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 '
' 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 '
' 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 '
' 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 '
' 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 '
' 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; diff --git a/app/log/xsql.log b/app/log/xsql.log deleted file mode 100644 index 6d974c10..00000000 --- a/app/log/xsql.log +++ /dev/null @@ -1,867 +0,0 @@ -Staff.php:58:select id,startdate,enddate from kraeltgen.reportperiod where -startdate >= date((select min(startdate) from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15')) -or date((select min(startdate) from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15')) between startdate and enddate order by startdate,enddate; - -Array -( - [0] => Array - ( - [id] => 529236a0-bb8e-c0dd-6dfd-406fe2f59aff - [startdate] => 2020-01-01 - [enddate] => 2020-02-29 - ) - - [1] => Array - ( - [id] => 872690b5-74c8-6eb3-2c9c-2ad47ea57995 - [startdate] => 2020-03-01 - [enddate] => 2020-04-30 - ) - - [2] => Array - ( - [id] => c70d0d68-b69f-2b02-cec3-d82b47eca9b6 - [startdate] => 2020-05-01 - [enddate] => 2020-06-30 - ) - - [3] => Array - ( - [id] => f9ed771d-6236-f6f3-caa7-e678a49023d0 - [startdate] => 2020-07-01 - [enddate] => 2020-08-31 - ) - - [4] => Array - ( - [id] => 1f489513-7b98-efb4-d16d-f3baeceb846a - [startdate] => 2020-09-01 - [enddate] => 2020-10-31 - ) - - [5] => Array - ( - [id] => 83f75caf-b28e-5c31-cd74-d7a7bd23e960 - [startdate] => 2020-11-01 - [enddate] => 2020-12-31 - ) - - [6] => Array - ( - [id] => da4487e9-aaf6-ee29-0718-0e6b61ab9ebc - [startdate] => 2021-01-01 - [enddate] => 2021-02-28 - ) - - [7] => Array - ( - [id] => d85f8825-82dc-ff12-24c3-94e2967d22c0 - [startdate] => 2021-03-01 - [enddate] => 2021-04-30 - ) - - [8] => Array - ( - [id] => f7f28bf3-b8c4-e1f1-2152-c253e23cc9a1 - [startdate] => 2021-05-01 - [enddate] => 2021-06-30 - ) - - [9] => Array - ( - [id] => a0538335-1f82-8312-8a62-2e42ea74ed20 - [startdate] => 2021-07-01 - [enddate] => 2021-08-31 - ) - - [10] => Array - ( - [id] => ec6261df-f5df-d1b9-7ca1-639d79e82bfe - [startdate] => 2021-09-01 - [enddate] => 2021-10-31 - ) - - [11] => Array - ( - [id] => d1fe1b59-0129-bb85-53da-a4f9f69d9b83 - [startdate] => 2021-11-01 - [enddate] => 2021-12-31 - ) - -) - - -Array -( - [id] => 529236a0-bb8e-c0dd-6dfd-406fe2f59aff - [startdate] => 2020-01-01 - [enddate] => 2020-02-29 -) - - -Staff.php:79:1: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='529236a0-bb8e-c0dd-6dfd-406fe2f59aff' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-01-01'),date('2020-02-29'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 44 as maxdays,44 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-01-01') and date('2020-02-29') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-02-29') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-02-29')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=44,contracthours='352:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='529236a0-bb8e-c0dd-6dfd-406fe2f59aff'; - -Staff.php:58:select id,startdate,enddate from kraeltgen.reportperiod where -startdate >= date((select min(startdate) from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15')) -or date((select min(startdate) from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15')) between startdate and enddate order by startdate,enddate; - -Array -( - [0] => Array - ( - [id] => 529236a0-bb8e-c0dd-6dfd-406fe2f59aff - [startdate] => 2020-01-01 - [enddate] => 2020-02-29 - ) - - [1] => Array - ( - [id] => 872690b5-74c8-6eb3-2c9c-2ad47ea57995 - [startdate] => 2020-03-01 - [enddate] => 2020-04-30 - ) - - [2] => Array - ( - [id] => c70d0d68-b69f-2b02-cec3-d82b47eca9b6 - [startdate] => 2020-05-01 - [enddate] => 2020-06-30 - ) - - [3] => Array - ( - [id] => f9ed771d-6236-f6f3-caa7-e678a49023d0 - [startdate] => 2020-07-01 - [enddate] => 2020-08-31 - ) - - [4] => Array - ( - [id] => 1f489513-7b98-efb4-d16d-f3baeceb846a - [startdate] => 2020-09-01 - [enddate] => 2020-10-31 - ) - - [5] => Array - ( - [id] => 83f75caf-b28e-5c31-cd74-d7a7bd23e960 - [startdate] => 2020-11-01 - [enddate] => 2020-12-31 - ) - - [6] => Array - ( - [id] => da4487e9-aaf6-ee29-0718-0e6b61ab9ebc - [startdate] => 2021-01-01 - [enddate] => 2021-02-28 - ) - - [7] => Array - ( - [id] => d85f8825-82dc-ff12-24c3-94e2967d22c0 - [startdate] => 2021-03-01 - [enddate] => 2021-04-30 - ) - - [8] => Array - ( - [id] => f7f28bf3-b8c4-e1f1-2152-c253e23cc9a1 - [startdate] => 2021-05-01 - [enddate] => 2021-06-30 - ) - - [9] => Array - ( - [id] => a0538335-1f82-8312-8a62-2e42ea74ed20 - [startdate] => 2021-07-01 - [enddate] => 2021-08-31 - ) - - [10] => Array - ( - [id] => ec6261df-f5df-d1b9-7ca1-639d79e82bfe - [startdate] => 2021-09-01 - [enddate] => 2021-10-31 - ) - - [11] => Array - ( - [id] => d1fe1b59-0129-bb85-53da-a4f9f69d9b83 - [startdate] => 2021-11-01 - [enddate] => 2021-12-31 - ) - -) - - -Array -( - [id] => 529236a0-bb8e-c0dd-6dfd-406fe2f59aff - [startdate] => 2020-01-01 - [enddate] => 2020-02-29 -) - - -Staff.php:79:1: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='529236a0-bb8e-c0dd-6dfd-406fe2f59aff' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-01-01'),date('2020-02-29'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 44 as maxdays,44 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-01-01') and date('2020-02-29') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-02-29') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-02-29')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=44,contracthours='352:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='529236a0-bb8e-c0dd-6dfd-406fe2f59aff'; - -Staff.php:58:select id,startdate,enddate from kraeltgen.reportperiod where -startdate >= date((select min(startdate) from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15')) -or date((select min(startdate) from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15')) between startdate and enddate order by startdate,enddate; - -Array -( - [0] => Array - ( - [id] => 529236a0-bb8e-c0dd-6dfd-406fe2f59aff - [startdate] => 2020-01-01 - [enddate] => 2020-02-29 - ) - - [1] => Array - ( - [id] => 872690b5-74c8-6eb3-2c9c-2ad47ea57995 - [startdate] => 2020-03-01 - [enddate] => 2020-04-30 - ) - - [2] => Array - ( - [id] => c70d0d68-b69f-2b02-cec3-d82b47eca9b6 - [startdate] => 2020-05-01 - [enddate] => 2020-06-30 - ) - - [3] => Array - ( - [id] => f9ed771d-6236-f6f3-caa7-e678a49023d0 - [startdate] => 2020-07-01 - [enddate] => 2020-08-31 - ) - - [4] => Array - ( - [id] => 1f489513-7b98-efb4-d16d-f3baeceb846a - [startdate] => 2020-09-01 - [enddate] => 2020-10-31 - ) - - [5] => Array - ( - [id] => 83f75caf-b28e-5c31-cd74-d7a7bd23e960 - [startdate] => 2020-11-01 - [enddate] => 2020-12-31 - ) - - [6] => Array - ( - [id] => da4487e9-aaf6-ee29-0718-0e6b61ab9ebc - [startdate] => 2021-01-01 - [enddate] => 2021-02-28 - ) - - [7] => Array - ( - [id] => d85f8825-82dc-ff12-24c3-94e2967d22c0 - [startdate] => 2021-03-01 - [enddate] => 2021-04-30 - ) - - [8] => Array - ( - [id] => f7f28bf3-b8c4-e1f1-2152-c253e23cc9a1 - [startdate] => 2021-05-01 - [enddate] => 2021-06-30 - ) - - [9] => Array - ( - [id] => a0538335-1f82-8312-8a62-2e42ea74ed20 - [startdate] => 2021-07-01 - [enddate] => 2021-08-31 - ) - - [10] => Array - ( - [id] => ec6261df-f5df-d1b9-7ca1-639d79e82bfe - [startdate] => 2021-09-01 - [enddate] => 2021-10-31 - ) - - [11] => Array - ( - [id] => d1fe1b59-0129-bb85-53da-a4f9f69d9b83 - [startdate] => 2021-11-01 - [enddate] => 2021-12-31 - ) - -) - - -Array -( - [id] => 529236a0-bb8e-c0dd-6dfd-406fe2f59aff - [startdate] => 2020-01-01 - [enddate] => 2020-02-29 -) - - -Staff.php:79:1: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='529236a0-bb8e-c0dd-6dfd-406fe2f59aff' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-01-01'),date('2020-02-29'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 44 as maxdays,44 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-01-01') and date('2020-02-29') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-02-29') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-02-29')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=44,contracthours='352:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='529236a0-bb8e-c0dd-6dfd-406fe2f59aff'; - -Staff.php:58:select id,startdate,enddate from kraeltgen.reportperiod where -startdate >= date((select min(startdate) from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15')) -or date((select min(startdate) from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15')) between startdate and enddate order by startdate,enddate; - -Array -( - [0] => Array - ( - [id] => 529236a0-bb8e-c0dd-6dfd-406fe2f59aff - [startdate] => 2020-01-01 - [enddate] => 2020-02-29 - ) - - [1] => Array - ( - [id] => 872690b5-74c8-6eb3-2c9c-2ad47ea57995 - [startdate] => 2020-03-01 - [enddate] => 2020-04-30 - ) - - [2] => Array - ( - [id] => c70d0d68-b69f-2b02-cec3-d82b47eca9b6 - [startdate] => 2020-05-01 - [enddate] => 2020-06-30 - ) - - [3] => Array - ( - [id] => f9ed771d-6236-f6f3-caa7-e678a49023d0 - [startdate] => 2020-07-01 - [enddate] => 2020-08-31 - ) - - [4] => Array - ( - [id] => 1f489513-7b98-efb4-d16d-f3baeceb846a - [startdate] => 2020-09-01 - [enddate] => 2020-10-31 - ) - - [5] => Array - ( - [id] => 83f75caf-b28e-5c31-cd74-d7a7bd23e960 - [startdate] => 2020-11-01 - [enddate] => 2020-12-31 - ) - - [6] => Array - ( - [id] => da4487e9-aaf6-ee29-0718-0e6b61ab9ebc - [startdate] => 2021-01-01 - [enddate] => 2021-02-28 - ) - - [7] => Array - ( - [id] => d85f8825-82dc-ff12-24c3-94e2967d22c0 - [startdate] => 2021-03-01 - [enddate] => 2021-04-30 - ) - - [8] => Array - ( - [id] => f7f28bf3-b8c4-e1f1-2152-c253e23cc9a1 - [startdate] => 2021-05-01 - [enddate] => 2021-06-30 - ) - - [9] => Array - ( - [id] => a0538335-1f82-8312-8a62-2e42ea74ed20 - [startdate] => 2021-07-01 - [enddate] => 2021-08-31 - ) - - [10] => Array - ( - [id] => ec6261df-f5df-d1b9-7ca1-639d79e82bfe - [startdate] => 2021-09-01 - [enddate] => 2021-10-31 - ) - - [11] => Array - ( - [id] => d1fe1b59-0129-bb85-53da-a4f9f69d9b83 - [startdate] => 2021-11-01 - [enddate] => 2021-12-31 - ) - -) - - -Array -( - [id] => 529236a0-bb8e-c0dd-6dfd-406fe2f59aff - [startdate] => 2020-01-01 - [enddate] => 2020-02-29 -) - - -Staff.php:79:1: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='529236a0-bb8e-c0dd-6dfd-406fe2f59aff' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-01-01'),date('2020-02-29'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 44 as maxdays,44 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-01-01') and date('2020-02-29') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-02-29') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-02-29')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=44,contracthours='352:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='529236a0-bb8e-c0dd-6dfd-406fe2f59aff'; - -Array -( - [id] => 872690b5-74c8-6eb3-2c9c-2ad47ea57995 - [startdate] => 2020-03-01 - [enddate] => 2020-04-30 -) - - -Staff.php:79:2: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='872690b5-74c8-6eb3-2c9c-2ad47ea57995' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-03-01'),date('2020-04-30'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 43 as maxdays,43 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-03-01') and date('2020-04-30') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=43,contracthours='344:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='872690b5-74c8-6eb3-2c9c-2ad47ea57995'; - -Array -( - [id] => c70d0d68-b69f-2b02-cec3-d82b47eca9b6 - [startdate] => 2020-05-01 - [enddate] => 2020-06-30 -) - - -Staff.php:79:3: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='c70d0d68-b69f-2b02-cec3-d82b47eca9b6' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-05-01'),date('2020-06-30'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 43 as maxdays,43 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-05-01') and date('2020-06-30') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-06-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-06-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=43,contracthours='344:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='c70d0d68-b69f-2b02-cec3-d82b47eca9b6'; - -Array -( - [id] => f9ed771d-6236-f6f3-caa7-e678a49023d0 - [startdate] => 2020-07-01 - [enddate] => 2020-08-31 -) - - -Staff.php:79:4: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='f9ed771d-6236-f6f3-caa7-e678a49023d0' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-07-01'),date('2020-08-31'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 45 as maxdays,45 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-07-01') and date('2020-08-31') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-08-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-08-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=45,contracthours='360:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='f9ed771d-6236-f6f3-caa7-e678a49023d0'; - -Array -( - [id] => 1f489513-7b98-efb4-d16d-f3baeceb846a - [startdate] => 2020-09-01 - [enddate] => 2020-10-31 -) - - -Staff.php:79:5: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='1f489513-7b98-efb4-d16d-f3baeceb846a' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-09-01'),date('2020-10-31'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 44 as maxdays,44 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-09-01') and date('2020-10-31') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=44,contracthours='352:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='1f489513-7b98-efb4-d16d-f3baeceb846a'; - -Array -( - [id] => 83f75caf-b28e-5c31-cd74-d7a7bd23e960 - [startdate] => 2020-11-01 - [enddate] => 2020-12-31 -) - - -Staff.php:79:6: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='83f75caf-b28e-5c31-cd74-d7a7bd23e960' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2020-11-01'),date('2020-12-31'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 43 as maxdays,43 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2020-11-01') and date('2020-12-31') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2020-12-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2020-12-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=43,contracthours='344:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='83f75caf-b28e-5c31-cd74-d7a7bd23e960'; - -Array -( - [id] => da4487e9-aaf6-ee29-0718-0e6b61ab9ebc - [startdate] => 2021-01-01 - [enddate] => 2021-02-28 -) - - -Staff.php:79:7: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='da4487e9-aaf6-ee29-0718-0e6b61ab9ebc' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-01-01'),date('2021-02-28'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 43 as maxdays,43 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2021-01-01') and date('2021-02-28') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2021-02-28') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2021-02-28')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=43,contracthours='344:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='da4487e9-aaf6-ee29-0718-0e6b61ab9ebc'; - -Array -( - [id] => d85f8825-82dc-ff12-24c3-94e2967d22c0 - [startdate] => 2021-03-01 - [enddate] => 2021-04-30 -) - - -Staff.php:79:8: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='d85f8825-82dc-ff12-24c3-94e2967d22c0' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-03-01'),date('2021-04-30'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 43 as maxdays,43 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2021-03-01') and date('2021-04-30') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2021-04-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2021-04-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=43,contracthours='344:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='d85f8825-82dc-ff12-24c3-94e2967d22c0'; - -Array -( - [id] => f7f28bf3-b8c4-e1f1-2152-c253e23cc9a1 - [startdate] => 2021-05-01 - [enddate] => 2021-06-30 -) - - -Staff.php:79:9: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='f7f28bf3-b8c4-e1f1-2152-c253e23cc9a1' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-05-01'),date('2021-06-30'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 43 as maxdays,43 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2021-05-01') and date('2021-06-30') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2021-06-30') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2021-06-30')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=43,contracthours='344:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='f7f28bf3-b8c4-e1f1-2152-c253e23cc9a1'; - -Array -( - [id] => a0538335-1f82-8312-8a62-2e42ea74ed20 - [startdate] => 2021-07-01 - [enddate] => 2021-08-31 -) - - -Staff.php:79:10: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='a0538335-1f82-8312-8a62-2e42ea74ed20' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-07-01'),date('2021-08-14'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 33 as maxdays,33 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2021-07-01') and date('2021-08-31') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2021-08-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2021-08-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=33,contracthours='264:00:00' where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='a0538335-1f82-8312-8a62-2e42ea74ed20'; - -Array -( - [id] => ec6261df-f5df-d1b9-7ca1-639d79e82bfe - [startdate] => 2021-09-01 - [enddate] => 2021-10-31 -) - - -Staff.php:79:11: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='ec6261df-f5df-d1b9-7ca1-639d79e82bfe' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-07-01'),date('2021-08-14'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 33 as maxdays,33 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2021-09-01') and date('2021-10-31') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2021-10-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2021-10-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=null,contracthours=null where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='ec6261df-f5df-d1b9-7ca1-639d79e82bfe'; - -Array -( - [id] => d1fe1b59-0129-bb85-53da-a4f9f69d9b83 - [startdate] => 2021-11-01 - [enddate] => 2021-12-31 -) - - -Staff.php:79:12: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 kraeltgen.staffcontract sc - cross join kraeltgen.reportperiod rp - where sc.id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) scx where startdate < enddate and id='d1fe1b59-0129-bb85-53da-a4f9f69d9b83' order by startdate,enddate; - -Staff.php:104:select sum(dow) as maxdays from ( select case when date_part('isodow',generate_series) in (1,2) then 0 else 1 end as dow from pg_catalog.generate_series(date('2021-07-01'),date('2021-08-14'),'1 day')) mxdays - -Staff.php:119:select sum(maxdays) as maxdays,sum(contracthours - ('00:00:'|| extract(second from contracthours))::interval ) as itmcontracthours from ( - select 33 as maxdays,33 * (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 kraeltgen.staffreportperioddays - where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and daydate between date('2021-11-01') and date('2021-12-31') - ) wgr - left join ( - select date(date_trunc('week',startdate)) as weekstartdate,startdate,case when enddate is null then date('2021-12-31') else enddate end as enddate,case when enddate is null then date(date_trunc('week',date('2021-12-31')) + interval '6 days') else enddate end as weekenddate,weekdays,weekhours from kraeltgen.staffcontract where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' - ) 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 - -Staff.php:124:update kraeltgen.staffreportperiod set maxdays=null,contracthours=null where id_staff='6840ae7a-f1e3-01b3-6ec5-6637f419ca15' and id_reportperiod='d1fe1b59-0129-bb85-53da-a4f9f69d9b83'; - diff --git a/app/tmpl/.htaccess b/app/tmpl/.htaccess index 908fc527..3725f010 100644 --- a/app/tmpl/.htaccess +++ b/app/tmpl/.htaccess @@ -1,5 +1,2 @@ -#RewriteEngine On -#RewriteBase / -#RewriteCond %{HTTP_COOKIE} !potlu= [NC] -#RewriteRule .* "%{REQUEST_SCHEME}://%{HTTP_HOST}/backoffice/login.html" [L] + Require all denied \ No newline at end of file diff --git a/app/tmpl/block/common_head.html b/app/tmpl/block/common_head.html index fcd3175f..c6f5fd02 100644 --- a/app/tmpl/block/common_head.html +++ b/app/tmpl/block/common_head.html @@ -40,7 +40,7 @@ - + diff --git a/app/tmpl/block/common_scripts.html b/app/tmpl/block/common_scripts.html index a2a125da..59ead397 100644 --- a/app/tmpl/block/common_scripts.html +++ b/app/tmpl/block/common_scripts.html @@ -1,11 +1,11 @@ \ No newline at end of file diff --git a/app/tmpl/block/dlgstaffperioddays.html b/app/tmpl/block/dlgstaffperioddays.html index 1d789842..0360bbd5 100644 --- a/app/tmpl/block/dlgstaffperioddays.html +++ b/app/tmpl/block/dlgstaffperioddays.html @@ -146,6 +146,11 @@ + {{ lbl.comment }} + + + + {{ lbl.vacancy }} / {{ lbl.recuperation }} / {{ lbl.exception }} {{ lbl.vacancy }} diff --git a/app/tmpl/index.html b/app/tmpl/index.html index 824cefb5..b11109d3 100644 --- a/app/tmpl/index.html +++ b/app/tmpl/index.html @@ -28,6 +28,7 @@ + {{ include('block/common_scripts.html') }} diff --git a/app/tmpl/module/index/index.js b/app/tmpl/module/index/index.js index 978feebb..a97e08a0 100644 --- a/app/tmpl/module/index/index.js +++ b/app/tmpl/module/index/index.js @@ -19,9 +19,9 @@ let index = { gettermsstatus: function(){ postData("db.php",{"cl":"User","fn":"getTermsStatus","id_user":"{{ session.id }}"}).then(data => { //console.log("termsstatus",data); - if (data.result.data.terms != "1"){ - document.getElementById("dlg_terms").style.display = 'block'; - } + // if (data.result.data.terms != "1"){ + // document.getElementById("dlg_terms").style.display = 'block'; + // } }); }, diff --git a/app/tmpl/module/js/app.js b/app/tmpl/module/js/app.js index 1971d72f..d37d854a 100644 --- a/app/tmpl/module/js/app.js +++ b/app/tmpl/module/js/app.js @@ -80,10 +80,10 @@ document.addEventListener("DOMContentLoaded", function() { }); if ("serviceWorker" in navigator) { - window.addEventListener("load", function() { - navigator.serviceWorker - .register("/js/sw.js") - .then(res => console.log("service worker registered")) - .catch(err => console.log("service worker not registered", err)) - }) + // window.addEventListener("load", function() { + // navigator.serviceWorker + // .register("/js/sw.js") + // .then(res => console.log("service worker registered")) + // .catch(err => console.log("service worker not registered", err)) + // }) } diff --git a/app/tmpl/module/js/tablehelper.js b/app/tmpl/module/js/tablehelper.js new file mode 100644 index 00000000..5eca6509 --- /dev/null +++ b/app/tmpl/module/js/tablehelper.js @@ -0,0 +1,48 @@ +let tablehelper = { + headerMenu: function(){ + + var menu = []; + var columns = this.getColumns(); + let first = true; + for(let column of columns){ + if (first){ first=false;continue;} + //create checkbox element using font awesome icons + let icon = document.createElement("span"); + icon.classList.add("icon-inline"); + icon.classList.add(column.isVisible() ? "icon-rndcheck-ok" : "icon-rndcheck-not"); + + //build label + let label = document.createElement("span"); + let title = document.createElement("span"); + + + title.innerHTML = " " + column.getDefinition().title.replace(/\/g,' '); + + label.appendChild(icon); + label.appendChild(title); + + //create menu item + menu.push({ + label:label, + action:function(e){ + //prevent menu closing + e.stopPropagation(); + + //toggle current column visibility + column.toggle(); + + //change menu item icon + if(column.isVisible()){ + icon.classList.remove("icon-rndcheck-not"); + icon.classList.add("icon-rndcheck-ok"); + }else{ + icon.classList.remove("icon-rndcheck-ok"); + icon.classList.add("icon-rndcheck-not"); + } + } + }); + } + + return menu; + } +} \ No newline at end of file diff --git a/app/tmpl/module/manifest.webmanifest b/app/tmpl/module/manifest.webmanifest new file mode 100644 index 00000000..9787eaf3 --- /dev/null +++ b/app/tmpl/module/manifest.webmanifest @@ -0,0 +1,53 @@ +{ + "name": "POT", + "short_name": "POT", + "icons": [ + { + "src": "/img/favicon/android-icon-36x36.png", + "sizes": "36x36", + "type": "image/png", + "density": "0.75" + }, + { + "src": "/img/favicon/android-icon-48x48.png", + "sizes": "48x48", + "type": "image/png", + "density": "1.0" + }, + { + "src": "/img/favicon/android-icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "density": "1.5" + }, + { + "src": "/img/favicon/android-icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "density": "2.0" + }, + { + "src": "/img/favicon/android-icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "density": "3.0" + }, + { + "src": "/img/favicon/android-icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "density": "4.0" + }, + { + "src": "/img/favicon/android-icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "density": "4.0" + } + ], + "start_url":"/index.html", + "background_color":"#52638e", + "theme_color":"#52638e", + "display":"standalone", + "orientation":"landscape" +} \ No newline at end of file diff --git a/app/tmpl/module/periods/reportperiod.js b/app/tmpl/module/periods/reportperiod.js index 9843c47c..ba1063f6 100644 --- a/app/tmpl/module/periods/reportperiod.js +++ b/app/tmpl/module/periods/reportperiod.js @@ -30,8 +30,6 @@ let reportperiod ={ rowContext:function(e, row){e.preventDefault();}, columns: [ {title: "{{ lbl.periods }}",field: "dspperiod",headerSort:true,resizable: false }, - //{title: "{{ lbl.start }}",field: "startdate",headerSort:"datetime",formatter:"datetime",resizable: false,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""} }, - //{title: "{{ lbl.end }}",field: "enddate",sorter:"datetime",resizable: false,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""} }, ] }); //let maincolumns = ; @@ -66,7 +64,7 @@ let reportperiod ={ ], columns: [ //{title: "{{ lbl.department }}",field:"groupname" , visible: false}, - {title: '{{ lbl.name }}',headerFilter:"input",width: 200, field:"name",headerSort: false }, + {title: '{{ lbl.name }}',headerFilter:"input",width: 200, field:"name",headerSort: false,headerMenu:tablehelper.headerMenu }, //{title: '{{ lbl.prename }}',headerFilter:"input",width: 170, field:"prename",headerSort: false }, //{title: '{{ lbl.name }}',headerFilter:"input",width: 170, field:"surname",headerSort: false}, {title: '{{ lbl.contract }}',width: 70, field:"contracthours",hozAlign:"right",headerSort: false}, @@ -74,12 +72,12 @@ let reportperiod ={ {title: '{{ lbl.recuperation_short }}',width: 65, field:"recuperationhours",hozAlign:"right",headerSort: false,formatter:periodRecupFormatter}, {title: '{{ lbl.vacancy }}',width: 65, field:"vacancynormal",hozAlign:"right",headerSort: false}, {title: '{{ lbl.vacancyill2 }}',width:65, field:"vacancyill",hozAlign:"right",headerSort: false}, - {title: '{{ lbl.vacancyextra2 }}',width:65, field:"vacancyextra",hozAlign:"right",headerSort: false}, + {title: '{{ lbl.vacancyextra2 }}',width:75, field:"vacancyextra",hozAlign:"right",headerSort: false}, {title: '{{ lbl.partunempl }}',width: 65, field:"partunemplhours",hozAlign:"right",headerSort: false}, {title: '{{ lbl.total }}',width: 65, field:"totalhours",hozAlign:"right",headerSort: false,formatter:periodTotalFormatter}, - {title: '{{ lbl.statementtransfered2 }}',width: 70, field:"transferedhours",hozAlign:"right",headerSort: false}, + {title: '{{ lbl.statementtransfered2 }}',width: 80, field:"transferedhours",hozAlign:"right",headerSort: false}, {title: '{{ lbl.supphourspayed2 }}',width: 65, field:"payedhours",hozAlign:"right",headerSort: false,headerVertical:true} , - {title: '{{ lbl.finalstatementpot }}',width: 70, field:"hoursdiff",hozAlign:"right",headerSort: false}, + {title: '{{ lbl.finalstatementpot }}',width: 80, field:"hoursdiff",hozAlign:"right",headerSort: false}, /*{% if cmpcfg.sector == "HORESCA" %} */ @@ -99,12 +97,24 @@ let reportperiod ={ ] }); + let hidcols = ['maxdays','partunemplhours','avgtotalweekhours']; + for (h in hidcols){ + + this.tbl.columnManager.findColumn(hidcols[h]).visible = false; + var xx = document.querySelectorAll('[tabulator-field="'+hidcols[h]+'"]'); + for (var c= 0;c< xx.length; c++){ + console.log("querysel:" + c); + xx[c].style.display = 'none'; + } + } + reportperiod.gettbldatafilter(); }, gettbldata: function(){ let fsel = reportperiod.tblfilter.getSelectedData(); let rpsel = reportperiod.tbl.getSelectedData(); if (fsel[0]){ + if (fsel[0].viewpartunempl == null ){ var col1 = reportperiod.tbl.columnManager.findColumn("partunemplhours"); var col2 = staffperiodweeks.tbl.columnManager.findColumn("partunemplhours"); @@ -115,7 +125,8 @@ let reportperiod ={ xx[c].style.display = 'none'; } } - postData("db.php",{ "cl":"Period","fn": "getStaffPeriods","schema":schemata, "id_period":fsel[0].id,"id_staff":null,"id_groups":"{{session.staffgroups}}","splitted":"0"}).then(data => { + + postData("db.php",{ "cl":"Period","fn": "getStaffPeriods","schema":schemata, "id_period":fsel[0].id,"id_staff":null,"id_groups":'{{session.staffgroups}}',"splitted":"0"}).then(data => { console.log("Periods",data); reportperiod.tbl.setData(data.result.data).then(upd => { }); diff --git a/app/tmpl/module/periods/staffperiodweeks.js b/app/tmpl/module/periods/staffperiodweeks.js index 40da29bf..a71abcdf 100644 --- a/app/tmpl/module/periods/staffperiodweeks.js +++ b/app/tmpl/module/periods/staffperiodweeks.js @@ -37,6 +37,7 @@ let staffperiodweeks = { inittable: function(){ staffperiodweeks.tbl = new Tabulator("#tbl_staffperiodweeks", { + resizableColumns: false, height: "calc(100vh - 186px)", layout: "fitDataFill", selectable: true, @@ -69,7 +70,7 @@ let staffperiodweeks = { }, ], columns: [ - { title: "{{ lbl.date }}",field: "daydate",hozAlign:"right",headerSort:"datetime",formatter:dateFormatter, frozen: true}, + { title: "{{ lbl.date }}",field: "daydate",hozAlign:"right",headerSort:"datetime",formatter:dateFormatter,headerMenu:tablehelper.headerMenu}, { title: "{{ lbl.weekhours2|raw }}",field: "dspworkdata",headerSort: false,hozAlign:"center",formatter:worktimeFormatter,bottomCalc:staffperiodweeks.setweekworkhours}, // { title: "{{ lbl.worktotal2 }}",field: "workhours",headerSort: false,hozAlign:"center",bottomCalc:staffperiodweeks.setweekworkhours}, { title: "{{ lbl.pausehours2|raw }}",field: "dsppausedata",headerSort: false,hozAlign:"center",formatter:sizeFormatter}, @@ -87,7 +88,9 @@ let staffperiodweeks = { { title: '{{ lbl.resttime }}',field: "freehoursafter",hozAlign:"center",formatter:freetimeFormatter,headerSort: false}, { title: '{{ lbl.timetracks }}',field:"trackedtime",hozAlign:"center",formatter:timetrackFormatter,headerSort: false,bottomCalc:staffperiodweeks.settotaltrackhours,tooltip:true}, { title: '{{ lbl.trackdiff }}',field:"periodtrackdiff",formatter:nullFormatter,headerSort:false,bottomCalc:staffperiodweeks.settrackeddiffhours}, - { title: 'Differenz',field:"trackeddiff",headerSort:false,bottomCalc:staffperiodweeks.setweektrackdiff} + { title: '{{lbl.difference}}',field:"trackeddiff",headerSort:false,bottomCalc:staffperiodweeks.setweektrackdiff}, + { title: '{{lbl.comment}}',field:"daycomment",headerSort:false} + ] }); @@ -139,13 +142,7 @@ 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) { - // if (staffperiodweeks.parenttbl.element.id=="tbl_reportperiod"){ - // // - // let prowid = staffperiodweeks.getParentRowIdByPeriodId(xrepid); - // staffperiodweeks.parenttbl.selectRow(prowid); - // csel = staffperiodweeks.parenttbl.getSelectedData(); - // // - // } + console.log("Data to Set",data2.result.data); staffperiodweeks.tbl.setData(data2.result.data).then(dd => { if (staffperiodweeks.selectedid != null){ staffperiodweeks.tbl.selectRow(staffperiodweeks.selectedid); @@ -310,6 +307,7 @@ let staffperiodweeks = { wpdata["schemata"] = schemata; //console.log(wpdata); showdataloaddlg('','
{{ lbl.waitmsg }}
'); + //console.log("wpdata",wpdata); postData("db.php",wpdata).then(data => { let sel = staffperiodweeks.tbl.getSelectedData(); let flds={}; @@ -344,17 +342,17 @@ let staffperiodweeks = { flds["trackdata"]=trdata; //console.log("trackdata to save",trdata); postData("db.php",flds).then(data => { - //staffperiodweeks.gettbldata(); - //document.getElementById('dlg_stafftimetracker').style.display='none'; + //console.log("after save 1"); staffperiodweeks.updateWeekHours(); staffperiodweeks.gettbldata(); }).catch(e => { + //console.log("after save 2"); staffperiodweeks.updateWeekHours(); staffperiodweeks.gettbldata(); //document.getElementById('dlg_stafftimetracker').style.display='none'; }); - }).catch(e => { staffperiodweeks.updateWeekHours(); }); + }).catch(e => { console.log("after save 3");staffperiodweeks.updateWeekHours(); }); return false; }, updateWeekHours: function(){ diff --git a/app/tmpl/module/staff/staff.js b/app/tmpl/module/staff/staff.js index 12e4b7c9..e5f15656 100644 --- a/app/tmpl/module/staff/staff.js +++ b/app/tmpl/module/staff/staff.js @@ -134,7 +134,7 @@ let staff ={ }, gettbldata: function(id){ let selectedData = staff.tbl.getSelectedData(); - postData("db.php",{ "cl":"Staff","fn":"getStaffList","schema":schemata,"id_groups":"{{session.staffgroups}}"}).then(data => { + postData("db.php",{ "cl":"Staff","fn":"getStaffList","schema":schemata,"id_groups":'{{session.staffgroups}}'}).then(data => { staff.tbl.setData(data.result.data).then(function(){ if(selectedData[0]){staff.tbl.selectRow(selectedData[0]['id']);} }); diff --git a/app/tmpl/module/staff/staffperiods.js b/app/tmpl/module/staff/staffperiods.js index c39e973f..071f3dd0 100644 --- a/app/tmpl/module/staff/staffperiods.js +++ b/app/tmpl/module/staff/staffperiods.js @@ -47,7 +47,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 => { + postData("db.php",{ "cl":"Period","fn":"getPeriodsByStaff","schema":schemata,"id_staff":staff.current_id,"id_groups":'{{session.staffgroups}}'}).then(data => { console.log("staffdata",data); staffperiods.tbl.setData(data.result.data); }); diff --git a/app/tmpl/module/timeclock.html b/app/tmpl/module/timeclock.html index 0f0cd40f..b2dfbfd9 100644 --- a/app/tmpl/module/timeclock.html +++ b/app/tmpl/module/timeclock.html @@ -7,11 +7,11 @@
{{ lbl.week }}:
-
+
diff --git a/dev/create_cssicons.ps1 b/dev/create_cssicons.ps1 new file mode 100644 index 00000000..c39292d9 --- /dev/null +++ b/dev/create_cssicons.ps1 @@ -0,0 +1,14 @@ + + +$scriptdir = Split-Path -Parent $PSCommandPath +$projectdir = Split-Path -Parent $scriptdir +$TMPDIR = $scriptdir + "/tmp" +$ICONDIR = $projectdir + "/icons" +Set-Location -Path $TMPDIR +D:\Workspace\Tools\node_modules\.bin\fontello-offline-cli.ps1 -p $ICONDIR -n "appicons" -op "icon" +$cssfile = $scriptdir + "/tmp/webfonts/css/appicons.css" +$outfile = $projectdir + "/app/css/icons.css" +(Get-Content $cssfile).replace('../font/', 'font/') | Set-Content $outfile +$srcff = $TMPDIR + '/webfonts/font' +$destff = $projectdir + '/app/css' +Copy-Item $srcff -Destination $destff -Recurse -Force \ No newline at end of file diff --git a/icons/Floppy.svg b/icons/Floppy.svg new file mode 100644 index 00000000..b1387a7e --- /dev/null +++ b/icons/Floppy.svg @@ -0,0 +1,5 @@ + + +Floppy + + diff --git a/icons/Save.svg b/icons/Save.svg new file mode 100644 index 00000000..d78a8bec --- /dev/null +++ b/icons/Save.svg @@ -0,0 +1,5 @@ + + +Save + + diff --git a/icons/access.svg b/icons/access.svg new file mode 100644 index 00000000..e5b651dd --- /dev/null +++ b/icons/access.svg @@ -0,0 +1,5 @@ + + +access + + diff --git a/icons/address.svg b/icons/address.svg new file mode 100644 index 00000000..ec313662 --- /dev/null +++ b/icons/address.svg @@ -0,0 +1,5 @@ + + +address + + diff --git a/icons/aggrement.svg b/icons/aggrement.svg new file mode 100644 index 00000000..7bef0954 --- /dev/null +++ b/icons/aggrement.svg @@ -0,0 +1,5 @@ + + +aggrement + + diff --git a/icons/apps.svg b/icons/apps.svg new file mode 100644 index 00000000..49b21357 --- /dev/null +++ b/icons/apps.svg @@ -0,0 +1,5 @@ + + +apps + + diff --git a/icons/archive.svg b/icons/archive.svg new file mode 100644 index 00000000..44f1dc88 --- /dev/null +++ b/icons/archive.svg @@ -0,0 +1,5 @@ + + +archive + + diff --git a/icons/back.svg b/icons/back.svg new file mode 100644 index 00000000..f6b04d7d --- /dev/null +++ b/icons/back.svg @@ -0,0 +1,5 @@ + + +back + + diff --git a/icons/baggage.svg b/icons/baggage.svg new file mode 100644 index 00000000..80770264 --- /dev/null +++ b/icons/baggage.svg @@ -0,0 +1,5 @@ + + +baggage + + diff --git a/icons/bulletlist.svg b/icons/bulletlist.svg new file mode 100644 index 00000000..89b42cb4 --- /dev/null +++ b/icons/bulletlist.svg @@ -0,0 +1,5 @@ + + +bulletlist + + diff --git a/icons/calendar.svg b/icons/calendar.svg new file mode 100644 index 00000000..6b042407 --- /dev/null +++ b/icons/calendar.svg @@ -0,0 +1,5 @@ + + +calendar + + diff --git a/icons/calendar1.svg b/icons/calendar1.svg new file mode 100644 index 00000000..d2ca6b22 --- /dev/null +++ b/icons/calendar1.svg @@ -0,0 +1,5 @@ + + +calendar1 + + diff --git a/icons/category.svg b/icons/category.svg new file mode 100644 index 00000000..496e003d --- /dev/null +++ b/icons/category.svg @@ -0,0 +1,5 @@ + + +category + + diff --git a/icons/check.svg b/icons/check.svg new file mode 100644 index 00000000..74fd0626 --- /dev/null +++ b/icons/check.svg @@ -0,0 +1,5 @@ + + +check + + diff --git a/icons/clocktime.svg b/icons/clocktime.svg new file mode 100644 index 00000000..6841adb0 --- /dev/null +++ b/icons/clocktime.svg @@ -0,0 +1,5 @@ + + +clocktime + + diff --git a/icons/code.svg b/icons/code.svg new file mode 100644 index 00000000..737805a7 --- /dev/null +++ b/icons/code.svg @@ -0,0 +1,5 @@ + + +code + + diff --git a/icons/coin.svg b/icons/coin.svg new file mode 100644 index 00000000..42ae659e --- /dev/null +++ b/icons/coin.svg @@ -0,0 +1,5 @@ + + +coin + + diff --git a/icons/company.svg b/icons/company.svg new file mode 100644 index 00000000..a1b3b871 --- /dev/null +++ b/icons/company.svg @@ -0,0 +1,5 @@ + + +company + + diff --git a/icons/copy.svg b/icons/copy.svg new file mode 100644 index 00000000..7494795c --- /dev/null +++ b/icons/copy.svg @@ -0,0 +1,5 @@ + + +copy + + diff --git a/icons/cube.svg b/icons/cube.svg new file mode 100644 index 00000000..e22ac317 --- /dev/null +++ b/icons/cube.svg @@ -0,0 +1,5 @@ + + +cube + + diff --git a/icons/cube1.svg b/icons/cube1.svg new file mode 100644 index 00000000..025041bf --- /dev/null +++ b/icons/cube1.svg @@ -0,0 +1,5 @@ + + +cube1 + + diff --git a/icons/cubelight.svg b/icons/cubelight.svg new file mode 100644 index 00000000..04088655 --- /dev/null +++ b/icons/cubelight.svg @@ -0,0 +1,5 @@ + + +cubelight + + diff --git a/icons/cubelight1.svg b/icons/cubelight1.svg new file mode 100644 index 00000000..908f83ce --- /dev/null +++ b/icons/cubelight1.svg @@ -0,0 +1,5 @@ + + +cubelight1 + + diff --git a/icons/dashboard.svg b/icons/dashboard.svg new file mode 100644 index 00000000..78ac8cfb --- /dev/null +++ b/icons/dashboard.svg @@ -0,0 +1,5 @@ + + +dashboard + + diff --git a/icons/dashboard1.svg b/icons/dashboard1.svg new file mode 100644 index 00000000..b5c9d237 --- /dev/null +++ b/icons/dashboard1.svg @@ -0,0 +1,5 @@ + + +dashboard1 + + diff --git a/icons/datarefresh.svg b/icons/datarefresh.svg new file mode 100644 index 00000000..6d3dec07 --- /dev/null +++ b/icons/datarefresh.svg @@ -0,0 +1,5 @@ + + +datarefresh + + diff --git a/icons/dataset.svg b/icons/dataset.svg new file mode 100644 index 00000000..4ce0db0b --- /dev/null +++ b/icons/dataset.svg @@ -0,0 +1,5 @@ + + +dataset + + diff --git a/icons/detailview.svg b/icons/detailview.svg new file mode 100644 index 00000000..ca4c1c5b --- /dev/null +++ b/icons/detailview.svg @@ -0,0 +1,5 @@ + + +detailview + + diff --git a/icons/documents.svg b/icons/documents.svg new file mode 100644 index 00000000..e40e8de9 --- /dev/null +++ b/icons/documents.svg @@ -0,0 +1,5 @@ + + +documents + + diff --git a/icons/documentsave.svg b/icons/documentsave.svg new file mode 100644 index 00000000..32fbff17 --- /dev/null +++ b/icons/documentsave.svg @@ -0,0 +1,5 @@ + + +documentsave + + diff --git a/icons/download.svg b/icons/download.svg new file mode 100644 index 00000000..375ad4c1 --- /dev/null +++ b/icons/download.svg @@ -0,0 +1,5 @@ + + +download + + diff --git a/icons/duplicate.svg b/icons/duplicate.svg new file mode 100644 index 00000000..c2dbd4c5 --- /dev/null +++ b/icons/duplicate.svg @@ -0,0 +1,5 @@ + + +duplicate + + diff --git a/icons/duplicate1.svg b/icons/duplicate1.svg new file mode 100644 index 00000000..c04b9f13 --- /dev/null +++ b/icons/duplicate1.svg @@ -0,0 +1,5 @@ + + +duplicate1 + + diff --git a/icons/edit.svg b/icons/edit.svg new file mode 100644 index 00000000..154edb4b --- /dev/null +++ b/icons/edit.svg @@ -0,0 +1,5 @@ + + +edit + + diff --git a/icons/entry.svg b/icons/entry.svg new file mode 100644 index 00000000..2c7062e7 --- /dev/null +++ b/icons/entry.svg @@ -0,0 +1,5 @@ + + +entry + + diff --git a/icons/erase.svg b/icons/erase.svg new file mode 100644 index 00000000..c3535e94 --- /dev/null +++ b/icons/erase.svg @@ -0,0 +1,5 @@ + + +erase + + diff --git a/icons/excel.svg b/icons/excel.svg new file mode 100644 index 00000000..c4301a0e --- /dev/null +++ b/icons/excel.svg @@ -0,0 +1,5 @@ + + +excel + + diff --git a/icons/exit.svg b/icons/exit.svg new file mode 100644 index 00000000..1b0aa561 --- /dev/null +++ b/icons/exit.svg @@ -0,0 +1,5 @@ + + +exit + + diff --git a/icons/expand.svg b/icons/expand.svg new file mode 100644 index 00000000..e61c855a --- /dev/null +++ b/icons/expand.svg @@ -0,0 +1,5 @@ + + +expand + + diff --git a/icons/expand2.svg b/icons/expand2.svg new file mode 100644 index 00000000..4142abba --- /dev/null +++ b/icons/expand2.svg @@ -0,0 +1,5 @@ + + +expand2 + + diff --git a/icons/eye-close.svg b/icons/eye-close.svg new file mode 100644 index 00000000..cbffdd9b --- /dev/null +++ b/icons/eye-close.svg @@ -0,0 +1,5 @@ + + +eye-close + + diff --git a/icons/eye-open.svg b/icons/eye-open.svg new file mode 100644 index 00000000..bea2bdb2 --- /dev/null +++ b/icons/eye-open.svg @@ -0,0 +1,5 @@ + + +eye-open + + diff --git a/icons/file.svg b/icons/file.svg new file mode 100644 index 00000000..a415e5a7 --- /dev/null +++ b/icons/file.svg @@ -0,0 +1,5 @@ + + +file + + diff --git a/icons/finger1.svg b/icons/finger1.svg new file mode 100644 index 00000000..557dbcba --- /dev/null +++ b/icons/finger1.svg @@ -0,0 +1,5 @@ + + +finger1 + + diff --git a/icons/finger2.svg b/icons/finger2.svg new file mode 100644 index 00000000..fe7f2756 --- /dev/null +++ b/icons/finger2.svg @@ -0,0 +1,5 @@ + + +finger2 + + diff --git a/icons/finger3.svg b/icons/finger3.svg new file mode 100644 index 00000000..17cb50ca --- /dev/null +++ b/icons/finger3.svg @@ -0,0 +1,5 @@ + + +finger3 + + diff --git a/icons/finger4.svg b/icons/finger4.svg new file mode 100644 index 00000000..1aad4b2c --- /dev/null +++ b/icons/finger4.svg @@ -0,0 +1,5 @@ + + +finger4 + + diff --git a/icons/finger5.svg b/icons/finger5.svg new file mode 100644 index 00000000..54d79906 --- /dev/null +++ b/icons/finger5.svg @@ -0,0 +1,5 @@ + + +finger5 + + diff --git a/icons/fingerprint-check.svg b/icons/fingerprint-check.svg new file mode 100644 index 00000000..36c761bb --- /dev/null +++ b/icons/fingerprint-check.svg @@ -0,0 +1,5 @@ + + +fingerprint-check + + diff --git a/icons/fingerprint-crosshair.svg b/icons/fingerprint-crosshair.svg new file mode 100644 index 00000000..d82a2b35 --- /dev/null +++ b/icons/fingerprint-crosshair.svg @@ -0,0 +1,5 @@ + + +fingerprint-crosshair + + diff --git a/icons/fingerprint-remove.svg b/icons/fingerprint-remove.svg new file mode 100644 index 00000000..e89a5c74 --- /dev/null +++ b/icons/fingerprint-remove.svg @@ -0,0 +1,5 @@ + + +fingerprint-remove + + diff --git a/icons/fingerprint-scanning.svg b/icons/fingerprint-scanning.svg new file mode 100644 index 00000000..6c9065f2 --- /dev/null +++ b/icons/fingerprint-scanning.svg @@ -0,0 +1,5 @@ + + +fingerprint-scanning + + diff --git a/icons/fingerprint-search.svg b/icons/fingerprint-search.svg new file mode 100644 index 00000000..fe20cdcc --- /dev/null +++ b/icons/fingerprint-search.svg @@ -0,0 +1,5 @@ + + +fingerprint-search + + diff --git a/icons/fingerprint-simple.svg b/icons/fingerprint-simple.svg new file mode 100644 index 00000000..05c04051 --- /dev/null +++ b/icons/fingerprint-simple.svg @@ -0,0 +1,5 @@ + + +fingerprint-simple + + diff --git a/icons/folder.svg b/icons/folder.svg new file mode 100644 index 00000000..cdae52ae --- /dev/null +++ b/icons/folder.svg @@ -0,0 +1,5 @@ + + +folder + + diff --git a/icons/folder_add.svg b/icons/folder_add.svg new file mode 100644 index 00000000..de7d20ce --- /dev/null +++ b/icons/folder_add.svg @@ -0,0 +1,5 @@ + + +folder_add + + diff --git a/icons/folder_delete.svg b/icons/folder_delete.svg new file mode 100644 index 00000000..1ca474df --- /dev/null +++ b/icons/folder_delete.svg @@ -0,0 +1,5 @@ + + +folder_delete + + diff --git a/icons/folder_find.svg b/icons/folder_find.svg new file mode 100644 index 00000000..4ea1d1c7 --- /dev/null +++ b/icons/folder_find.svg @@ -0,0 +1,5 @@ + + +folder_find + + diff --git a/icons/globe.svg b/icons/globe.svg new file mode 100644 index 00000000..c1d84f8d --- /dev/null +++ b/icons/globe.svg @@ -0,0 +1,5 @@ + + +globe + + diff --git a/icons/group.svg b/icons/group.svg new file mode 100644 index 00000000..deb1ddca --- /dev/null +++ b/icons/group.svg @@ -0,0 +1,5 @@ + + +group + + diff --git a/icons/help.svg b/icons/help.svg new file mode 100644 index 00000000..6d2c6c9f --- /dev/null +++ b/icons/help.svg @@ -0,0 +1,5 @@ + + +help + + diff --git a/icons/helpfile.svg b/icons/helpfile.svg new file mode 100644 index 00000000..146ad23e --- /dev/null +++ b/icons/helpfile.svg @@ -0,0 +1,5 @@ + + +helpfile + + diff --git a/icons/history.svg b/icons/history.svg new file mode 100644 index 00000000..ba420fd1 --- /dev/null +++ b/icons/history.svg @@ -0,0 +1,5 @@ + + +history + + diff --git a/icons/home.svg b/icons/home.svg new file mode 100644 index 00000000..b4eb1b49 --- /dev/null +++ b/icons/home.svg @@ -0,0 +1,5 @@ + + +home + + diff --git a/icons/house.svg b/icons/house.svg new file mode 100644 index 00000000..92b58cf7 --- /dev/null +++ b/icons/house.svg @@ -0,0 +1,5 @@ + + +house + + diff --git a/icons/inbox.svg b/icons/inbox.svg new file mode 100644 index 00000000..ef747a17 --- /dev/null +++ b/icons/inbox.svg @@ -0,0 +1,5 @@ + + +inbox + + diff --git a/icons/info.svg b/icons/info.svg new file mode 100644 index 00000000..ac4776fa --- /dev/null +++ b/icons/info.svg @@ -0,0 +1,5 @@ + + +info + + diff --git a/icons/key.svg b/icons/key.svg new file mode 100644 index 00000000..13cdddf7 --- /dev/null +++ b/icons/key.svg @@ -0,0 +1,5 @@ + + +key + + diff --git a/icons/library.svg b/icons/library.svg new file mode 100644 index 00000000..d4961946 --- /dev/null +++ b/icons/library.svg @@ -0,0 +1,5 @@ + + +library + + diff --git a/icons/list.svg b/icons/list.svg new file mode 100644 index 00000000..e013f096 --- /dev/null +++ b/icons/list.svg @@ -0,0 +1,5 @@ + + +list + + diff --git a/icons/lock.svg b/icons/lock.svg new file mode 100644 index 00000000..c63b86a0 --- /dev/null +++ b/icons/lock.svg @@ -0,0 +1,5 @@ + + +lock + + diff --git a/icons/log.svg b/icons/log.svg new file mode 100644 index 00000000..e55c40ec --- /dev/null +++ b/icons/log.svg @@ -0,0 +1,5 @@ + + +log + + diff --git a/icons/logout.svg b/icons/logout.svg new file mode 100644 index 00000000..0ccb9d98 --- /dev/null +++ b/icons/logout.svg @@ -0,0 +1,5 @@ + + +logout + + diff --git a/icons/menu.svg b/icons/menu.svg new file mode 100644 index 00000000..c32d078e --- /dev/null +++ b/icons/menu.svg @@ -0,0 +1,5 @@ + + +menu + + diff --git a/icons/menudown.svg b/icons/menudown.svg new file mode 100644 index 00000000..34b734ec --- /dev/null +++ b/icons/menudown.svg @@ -0,0 +1,5 @@ + + +menudown + + diff --git a/icons/newspaper.svg b/icons/newspaper.svg new file mode 100644 index 00000000..1f4c2ba8 --- /dev/null +++ b/icons/newspaper.svg @@ -0,0 +1,5 @@ + + +newspaper + + diff --git a/icons/next.svg b/icons/next.svg new file mode 100644 index 00000000..6fd8c564 --- /dev/null +++ b/icons/next.svg @@ -0,0 +1,5 @@ + + +next + + diff --git a/icons/normalview.svg b/icons/normalview.svg new file mode 100644 index 00000000..4a01d37c --- /dev/null +++ b/icons/normalview.svg @@ -0,0 +1,5 @@ + + +normalview + + diff --git a/icons/numberlist.svg b/icons/numberlist.svg new file mode 100644 index 00000000..1033b77b --- /dev/null +++ b/icons/numberlist.svg @@ -0,0 +1,5 @@ + + +numberlist + + diff --git a/icons/package.svg b/icons/package.svg new file mode 100644 index 00000000..e2164dd8 --- /dev/null +++ b/icons/package.svg @@ -0,0 +1,5 @@ + + +package + + diff --git a/icons/paste.svg b/icons/paste.svg new file mode 100644 index 00000000..0e29d273 --- /dev/null +++ b/icons/paste.svg @@ -0,0 +1,5 @@ + + +paste + + diff --git a/icons/pause.svg b/icons/pause.svg new file mode 100644 index 00000000..a36b179f --- /dev/null +++ b/icons/pause.svg @@ -0,0 +1,5 @@ + + +pause + + diff --git a/icons/pay.svg b/icons/pay.svg new file mode 100644 index 00000000..afcb96e5 --- /dev/null +++ b/icons/pay.svg @@ -0,0 +1,5 @@ + + +pay + + diff --git a/icons/pdf.svg b/icons/pdf.svg new file mode 100644 index 00000000..326c94cf --- /dev/null +++ b/icons/pdf.svg @@ -0,0 +1,5 @@ + + +pdf + + diff --git a/icons/pdfexport.svg b/icons/pdfexport.svg new file mode 100644 index 00000000..e1abf77b --- /dev/null +++ b/icons/pdfexport.svg @@ -0,0 +1,5 @@ + + +pdfexport + + diff --git a/icons/pictures.svg b/icons/pictures.svg new file mode 100644 index 00000000..7123c29d --- /dev/null +++ b/icons/pictures.svg @@ -0,0 +1,5 @@ + + +pictures + + diff --git a/icons/plus.svg b/icons/plus.svg new file mode 100644 index 00000000..0803219b --- /dev/null +++ b/icons/plus.svg @@ -0,0 +1,5 @@ + + +plus + + diff --git a/icons/projects.svg b/icons/projects.svg new file mode 100644 index 00000000..01cc8cb6 --- /dev/null +++ b/icons/projects.svg @@ -0,0 +1,5 @@ + + +projects + + diff --git a/icons/qube.svg b/icons/qube.svg new file mode 100644 index 00000000..a44bd109 --- /dev/null +++ b/icons/qube.svg @@ -0,0 +1,5 @@ + + +qube + + diff --git a/icons/remove.svg b/icons/remove.svg new file mode 100644 index 00000000..1ce38f1b --- /dev/null +++ b/icons/remove.svg @@ -0,0 +1,5 @@ + + +remove + + diff --git a/icons/rename.svg b/icons/rename.svg new file mode 100644 index 00000000..56beec37 --- /dev/null +++ b/icons/rename.svg @@ -0,0 +1,5 @@ + + +rename + + diff --git a/icons/replace.svg b/icons/replace.svg new file mode 100644 index 00000000..78bc5b71 --- /dev/null +++ b/icons/replace.svg @@ -0,0 +1,5 @@ + + +replace + + diff --git a/icons/rndcheck-not.svg b/icons/rndcheck-not.svg new file mode 100644 index 00000000..c22144e0 --- /dev/null +++ b/icons/rndcheck-not.svg @@ -0,0 +1,5 @@ + + +rndcheck-not + + diff --git a/icons/rndcheck-ok.svg b/icons/rndcheck-ok.svg new file mode 100644 index 00000000..381fa588 --- /dev/null +++ b/icons/rndcheck-ok.svg @@ -0,0 +1,5 @@ + + +rndcheck-ok + + diff --git a/icons/sector.svg b/icons/sector.svg new file mode 100644 index 00000000..bbb8cd04 --- /dev/null +++ b/icons/sector.svg @@ -0,0 +1,5 @@ + + +sector + + diff --git a/icons/sendemail.svg b/icons/sendemail.svg new file mode 100644 index 00000000..afbbbd7f --- /dev/null +++ b/icons/sendemail.svg @@ -0,0 +1,5 @@ + + +sendemail + + diff --git a/icons/settings.svg b/icons/settings.svg new file mode 100644 index 00000000..9c476c79 --- /dev/null +++ b/icons/settings.svg @@ -0,0 +1,5 @@ + + +settings + + diff --git a/icons/shop.svg b/icons/shop.svg new file mode 100644 index 00000000..3b77cda9 --- /dev/null +++ b/icons/shop.svg @@ -0,0 +1,5 @@ + + +shop + + diff --git a/icons/shrink.svg b/icons/shrink.svg new file mode 100644 index 00000000..bf09f080 --- /dev/null +++ b/icons/shrink.svg @@ -0,0 +1,5 @@ + + +shrink + + diff --git a/icons/squares.svg b/icons/squares.svg new file mode 100644 index 00000000..dcbca48b --- /dev/null +++ b/icons/squares.svg @@ -0,0 +1,5 @@ + + +squares + + diff --git a/icons/staff.svg b/icons/staff.svg new file mode 100644 index 00000000..89f5afa0 --- /dev/null +++ b/icons/staff.svg @@ -0,0 +1,5 @@ + + +staff + + diff --git a/icons/star.svg b/icons/star.svg new file mode 100644 index 00000000..34a8fc55 --- /dev/null +++ b/icons/star.svg @@ -0,0 +1,5 @@ + + +star + + diff --git a/icons/sum.svg b/icons/sum.svg new file mode 100644 index 00000000..97e8d72d --- /dev/null +++ b/icons/sum.svg @@ -0,0 +1,5 @@ + + +sum + + diff --git a/icons/table.svg b/icons/table.svg new file mode 100644 index 00000000..45222ba9 --- /dev/null +++ b/icons/table.svg @@ -0,0 +1,5 @@ + + +table + + diff --git a/icons/template.svg b/icons/template.svg new file mode 100644 index 00000000..d64d4a21 --- /dev/null +++ b/icons/template.svg @@ -0,0 +1,5 @@ + + +template + + diff --git a/icons/timeentry.svg b/icons/timeentry.svg new file mode 100644 index 00000000..32e0641d --- /dev/null +++ b/icons/timeentry.svg @@ -0,0 +1,5 @@ + + +timeentry + + diff --git a/icons/timeexit.svg b/icons/timeexit.svg new file mode 100644 index 00000000..7ecda714 --- /dev/null +++ b/icons/timeexit.svg @@ -0,0 +1,5 @@ + + +timeexit + + diff --git a/icons/trash.svg b/icons/trash.svg new file mode 100644 index 00000000..46f3f8b8 --- /dev/null +++ b/icons/trash.svg @@ -0,0 +1,5 @@ + + +trash + + diff --git a/icons/unlock.svg b/icons/unlock.svg new file mode 100644 index 00000000..bb8b0999 --- /dev/null +++ b/icons/unlock.svg @@ -0,0 +1,5 @@ + + +unlock + + diff --git a/icons/untitled.svg b/icons/untitled.svg new file mode 100644 index 00000000..76b3529a --- /dev/null +++ b/icons/untitled.svg @@ -0,0 +1,5 @@ + + +untitled + + diff --git a/icons/upload.svg b/icons/upload.svg new file mode 100644 index 00000000..7a7dd55b --- /dev/null +++ b/icons/upload.svg @@ -0,0 +1,5 @@ + + +upload + + diff --git a/icons/user.svg b/icons/user.svg new file mode 100644 index 00000000..6475ea6e --- /dev/null +++ b/icons/user.svg @@ -0,0 +1,5 @@ + + +user + + diff --git a/icons/usertime.svg b/icons/usertime.svg new file mode 100644 index 00000000..008e3be7 --- /dev/null +++ b/icons/usertime.svg @@ -0,0 +1,5 @@ + + +usertime + + diff --git a/icons/vacancydays.svg b/icons/vacancydays.svg new file mode 100644 index 00000000..7248a0ab --- /dev/null +++ b/icons/vacancydays.svg @@ -0,0 +1,5 @@ + + +vacancydays + + diff --git a/icons/week.svg b/icons/week.svg new file mode 100644 index 00000000..038cc731 --- /dev/null +++ b/icons/week.svg @@ -0,0 +1,5 @@ + + +week + + diff --git a/install/update_app.sh b/install/update_app.sh index c10b398f..97ca6fba 100644 --- a/install/update_app.sh +++ b/install/update_app.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!C:/Program Files/Git/git-bash.exe CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" PROJECTDIR="$(dirname "${CALLDIR}")" echo ${PROJECTDIR} @@ -13,6 +13,7 @@ else fi echo "last tag" git tag --list + read -p "new tag:" tag echo echo "working tag is $tag" @@ -22,8 +23,8 @@ if [ "${TAGEXISTS}" == "" ] then echo "create tag $tag" git add -A - sed -i -e "s/^\[% appversion\s*=\s*.*/\[% appversion=\'$tag\' %\]/" app/tmpl/index.tt - sed -i -e "s/\"version\": \".*\",/\"version\": \"$tag\",/" desktopapp/package.json + # sed -i -e "s/^\[% appversion\s*=\s*.*/\[% appversion=\'$tag\' %\]/" app/tmpl/index.tt + # sed -i -e "s/\"version\": \".*\",/\"version\": \"$tag\",/" desktopapp/package.json git commit -a -m "v${CDATE} t$tag" git tag $tag fi @@ -33,15 +34,18 @@ then mkdir ${PROJECTDIR}"/release" fi echo "export app dir of tag $tag" -git archive -o ${PROJECTDIR}"/release/$tag.zip" --prefix=$tag"/" $tag:app -cd ${PROJECTDIR}"/release" +git archive -o ${PROJECTDIR}"/release/$tag.zip" --prefix="app/" $tag:app +cd ${PROJECTDIR}"/release/" unzip -q $tag.zip -#rm $tag.zip -#cd "$tag" -source ${CALLDIR}"/../dev/conf.sh" -#echo "ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} \"cd '${REMOTEAPPFOLDER}' && grep 'appversion=' tmpl/index.tt | tr -cd '[:digit:].'\"" -REMTAG=$(ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} "cd '${REMOTEAPPFOLDER}' && grep 'appversion=' tmpl/index.tt | tr -cd '[:digit:].'") -echo "REMOTE TAG is "${REMTAG} + +read -p "current tag:" REMTAG +echo +# #rm $tag.zip +# #cd "$tag" +# source ${CALLDIR}"/../dev/conf.sh" +# #echo "ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} \"cd '${REMOTEAPPFOLDER}' && grep 'appversion=' tmpl/index.tt | tr -cd '[:digit:].'\"" +# REMTAG=$(ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} "cd '${REMOTEAPPFOLDER}' && grep 'appversion=' tmpl/index.tt | tr -cd '[:digit:].'") +# echo "REMOTE TAG is "${REMTAG} #if exists remote tag #compare life data using file compare @@ -54,37 +58,39 @@ then cd ${PROJECTDIR}"/release/"$tag #unzip -q ${REMTAG}.zip echo "get files to update" - INSFILES=`git diff ${REMTAGEXISTS} $tag --name-status --no-renames | grep -e "^[A|M]" | awk -F "\t" '{ print $2 }' | grep -e "^app/" | grep -v "\.php$" | sed -e 's/^app\///g' ` + INSFILES=`git diff ${REMTAGEXISTS} $tag --name-status --no-renames | grep -e "^[A|M]" | awk -F "\t" '{ print $2 }' | grep -e "^app/" ` echo $INSFILES +fi + #diff -qr ${REMTAG} $tag #rm ${REMOTETAG}.zip #cd ${REMOTETAG} -else - cd ${PROJECTDIR}"/release/"$tag - echo "get installed tag $tag file list" - find . -type f -printf "%p|%s\n" | grep -v -e "\/data\/output\/" | grep -v -e "\/data\/tmp\/" | grep -v -e "\/tools\/" | sort > ${TMPDIR}/sourcefiles.local.txt - echo "get installed file list" - ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEAPPFOLDER}' && find . -type f -printf "%p|%s\n" | sort' > ${TMPDIR}/sourcefiles.remote.txt +# else +# cd ${PROJECTDIR}"/release/"$tag +# echo "get installed tag $tag file list" +# find . -type f -printf "%p|%s\n" | grep -v -e "\/data\/output\/" | grep -v -e "\/data\/tmp\/" | grep -v -e "\/tools\/" | sort > ${TMPDIR}/sourcefiles.local.txt +# echo "get installed file list" +# ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEAPPFOLDER}' && find . -type f -printf "%p|%s\n" | sort' > ${TMPDIR}/sourcefiles.remote.txt - #echo "To update:" - IFS=' - ' - UPDFILES=`diff -y -W 200 ${TMPDIR}/sourcefiles.local.txt ${TMPDIR}/sourcefiles.remote.txt | grep " |" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v "dksconfig" | grep -v ".git" | grep -v "/media/"` - echo "files to update:"${#UPDFILES[@]} - #echo ${UPDFILES} - #echo "" - #echo "new files:" - INSFILES=`diff -y -W 200 ${TMPDIR}/sourcefiles.local.txt ${TMPDIR}/sourcefiles.remote.txt | grep " <" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v "dksconfig" | grep -v ".git" | grep -v "/media/"` - echo "new files :"${#INSFILES[@]} - #echo ${INSFILES} - #echo "" - # echo "only online or OLD files:" - # diff -y -W 200 ${TMPDIR}/sourcefiles.remote.txt ${TMPDIR}/sourcefiles.local.txt | grep " <" | awk '{ print $1 }' - # echo "" - # echo "----------------------------" - # echo "" - #cd ${CALLDIR}"/app" -fi +# #echo "To update:" +# IFS=' +# ' +# UPDFILES=`diff -y -W 200 ${TMPDIR}/sourcefiles.local.txt ${TMPDIR}/sourcefiles.remote.txt | grep " |" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v "dksconfig" | grep -v ".git" | grep -v "/media/"` +# echo "files to update:"${#UPDFILES[@]} +# #echo ${UPDFILES} +# #echo "" +# #echo "new files:" +# INSFILES=`diff -y -W 200 ${TMPDIR}/sourcefiles.local.txt ${TMPDIR}/sourcefiles.remote.txt | grep " <" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v "dksconfig" | grep -v ".git" | grep -v "/media/"` +# echo "new files :"${#INSFILES[@]} +# #echo ${INSFILES} +# #echo "" +# # echo "only online or OLD files:" +# # diff -y -W 200 ${TMPDIR}/sourcefiles.remote.txt ${TMPDIR}/sourcefiles.local.txt | grep " <" | awk '{ print $1 }' +# # echo "" +# # echo "----------------------------" +# # echo "" +# #cd ${CALLDIR}"/app" +# fi if [ -e ${TMPDIR}/update_${CDATE}.tar.gz ] then @@ -94,7 +100,7 @@ fi if [ "${UPDFILES}" != "" ] || [ "${INSFILES}" != "" ] then echo "TAR package:" - tar czvf ${TMPDIR}/update_${CDATE}.tar.gz ${UPDFILES} ${INSFILES} + tar czvf ${TMPDIR}/update_${CDATE}.tar.gz ${INSFILES} #tar tzvf ${CALLDIR}/update_${CDATE}.tar.gz fi if [ "${UPLOAD}" == "upload" ] diff --git a/webfonts/README.txt b/webfonts/README.txt new file mode 100644 index 00000000..beaab336 --- /dev/null +++ b/webfonts/README.txt @@ -0,0 +1,75 @@ +This webfont is generated by http://fontello.com open source project. + + +================================================================================ +Please, note, that you should obey original font licenses, used to make this +webfont pack. Details available in LICENSE.txt file. + +- Usually, it's enough to publish content of LICENSE.txt file somewhere on your + site in "About" section. + +- If your project is open-source, usually, it will be ok to make LICENSE.txt + file publicly available in your repository. + +- Fonts, used in Fontello, don't require a clickable link on your site. + But any kind of additional authors crediting is welcome. +================================================================================ + + +Comments on archive content +--------------------------- + +- /font/* - fonts in different formats + +- /css/* - different kinds of css, for all situations. Should be ok with + twitter bootstrap. Also, you can skip style and assign icon classes + directly to text elements, if you don't mind about IE7. + +- demo.html - demo file, to show your webfont content + +- LICENSE.txt - license info about source fonts, used to build your one. + +- config.json - keeps your settings. You can import it back into fontello + anytime, to continue your work + + +Why so many CSS files ? +----------------------- + +Because we like to fit all your needs :) + +- basic file, .css - is usually enough, it contains @font-face + and character code definitions + +- *-ie7.css - if you need IE7 support, but still don't wish to put char codes + directly into html + +- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face + rules, but still wish to benefit from css generation. That can be very + convenient for automated asset build systems. When you need to update font - + no need to manually edit files, just override old version with archive + content. See fontello source code for examples. + +- *-embedded.css - basic css file, but with embedded WOFF font, to avoid + CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. + We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` + server headers. But if you ok with dirty hack - this file is for you. Note, + that data url moved to separate @font-face to avoid problems with + + + + + + +
+

APPICONS icons

+
+
+
+

icon-add
0xe800
+

icon-addcsv
0xe801
+

icon-agrement
0xe802
+

icon-archive
0xe803
+
+
+

icon-archive2
0xe804
+

icon-back
0xe805
+

icon-backup
0xe806
+

icon-bill
0xe807
+
+
+

icon-book
0xe808
+

icon-book2
0xe809
+

icon-bookings
0xe80a
+

icon-books
0xe80b
+
+
+

icon-box
0xe80c
+

icon-boxcheck-not
0xe80d
+

icon-boxcheck-ok
0xe80e
+

icon-boxes
0xe80f
+
+
+

icon-calendar
0xe810
+

icon-calendar1
0xe811
+

icon-calendar2
0xe812
+

icon-children
0xe813
+
+
+

icon-close
0xe814
+

icon-cloud-data
0xe815
+

icon-code
0xe816
+

icon-config
0xe817
+
+
+

icon-config3
0xe818
+

icon-contacts
0xe819
+

icon-creditcard
0xe81a
+

icon-dat-export
0xe81b
+
+
+

icon-data-import
0xe81c
+

icon-data-transfer
0xe81d
+

icon-dataadd
0xe81e
+

icon-datadelete
0xe81f
+
+
+

icon-dataedit
0xe820
+

icon-datasets
0xe821
+

icon-date
0xe822
+

icon-download
0xe823
+
+
+

icon-duplicate
0xe824
+

icon-duplicate2
0xe825
+

icon-edit
0xe826
+

icon-edit2
0xe827
+
+
+

icon-editblog
0xe828
+

icon-email
0xe829
+

icon-events
0xe82a
+

icon-exit
0xe82b
+
+
+

icon-file
0xe82c
+

icon-filter
0xe82d
+

icon-filter2
0xe82e
+

icon-folder
0xe82f
+
+
+

icon-foldershare
0xe830
+

icon-gift
0xe831
+

icon-group
0xe832
+

icon-hdd
0xe833
+
+
+

icon-help-box
0xe834
+

icon-help-important
0xe835
+

icon-help
0xe836
+

icon-helpdesk
0xe837
+
+
+

icon-home
0xe838
+

icon-home2
0xe839
+

icon-image
0xe83a
+

icon-in
0xe83b
+
+
+

icon-info-box
0xe83c
+

icon-info
0xe83d
+

icon-inforound
0xe83e
+

icon-invoice
0xe83f
+
+
+

icon-laptop
0xe840
+

icon-laptop1
0xe841
+

icon-license
0xe842
+

icon-location
0xe843
+
+
+

icon-locationmark
0xe844
+

icon-mailsend
0xe845
+

icon-mailserver
0xe846
+

icon-mailtemplate
0xe847
+
+
+

icon-menu
0xe848
+

icon-mobile
0xe849
+

icon-moneybag
0xe84a
+

icon-msstore
0xe84b
+
+
+

icon-next
0xe84c
+

icon-ok
0xe84d
+

icon-open
0xe84e
+

icon-out
0xe84f
+
+
+

icon-paragraph
0xe850
+

icon-pc-datatransfer
0xe851
+

icon-pc-mac
0xe852
+

icon-pc-windows
0xe853
+
+
+

icon-pc
0xe854
+

icon-pc1
0xe855
+

icon-pdf
0xe856
+

icon-percent
0xe857
+
+
+

icon-phone
0xe858
+

icon-presences
0xe859
+

icon-preview
0xe85a
+

icon-print
0xe85b
+
+
+

icon-print2
0xe85c
+

icon-printer
0xe85d
+

icon-private-cloud
0xe85e
+

icon-product
0xe85f
+
+
+

icon-productcd
0xe860
+

icon-reload
0xe861
+

icon-rendezvous
0xe862
+

icon-reporttemplate
0xe863
+
+
+

icon-rndcheck-not
0xe864
+

icon-rndcheck-ok
0xe865
+

icon-sale
0xe866
+

icon-sandclock
0xe867
+
+
+

icon-save
0xe868
+

icon-search
0xe869
+

icon-settings-bars
0xe86a
+

icon-settings
0xe86b
+
+
+

icon-shield
0xe86c
+

icon-shop
0xe86d
+

icon-shop3
0xe86e
+

icon-shoppingcard
0xe86f
+
+
+

icon-sortasc
0xe870
+

icon-sortdesc
0xe871
+

icon-star
0xe872
+

icon-stopwatches
0xe873
+
+
+

icon-stripe
0xe874
+

icon-support
0xe875
+

icon-tag
0xe876
+

icon-template
0xe877
+
+
+

icon-transactions
0xe878
+

icon-trash
0xe879
+

icon-unsort
0xe87a
+

icon-upload
0xe87b
+
+
+

icon-user
0xe87c
+

icon-user2
0xe87d
+

icon-userconfig
0xe87e
+

icon-usergroup
0xe87f
+
+
+

icon-video
0xe880
+

icon-viewpdf
0xe881
+

icon-website
0xe882
+

icon-website2
0xe883
+
+
+

icon-win10
0xe884
+
+
+
+ + \ No newline at end of file diff --git a/webfonts/font/appicons.eot b/webfonts/font/appicons.eot new file mode 100644 index 0000000000000000000000000000000000000000..53955a0cb0936a334f73bd4fb6d6cbd739d1f426 GIT binary patch literal 34560 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 literal 0 HcmV?d00001 diff --git a/webfonts/font/appicons.svg b/webfonts/font/appicons.svg new file mode 100644 index 00000000..5169db0b --- /dev/null +++ b/webfonts/font/appicons.svg @@ -0,0 +1,276 @@ + + + +Copyright (C) 2021 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/webfonts/font/appicons.ttf b/webfonts/font/appicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4dac6d2a198f64f7a3b5af7d730d8bd2589c92cb GIT binary patch literal 34392 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

>B#H^Gp`6fD!FYAFpcPjY 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

2h|?XTbeJ&?0Rh|i68x3;Io_z;*g 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 literal 0 HcmV?d00001 diff --git a/webfonts/font/appicons.woff b/webfonts/font/appicons.woff new file mode 100644 index 0000000000000000000000000000000000000000..cafec636c509a8c6a46f64e83211debed8ffaecb GIT binary patch literal 21892 zcmV)nK%KvLPew)n0RR9109Awl3jhEB0ESoq0RR91000000000000000000000000- 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 literal 0 HcmV?d00001 -- 2.39.5