Merge branch 'master' into feature-18571/EntwicklungsteamBisMeldung

This commit is contained in:
Andreas Österreicher
2024-02-26 15:58:49 +01:00
26 changed files with 1345 additions and 430 deletions
+180 -10
View File
@@ -1086,12 +1086,33 @@ class mitarbeiter extends benutzer
funktion_kurzbz='Leitung' AND
(datum_von is null OR datum_von<=now()) AND
(datum_bis is null OR datum_bis>=now()) AND
oe_kurzbz in (SELECT oe_kurzbz
FROM public.tbl_benutzerfunktion
WHERE
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<=now()) AND
(datum_bis is null OR datum_bis>=now())
ORDER BY
(
SELECT
1
FROM
hr.tbl_vertragsbestandteil_funktion
JOIN hr.tbl_vertragsbestandteil vbsfkt USING(vertragsbestandteil_id)
JOIN hr.tbl_vertragsbestandteil vbskarenz USING(dienstverhaeltnis_id)
WHERE
tbl_vertragsbestandteil_funktion.benutzerfunktion_id=tbl_benutzerfunktion.benutzerfunktion_id
AND vbskarenz.vertragsbestandteiltyp_kurzbz='karenz'
AND
(
now()::date BETWEEN COALESCE(vbskarenz.von, '1970-01-01') AND COALESCE(vbskarenz.bis, '2170-12-31')
OR
now()::date BETWEEN COALESCE(vbskarenz.von, '1970-01-01') AND COALESCE(vbskarenz.bis, '2170-12-31')
)
) NULLS FIRST LIMIT 1
)
ORDER BY datum_von DESC ";
@@ -1120,6 +1141,138 @@ class mitarbeiter extends benutzer
return $return;
}
/**
* Prueft ob eine Person im angegebenen Zeitraum Vorgesetzter von einem Mitarbeiter ist
* @param $leiter UID der zu pruefenden Leitungsposition
* @param $mitarbeiter UID der zu pruefenden Leitungsposition
* @param $datumvon Von Datum des zu pruefenden Zeitraums
* @param $datumbis BIS Datum des zu pruefenden Zeitraums
*/
public function isVorgesetzterByDate($leiter, $mitarbeiter, $datumvon, $datumbis)
{
// Alle OEs der zu pruefenden Leitungsposition holen (oes_leitung)
// Alle OEs des zu pruefenden Mitarbeiters holen (oes_mitarbeiter)
// OE-Ueberschneidungen pruefen
$qry = "
WITH RECURSIVE
oes_leitung (oe_kurzbz, oe_parent_kurzbz, level) AS
(
SELECT
oe_kurzbz,
oe_parent_kurzbz,
1 as level
FROM
public.tbl_organisationseinheit
WHERE
oe_kurzbz IN (
-- Leitung im Zeitraum X
SELECT oe_kurzbz FROM public.tbl_benutzerfunktion
WHERE
funktion_kurzbz='Leitung'
AND uid=".$this->db_add_param($leiter)."
AND
(
".$this->db_add_param($datumvon)." BETWEEN COALESCE(tbl_benutzerfunktion.datum_von, '1970-01-01') AND COALESCE(tbl_benutzerfunktion.datum_bis, '2170-12-31')
OR
".$this->db_add_param($datumbis)." BETWEEN COALESCE(tbl_benutzerfunktion.datum_von, '1970-01-01') AND COALESCE(tbl_benutzerfunktion.datum_bis, '2170-12-31')
)
)
UNION ALL
SELECT
o.oe_kurzbz,
o.oe_parent_kurzbz,
oes_leitung.level + 1 as level
FROM
public.tbl_organisationseinheit o, oes_leitung
WHERE
o.oe_parent_kurzbz = oes_leitung.oe_kurzbz
),
oes_mitarbeiter (oe_kurzbz, oe_parent_kurzbz, level) AS
(
SELECT
oe_kurzbz,
oe_parent_kurzbz,
1 as level
FROM
public.tbl_organisationseinheit
WHERE
oe_kurzbz IN (
-- OEZuordnung im Zeitraum X - bevorzugt nicht karenziert
SELECT oe_kurzbz FROM public.tbl_benutzerfunktion
WHERE
funktion_kurzbz='oezuordnung'
AND uid=".$this->db_add_param($mitarbeiter)."
AND (
".$this->db_add_param($datumvon)." BETWEEN COALESCE(tbl_benutzerfunktion.datum_von, '1970-01-01') AND COALESCE(tbl_benutzerfunktion.datum_bis, '2170-12-31')
OR
".$this->db_add_param($datumbis)." BETWEEN COALESCE(tbl_benutzerfunktion.datum_von, '1970-01-01') AND COALESCE(tbl_benutzerfunktion.datum_bis, '2170-12-31')
)
ORDER BY
(
SELECT
1
FROM
hr.tbl_vertragsbestandteil_funktion
JOIN hr.tbl_vertragsbestandteil vbsfkt USING(vertragsbestandteil_id)
JOIN hr.tbl_vertragsbestandteil vbskarenz USING(dienstverhaeltnis_id)
WHERE
tbl_vertragsbestandteil_funktion.benutzerfunktion_id=tbl_benutzerfunktion.benutzerfunktion_id
AND vbskarenz.vertragsbestandteiltyp_kurzbz='karenz'
AND
(
".$this->db_add_param($datumvon)." BETWEEN COALESCE(vbskarenz.von, '1970-01-01') AND COALESCE(vbskarenz.bis, '2170-12-31')
OR
".$this->db_add_param($datumbis)." BETWEEN COALESCE(vbskarenz.von, '1970-01-01') AND COALESCE(vbskarenz.bis, '2170-12-31')
)
) NULLS FIRST LIMIT 1
)
UNION ALL
SELECT
o.oe_kurzbz,
o.oe_parent_kurzbz,
oes_mitarbeiter.level + 1 as level
FROM
public.tbl_organisationseinheit o, oes_mitarbeiter
WHERE
o.oe_kurzbz = oes_mitarbeiter.oe_parent_kurzbz
)
SELECT
oe_kurzbz, level
FROM
oes_leitung
WHERE
oe_kurzbz in (SELECT oe_kurzbz FROM oes_mitarbeiter)
ORDER BY
oe_kurzbz, level
";
if($result = $this->db_query($qry))
{
if($this->db_num_rows($result) > 0)
{
return true;
}
else
{
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Laden der Daten';
return false;
}
}
/**
* Gibt ein Array mit den UIDs der Vorgesetzten zum Zeitpunkt des korrespondierenden Timesheets zurück
* @param $uid
@@ -1139,13 +1292,30 @@ class mitarbeiter extends benutzer
funktion_kurzbz='Leitung' 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($date).")) AND
(datum_bis is null OR (datum_bis>=".$this->db_add_param($date)."))
)
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($date).")) AND
(datum_bis is null OR (datum_bis>=".$this->db_add_param($date)."))
ORDER BY
(
SELECT
1
FROM
hr.tbl_vertragsbestandteil_funktion
JOIN hr.tbl_vertragsbestandteil vbsfkt USING(vertragsbestandteil_id)
JOIN hr.tbl_vertragsbestandteil vbskarenz USING(dienstverhaeltnis_id)
WHERE
tbl_vertragsbestandteil_funktion.benutzerfunktion_id=tbl_benutzerfunktion.benutzerfunktion_id
AND vbskarenz.vertragsbestandteiltyp_kurzbz='karenz'
AND (vbskarenz.von <= ".$this->db_add_param($date)." OR vbskarenz.von is null)
AND (vbskarenz.bis >= ".$this->db_add_param($date)." OR vbskarenz.bis is null)
) NULLS FIRST LIMIT 1
)
ORDER BY datum_von DESC ";
if (is_numeric($limit))