Merge branch 'feature-25562/PV21_Datenbankstruktur_fuer_Vertraege_und_Gehaelter' into deploy-PV21

This commit is contained in:
Harald Bamberger
2024-01-11 09:46:30 +01:00
2 changed files with 56 additions and 49 deletions
+40 -39
View File
@@ -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
+16 -10
View File
@@ -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))