diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index db8998379..b7d56bd3d 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)) { @@ -1115,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; @@ -1127,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)) { @@ -1204,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; @@ -1320,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 .= ";"; @@ -1617,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 diff --git a/include/vertragsbestandteil.class.php b/include/vertragsbestandteil.class.php index 2f6263f84..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)) @@ -309,7 +312,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 +335,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))