From bf208548784d53c70e5958ffb5089272523b571d Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 13 Dec 2023 14:09:20 +0100 Subject: [PATCH 1/6] =?UTF-8?q?Corrected:=20Tagesgenaue=20Pr=C3=BCfung=20a?= =?UTF-8?q?uf=20Homeoffice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/vertragsbestandteil.class.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/include/vertragsbestandteil.class.php b/include/vertragsbestandteil.class.php index 2f6263f84..b48cf6e64 100644 --- a/include/vertragsbestandteil.class.php +++ b/include/vertragsbestandteil.class.php @@ -309,7 +309,7 @@ class vertragsbestandteil extends basis_db } /** - * Prueft ob MitarbeiterIn im Monat des uebergebenen $datums AZG-relevant ist. + * Prueft ob MitarbeiterIn am Tag des uebergebenen $datums Homeoffice aktiv gesetzt hat. * Wenn kein Datum übergeben wird, wird das heutige Datum gesetzt. * * @param $mitarbeiter_uid @@ -332,10 +332,13 @@ class vertragsbestandteil extends basis_db WHERE dv.mitarbeiter_uid = '. $this->db_add_param($mitarbeiter_uid). ' -- Homeoffice... AND homeoffice = TRUE - -- ...im aktuellen Monat (default) oder im Monat des übergebenen $datums - AND ((date_trunc(\'month\', '. $timestamp. ')::date < vbt.bis AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von) OR (vbt.bis IS NULL AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von)) - -- Vorerst nur check, ob zumindest eine aufrechte Zeitaufzeichnungspflicht. Später Unterscheidung nach Dienstverhältnis. - ORDER BY vbt.von DESC --aktuellster + -- ...am aktuellen Tag (default) oder am Tag des übergebenen $datums + AND ( + (' . $timestamp . '::date BETWEEN vbt.von AND vbt.bis) + OR + (vbt.bis IS NULL AND ' . $timestamp . '::date > vbt.von) + ) + ORDER BY vbt.von DESC -- Zur Sicherheit: aktuellster LIMIT 1'; if ($result = $this->db_query($qry)) From 00a1c66d86d9b7fda40b6f63aed913c806e6e793 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 13 Dec 2023 16:14:08 +0100 Subject: [PATCH 2/6] =?UTF-8?q?Corrected:=20Tagesgenaue=20Pr=C3=BCfung=20a?= =?UTF-8?q?uf=20AZG-relevant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/vertragsbestandteil.class.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/include/vertragsbestandteil.class.php b/include/vertragsbestandteil.class.php index b48cf6e64..d6ab093ce 100644 --- a/include/vertragsbestandteil.class.php +++ b/include/vertragsbestandteil.class.php @@ -239,7 +239,7 @@ class vertragsbestandteil extends basis_db } /** - * Prueft ob MitarbeiterIn im Monat des uebergebenen $datums AZG-relevant ist. + * Prueft ob MitarbeiterIn am Tag des uebergebenen $datums AZG-relevant ist. * Wenn kein Datum übergeben wird, wird das heutige Datum gesetzt. * * @param $mitarbeiter_uid @@ -262,10 +262,13 @@ class vertragsbestandteil extends basis_db WHERE dv.mitarbeiter_uid = '. $this->db_add_param($mitarbeiter_uid). ' -- AZG-relevant... AND azgrelevant = TRUE - -- ...im aktuellen Monat (default) oder im Monat des übergebenen $datums - AND ((date_trunc(\'month\', '. $timestamp. ')::date < vbt.bis AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von) OR (vbt.bis IS NULL AND (date_trunc(\'month\', '. $timestamp. ') + interval \'1 month - 1 day\')::date > vbt.von)) - -- Vorerst nur check, ob zumindest eine aufrechte Zeitaufzeichnungspflicht. Später Unterscheidung nach Dienstverhältnis. - ORDER BY vbt.von DESC --aktuellster + -- ...am aktuellen Tag (default) oder am Tag des übergebenen $datums + AND ( + (' . $timestamp . '::date BETWEEN vbt.von AND vbt.bis) + OR + (vbt.bis IS NULL AND ' . $timestamp . '::date > vbt.von) + ) + ORDER BY vbt.von DESC --zur Sicherheit: aktuellster LIMIT 1'; if ($result = $this->db_query($qry)) From 5452dc6fe3aef574080fea6d39b27e530684fabb Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 10 Jan 2024 14:15:50 +0100 Subject: [PATCH 3/6] Adapted: getVorgesetzte retrieve only the latest Vorgesetzte Added order by and limit to get only one and the most actual Vorgesetzte --- include/mitarbeiter.class.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index db8998379..00b5c4d51 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1067,10 +1067,12 @@ class mitarbeiter extends benutzer } /** - * Gibt ein Array mit den UIDs der Vorgesetzten zurück + * Gibt ein Array mit den UIDs der aktuellen Vorgesetzten zurück + * @param null $uid + * @param null $limit LIMIT = 1 liefert bei mehreren Vorgesetzten den letzten (aktuellsten) zurück. * @return uid */ - public function getVorgesetzte($uid=null) + public function getVorgesetzte($uid=null, $limit = null) { $return=false; if (is_null($uid)) @@ -1090,8 +1092,13 @@ class mitarbeiter extends benutzer funktion_kurzbz='oezuordnung' AND uid=".$this->db_add_param($uid)." AND (datum_von is null OR datum_von<=now()) AND (datum_bis is null OR datum_bis>=now()) - );"; + ) + ORDER BY datum_von DESC "; + if (is_numeric($limit)) + { + $qry .= 'LIMIT '. $this->db_add_param($limit, FHC_INTEGER); + } if($this->db_query($qry)) { From 97a020460d3b57f0af9ce311860f1ede6baa2be9 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 10 Jan 2024 14:31:26 +0100 Subject: [PATCH 4/6] Adapted: getVorgesetzteByDate to retrieve only the latest Vorgesetzte by a specific date Added order by and limit to get only one and the most actual Vorgesetzte by given date. Changed name. Before it was getVorgesetzteMonatTimesheet, but it is also used independently from timesheet. --- include/mitarbeiter.class.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 00b5c4d51..9bcdc352b 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1122,9 +1122,12 @@ class mitarbeiter extends benutzer /** * Gibt ein Array mit den UIDs der Vorgesetzten zum Zeitpunkt des korrespondierenden Timesheets zurück + * @param $uid + * @param $date + * @param null $limit LIMIT = 1 liefert bei mehreren Vorgesetzten den letzten (aktuellsten) zurück. * @return uid */ - public function getVorgesetzteMonatTimesheet($uid, $timesheetDate) + public function getVorgesetzteByDate($uid, $date, $limit = null) { $return=false; @@ -1134,15 +1137,21 @@ class mitarbeiter extends benutzer public.tbl_benutzerfunktion WHERE funktion_kurzbz='Leitung' AND - (datum_von is null OR datum_von<=".$this->db_add_param($timesheetDate).") AND - (datum_bis is null OR datum_bis>=".$this->db_add_param($timesheetDate).") AND + (datum_von is null OR datum_von<=".$this->db_add_param($date).") AND + (datum_bis is null OR datum_bis>=".$this->db_add_param($date).") AND oe_kurzbz in (SELECT oe_kurzbz FROM public.tbl_benutzerfunktion WHERE funktion_kurzbz='oezuordnung' AND uid=".$this->db_add_param($uid)." AND - (datum_von is null OR (datum_von<= ".$this->db_add_param($timesheetDate).")) AND - (datum_bis is null OR (datum_bis>=".$this->db_add_param($timesheetDate).")) - );"; + (datum_von is null OR (datum_von<= ".$this->db_add_param($date).")) AND + (datum_bis is null OR (datum_bis>=".$this->db_add_param($date).")) + ) + ORDER BY datum_von DESC "; + + if (is_numeric($limit)) + { + $qry .= 'LIMIT '. $this->db_add_param($limit); + } if($this->db_query($qry)) { From e3f10069ef0216d9488bbc8df33ab1d62fdebf75 Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 10 Jan 2024 14:42:13 +0100 Subject: [PATCH 5/6] =?UTF-8?q?Adapted=20getUntergebene=20to=20allow=20to?= =?UTF-8?q?=20include=20also=20Mitarbeiter,=20who=20ended=20Dienstverh?= =?UTF-8?q?=C3=A4ltnis/changed=20OE=20last=20month?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These allows Vorgesetzte to still access their data, for example to be able to accept their November-Monatsliste (last working month) in December (month to accept the November-Monatsliste) --- include/mitarbeiter.class.php | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 9bcdc352b..8baa86b02 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1220,16 +1220,16 @@ class mitarbeiter extends benutzer return $return; } - - /** * Gibt ein Array mit den UIDs der aktiv beschäftigten Untergebenen zurueck * @param string $uid UID. * @param boolean $include_OE_childs Wenn true, dann werden auch alle aktiv * beschäftigten Untergebenen der Kind-OEs des Leiters zurückgegeben. + * @param bool $fixangestellte_only + * @param bool $include_ImLetztenMonatBeendete Inkludiert Mitarbeiter, deren Benutzerfunktion im letzten Monat bereits endete * @return boolean */ - public function getUntergebene($uid=null, $include_OE_childs = false, $fixangestellte_only = true) + public function getUntergebene($uid=null, $include_OE_childs = false, $fixangestellte_only = true, $include_ImLetztenMonatBeendete = false) { if (is_null($uid)) $uid=$this->uid; @@ -1336,11 +1336,18 @@ class mitarbeiter extends benutzer $qry.= ") AND - (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now()) - AND - (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now()) - AND - tbl_benutzer.aktiv = 'true'"; + (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now())"; + if ($include_ImLetztenMonatBeendete) + { + // hier kein check auf aktiv = 'true', da hier auch DV abgefragt werden, die im letzten Monat beendet wurden + $qry .= " AND (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis >= (DATE_TRUNC('MONTH', NOW()) - INTERVAL '1 month'))"; + } + else { + + $qry .= " AND (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis >= now())"; + $qry .= " AND tbl_benutzer.aktiv = 'true'"; + } + if ($fixangestellte_only) $qry .= " AND tbl_mitarbeiter.fixangestellt"; $qry .= ";"; From 73ba14cdec4571dcea1456f27a054ebaf92bf68c Mon Sep 17 00:00:00 2001 From: Cris Date: Wed, 10 Jan 2024 14:44:33 +0100 Subject: [PATCH 6/6] Removed unused function check_isVorgesetzter This was replaced by using getVorgesetzer / getVorgesetzterByDate method. --- include/mitarbeiter.class.php | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 8baa86b02..b7d56bd3d 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1640,28 +1640,6 @@ class mitarbeiter extends benutzer } } - /** Check if uid is a supervisor - * - * @param string $uid - * @param string $employee_uid - * @return boolean True if $uid is direct leader of $employee_uid. - */ - function check_isVorgesetzter($uid, $employee_uid) - { - $this->getUntergebene($uid); - $untergebenen_arr = $this->untergebene; - - // Check, if uid is an employee of supervisor - if (!empty($untergebenen_arr) && - in_array($employee_uid, $untergebenen_arr)) - { - return true; - } - else - { - return false; - } - } /** Check if uid is a supervisor on higher oe level * * @param string $uid