From cf3d27c9fd5b9f87a7a8417fcfd59547cb99c279 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 17 Apr 2024 00:14:22 +0200 Subject: [PATCH] hour threshold assigning lvs to employees: fixangestellt is checked using Dienstverhaeltnis, if configured --- content/lvplanung/lehrveranstaltungDBDML.php | 102 +++++++------------ include/mitarbeiter.class.php | 70 +++++++++++++ 2 files changed, 109 insertions(+), 63 deletions(-) diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 12a28b943..663e266bb 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -188,6 +188,29 @@ function getStundenproInstitut($mitarbeiter_uid, $studiensemester_kurzbz, $oe_ar return $ret; } +/** + * Liefert zurück, ob Mitarbeiter ein echtes Dienstverhältnis hat. + * + * @param $mitarbeiter_uid + * @param $studiensemester_kurzbz + * @return int|null + */ +function hasEchtesDienstverhaeltnis($mitarbeiter_uid, $studiensemester_kurzbz) +{ + if(defined('DIENSTVERHAELTNIS_SUPPORT') && DIENSTVERHAELTNIS_SUPPORT) + { + $mitarbeiter = new mitarbeiter(); + + // Echte Dienstverhältisse ermitteln + $mitarbeiter->getDienstverhaeltnisse($studiensemester_kurzbz, 'echterdv', $mitarbeiter_uid); + + return count($mitarbeiter->result) > 0; + } + + // kein DV support + return null; +} + if(!$error) { if(!empty($_POST['lehrveranstaltung'])) @@ -302,7 +325,6 @@ if(!$error) //Wenn ja dann ein Warning zurueckliefern $ma = new mitarbeiter(); $ma->load($lem->mitarbeiter_uid); - $fixangestellt=$ma->fixangestellt; $oe_obj = new organisationseinheit(); $stunden_oe_kurzbz=null; @@ -310,16 +332,19 @@ if(!$error) $stg_obj = new studiengang(); $stg_obj->load($lva->studiengang_kz); + //Summe der Stunden ermitteln + $le = new lehreinheit(); + $le->load($lem->lehreinheit_id); + + $hasEchtesDv = hasEchtesDienstverhaeltnis($lem->mitarbeiter_uid, $le->studiensemester_kurzbz); + $fixangestellt = is_bool($hasEchtesDv) ? $hasEchtesDv : $ma->fixangestellt; + //Maximale Stundenanzahl ermitteln if($fixangestellt) list($stunden_oe_kurzbz, $max_stunden) = $oe_obj->getStundengrenze($stg_obj->oe_kurzbz, true); else list($stunden_oe_kurzbz, $max_stunden) = $oe_obj->getStundengrenze($stg_obj->oe_kurzbz, false); - //Summe der Stunden ermitteln - $le = new lehreinheit(); - $le->load($lem->lehreinheit_id); - if($lem->bismelden==false) $neue_stunden_eingerechnet=false; else @@ -545,7 +570,7 @@ if(!$error) $fixangestellt=false; //"lehre" Stundensatz aus hr.tbl_stundensatz holen - + $studiensemester = new studiensemester(); if (!$studiensemester->load($_POST['studiensemester_kurzbz'])) { @@ -559,38 +584,12 @@ if(!$error) $mitarbeiter = new mitarbeiter(); if ($mitarbeiter->load($_POST['mitarbeiter_uid'])) { - $fixangestellt = $mitarbeiter->fixangestellt; - + $hasEchtesDv = hasEchtesDienstverhaeltnis($mitarbeiter->uid, $studiensemester->studiensemester_kurzbz); + $fixangestellt = is_bool($hasEchtesDv) ? $hasEchtesDv > 0 : $mitarbeiter->fixangestellt; + $stundensatz = new stundensatz(); $stundensatz->getStundensatzDatum($mitarbeiter->uid, $studiensemester->start, $studiensemester->ende, 'lehre'); - $lem->stundensatz = $stundensatz->stundensatz; - - if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') - && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) - { - $stsem = new studiensemester(); - $stsem->load($semester_aktuell); - $bisverwendung = new bisverwendung(); - - if(!$bisverwendung->getVerwendungRange($mitarbeiter->uid, $stsem->start, $stsem->ende)) - { - $bisverwendung->getLastAktVerwendung($mitarbeiter->uid); - $bisverwendung->result[] = $bisverwendung; - } - - foreach($bisverwendung->result as $row_verwendung) - { - // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz - // geliefert da dies im Vertrag inkludiert ist. - - if ((in_array($row_verwendung->ba1code, $arrEchterDV)) && $row_verwendung->inkludierte_lehre == -1) - { - $fixangestellt = true; - $lem->stundensatz = ''; - break; - } - } - } + $lem->stundensatz = is_bool($hasEchtesDv) && $hasEchtesDv ? '' : $stundensatz->stundensatz; } else { @@ -1576,7 +1575,7 @@ if(!$error) $error = true; $errormsg = 'Fehler beim Laden des Studiensemesters'; } - + if (!$error) { $mitarbeiter = new mitarbeiter(); @@ -1584,32 +1583,9 @@ if(!$error) { $stundensatz = new stundensatz(); $stundensatz->getStundensatzDatum($mitarbeiter->uid, $studiensemester->start, $studiensemester->ende, 'lehre'); - $data = $stundensatz->stundensatz; - - if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') - && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ) - { - $stsem = new studiensemester(); - $stsem->load($semester_aktuell); - $bisverwendung = new bisverwendung(); - if(!$bisverwendung->getVerwendungRange($mitarbeiter->uid, $stsem->start, $stsem->ende)) - { - $bisverwendung->getLastAktVerwendung($mitarbeiter->uid); - $bisverwendung->result[] = $bisverwendung; - } - - foreach($bisverwendung->result as $row_verwendung) - { - - // Bei echten Dienstvertraegen mit voller inkludierter Lehre wird kein Stundensatz - // geliefert da dies im Vertrag inkludiert ist. - if ((in_array($row_verwendung->ba1code, $arrEchterDV)) && $row_verwendung->inkludierte_lehre == -1) - { - $data = ''; - break; - } - } - } + $hasEchtesDv = hasEchtesDienstverhaeltnis($mitarbeiter->uid, $studiensemester->studiensemester_kurzbz); + $data = is_bool($hasEchtesDv) && $hasEchtesDv ? '' : $stundensatz->stundensatz; + $return = true; } else diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 2802e241d..9eb3b7014 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1987,5 +1987,75 @@ class mitarbeiter extends benutzer return true; } } + + /** + * Holt alle Dienstverhaeltnisse des Mitarbeiters, optional für ein Studiensemester und/oder einen Vertragstyp. + */ + public function getDienstverhaeltnisse($studiensemester_kurzbz = null, $vertragsart_kurzbz = null, $uid = null) + { + if (is_null($uid)) + $uid=$this->uid; + + $qry = ""; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " + WITH semester_datum AS ( + SELECT + start, ende + FROM + public.tbl_studiensemester + WHERE + studiensemester_kurzbz = ". $this->db_add_param($studiensemester_kurzbz)." + ) + "; + } + + $qry .= " + SELECT + dienstverhaeltnis_id, mitarbeiter_uid, vertragsart_kurzbz, oe_kurzbz, von, bis + FROM + semester_datum CROSS JOIN + hr.tbl_dienstverhaeltnis dv + WHERE + dv.mitarbeiter_uid = ". $this->db_add_param($uid); + + if (isset($studiensemester_kurzbz)) + { + $qry .= " + AND (bis >= semester_datum.start OR bis IS NULL) + AND (von <= semester_datum.ende)"; + } + + if (isset($vertragsart_kurzbz)) + { + if (!is_array($vertragsart_kurzbz)) $vertragsart_kurzbz = array($vertragsart_kurzbz); + + $qry .= " + AND vertragsart_kurzbz IN (".$this->db_implode4SQL($vertragsart_kurzbz).")"; + } + + $qry .= " + ORDER BY + von, dienstverhaeltnis_id"; + + if ($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new StdClass(); + $obj->dienstverhaeltnis_id = $row->dienstverhaeltnis_id; + $obj->mitarbeiter_uid = $row->mitarbeiter_uid; + $obj->vertragsart_kurzbz = $row->vertragsart_kurzbz; + $obj->oe_kurzbz = $row->oe_kurzbz; + $obj->von = $row->von; + $obj->bis = $row->bis; + + $this->result []= $obj; + } + return true; + } + } } ?>