mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-22 17:32:18 +00:00
Merge branch 'master' into feature-25999/C4_ma0594dev
This commit is contained in:
+219
-48
@@ -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))
|
||||
@@ -1084,14 +1086,40 @@ 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 ";
|
||||
|
||||
if (is_numeric($limit))
|
||||
{
|
||||
$qry .= 'LIMIT '. $this->db_add_param($limit, FHC_INTEGER);
|
||||
}
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
@@ -1113,11 +1141,146 @@ 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
|
||||
* @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 +1290,38 @@ 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
|
||||
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).") 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)."))
|
||||
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))
|
||||
{
|
||||
$qry .= 'LIMIT '. $this->db_add_param($limit);
|
||||
}
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
@@ -1204,16 +1390,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 +1506,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 +1810,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
|
||||
@@ -1753,7 +1924,7 @@ class mitarbeiter extends benutzer
|
||||
{
|
||||
if (is_null($uid))
|
||||
$uid = $this->uid;
|
||||
|
||||
|
||||
$qry = "
|
||||
SELECT o.oe_kurzbz AS standardkostenstelle, o.bezeichnung
|
||||
FROM public.tbl_benutzerfunktion bf
|
||||
@@ -1770,7 +1941,7 @@ class mitarbeiter extends benutzer
|
||||
$obj = new StdClass();
|
||||
$obj->oekurzbz = $row->standardkostenstelle;
|
||||
$obj->bezeichnung = $row->bezeichnung;
|
||||
|
||||
|
||||
$this->result []= $obj;
|
||||
}
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user