Compare commits

...

6 Commits

2 changed files with 124 additions and 70 deletions
+54 -70
View File
@@ -66,13 +66,6 @@ $data = '';
$error = false;
$warnung = false;
//Default BA1Codes für echte Dienstverträge aus Config Laden
$arrEchterDV = [103];
if (defined('DEFAULT_ECHTER_DIENSTVERTRAG') && DEFAULT_ECHTER_DIENSTVERTRAG != '')
{
$arrEchterDV = DEFAULT_ECHTER_DIENSTVERTRAG;
}
loadVariables($user);
//Berechtigungen laden
@@ -188,6 +181,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 +318,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 +325,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
@@ -546,7 +564,7 @@ if(!$error)
$fixangestellt=false;
//"lehre" Stundensatz aus hr.tbl_stundensatz holen
$studiensemester = new studiensemester();
if (!$studiensemester->load($_POST['studiensemester_kurzbz']))
{
@@ -560,38 +578,18 @@ 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 =
defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ')
&& !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ
&& is_bool($hasEchtesDv)
&& $hasEchtesDv
? ''
: $stundensatz->stundensatz;
}
else
{
@@ -1578,7 +1576,7 @@ if(!$error)
$error = true;
$errormsg = 'Fehler beim Laden des Studiensemesters';
}
if (!$error)
{
$mitarbeiter = new mitarbeiter();
@@ -1586,32 +1584,18 @@ 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);
// Bei echten Dienstvertraegen wird kein Stundensatz
// geliefert da dies im Vertrag inkludiert ist.
$data =
defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ')
&& !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ
&& is_bool($hasEchtesDv)
&& $hasEchtesDv
? ''
: $stundensatz->stundensatz;
$return = true;
}
else
+70
View File
@@ -1995,5 +1995,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;
}
}
}
?>