diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php
index b7d56bd3d..bb2a7b478 100644
--- a/include/mitarbeiter.class.php
+++ b/include/mitarbeiter.class.php
@@ -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))
@@ -1754,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
@@ -1771,7 +1941,7 @@ class mitarbeiter extends benutzer
$obj = new StdClass();
$obj->oekurzbz = $row->standardkostenstelle;
$obj->bezeichnung = $row->bezeichnung;
-
+
$this->result []= $obj;
}
return true;
diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php
index c8669de28..717cc58f3 100644
--- a/system/dbupdate_3.4.php
+++ b/system/dbupdate_3.4.php
@@ -49,6 +49,7 @@ require_once('dbupdate_3.4/30181_tabelle_anrechnung_neue_attribute_fuer_begruend
require_once('dbupdate_3.4/29529_infocenter_anpassungen.php');
require_once('dbupdate_3.4/29835_uhstat1_erfassung_der_uhstat1_daten_ueber_das_bewerbungstool.php');
require_once('dbupdate_3.4/33714_erhoehter_studienbeitrag_fuer_drittsaatenangehoerig.php');
+require_once('dbupdate_3.4/36275_zeitaufzeichnung_karenz.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
diff --git a/system/dbupdate_3.4/36275_zeitaufzeichnung_karenz.php b/system/dbupdate_3.4/36275_zeitaufzeichnung_karenz.php
new file mode 100644
index 000000000..ecdbe31f5
--- /dev/null
+++ b/system/dbupdate_3.4/36275_zeitaufzeichnung_karenz.php
@@ -0,0 +1,16 @@
+db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_vertragsbestandteil_funktion' AND table_schema='hr' AND grantee='web' AND privilege_type='SELECT'"))
+{
+ if ($db->db_num_rows($result) == 0)
+ {
+ $qry = "GRANT SELECT ON hr.tbl_vertragsbestandteil_funktion TO web;";
+
+ if (! $db->db_query($qry))
+ echo 'Vertragsbestandteil Funktion Rechte: ' . $db->db_last_error() . '
';
+ else
+ echo 'Leserechte für Web User auf vertragsbetandteil_funktion hinzugefuegt';
+ }
+}