Merge branch 'feature-5920/Personalmeldung_Berechnung_VZAE_JVZAE'

This commit is contained in:
Andreas Österreicher
2020-03-17 16:27:40 +01:00
12 changed files with 1567 additions and 506 deletions
+92
View File
@@ -587,5 +587,97 @@ class bisverwendung extends basis_db
return false;
}
}
/**
* Prueft, ob Mitarbeiter habilitiert ist
* @param $uid UID des Mitarbeiters
* @return bool
*/
public function isHabilitiert($uid)
{
$qry = '
SELECT
*
FROM
bis.tbl_bisverwendung
WHERE
mitarbeiter_uid = '. $this->db_add_param($uid). '
AND
habilitation = true;
';
if ($this->db_query($qry))
{
return $this->db_num_rows() > 0;
}
}
/**
* Holt alle Verwendungen eines Mitarbeiters innerhalb des BIS Meldungszeitraums
* @param $uid UID des Mitarbeiters
* @param $stichtag
* @return bool
*/
public function getVerwendungenBISMeldung($uid, $stichtag)
{
$datetime = new DateTime($stichtag);
$stichtag = $datetime->format('Y-m-d');
$bismeldung_jahr = $datetime->format('Y');
$qry = '
SELECT
*,
CASE
WHEN (beginn is null OR beginn < make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1))
THEN make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1)
ELSE beginn
END as beginn_imBISMeldungsJahr,
CASE
WHEN (ende is null OR ende > make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31))
THEN make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31)
ELSE ende
END as ende_imBISMeldungsJahr
FROM
bis.tbl_bisverwendung
JOIN bis.tbl_beschaeftigungsart1 USING (ba1code)
WHERE
mitarbeiter_uid = '. $this->db_add_param($uid).'
AND (beginn <= '. $this->db_add_param($stichtag).' OR beginn is null)
AND (ende >= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1) OR ende is null)
ORDER BY ende
';
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new StdClass();
$obj->bisverwendung_id = $row->bisverwendung_id;
$obj->mitarbeiter_uid = $row->mitarbeiter_uid;
$obj->vertragsstunden = $row->vertragsstunden;
$obj->ba1code = $row->ba1code_bis;
$obj->ba2code = $row->ba2code;
$obj->verwendung_code = $row->verwendung_code;
$obj->beschausmasscode = $row->beschausmasscode;
$obj->hauptberufcode = $row->hauptberufcode;
$obj->hauptberuflich = $this->db_parse_bool($row->hauptberuflich);
$obj->beginn = $row->beginn;
$obj->ende = $row->ende;
$obj->beginn_imBISMeldungsJahr = $row->beginn_imbismeldungsjahr;
$obj->ende_imBISMeldungsJahr = $row->ende_imbismeldungsjahr;
$this->result[] = $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
}
?>
+112
View File
@@ -44,6 +44,8 @@ class lehreinheitmitarbeiter extends basis_db
public $ext_id; // bigint
public $vertrag_id;
public $result = array();
/**
* Konstruktor - Laedt optional einee LEMitarbeiterzuordnung
* @param $lehreinheit_id
@@ -495,6 +497,116 @@ class lehreinheitmitarbeiter extends basis_db
return $ret;
}
/**
* Ladet Semesterwochenstunden-Summe eines Mitarbeiters eines Semesters.
* Nur bisrelevante SWS.
* @param String $uid
* @param String $studiensemester
* @return bool
*/
public function getLehreinheiten_SWS_BISMeldung($uid, $studiensemester)
{
$qry = '
SELECT
round(sum(semesterstunden) / 15) AS sws
FROM (
SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, mitarbeiter_uid, semesterstunden
FROM lehre.tbl_lehreinheitmitarbeiter lema
JOIN public.tbl_mitarbeiter ma USING (mitarbeiter_uid)
JOIN public.tbl_benutzer ON (mitarbeiter_uid = uid)
JOIN public.tbl_person USING (person_id)
JOIN bis.tbl_bisverwendung USING (mitarbeiter_uid)
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz)
WHERE mitarbeiter_uid = '. $this->db_add_param($uid).'
AND lema.bismelden
AND studiensemester_kurzbz = '. $this->db_add_param($studiensemester).'
) tbl_semesterstunden
';
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$this->result[] = $row->sws;
}
return true;
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
/**
* Ladet Semesterwochenstunden-Summe gruppiert nach Studiengang und Studiensemester.
* Es werden die Studiensemester herangezogen, die im Zeitraum zwischen beginn und ende beginnen.
* @param String $uid
* @param String $beginn
* @param String $ende
* @return bool
*/
public function get_SWS_groupByStg($uid, $beginn, $ende)
{
$beginn = new DateTime($beginn);
$ende = new DateTime($ende);
$qry = '
WITH semester_sws_tbl AS (
SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, lema.semesterstunden, stg.studiengang_kz
FROM lehre.tbl_lehreinheitmitarbeiter lema
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
JOIN lehre.tbl_studienplan_lehrveranstaltung USING (lehrveranstaltung_id)
JOIN lehre.tbl_studienplan USING (studienplan_id)
JOIN lehre.tbl_studienordnung sto USING (studienordnung_id)
JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz
JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz)
WHERE mitarbeiter_uid = '. $this->db_add_param($uid). '
AND (
ss.start BETWEEN
'. $this->db_add_param($beginn->format('Y-m-d')). ' AND
'. $this->db_add_param($ende->format('Y-m-d')). ')
-- nur lehre, die bisgemeldet wird
AND lema.bismelden
-- keine lehreinheiten ohne semesterstunden
AND lema.semesterstunden != 0
)
SELECT
studiengang_kz,
studiensemester_kurzbz,
sum(semesterstunden) AS summe,
round(sum(semesterstunden) / 15, 2) AS sws
FROM
semester_sws_tbl
GROUP BY
studiengang_kz,
studiensemester_kurzbz
ORDER BY
studiengang_kz;
';
if ($this->db_query($qry))
{
while($row = $this->db_fetch_object())
{
$obj = new StdClass();
$obj->studiengang_kz = $row->studiengang_kz;
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
$obj->sws = $row->sws;
$this->result []= $obj;
}
return true;
}
else
{
$this->errormsg = 'Fehler bei der Datenbankabfrage';
return false;
}
}
/**
* Laedt die Lektoren einer Lehrveranstaltung in einem Studiensemester
* @param lehrveranstaltung_id
+51
View File
@@ -1539,5 +1539,56 @@ class mitarbeiter extends benutzer
}
}
/**
* Gibt alle Mitarbeiter zurück, die im BIS Meldungszeitraum bisgemeldet sind
* @param String $stichtag BIS Meldung Stichtag
* @return boolean
*/
public function getMitarbeiterBISMeldung($stichtag)
{
$datetime = new DateTime($stichtag);
$bismeldung_jahr = $datetime->format('Y');
$qry = '
SELECT DISTINCT ON (UID) *,
transform_geschlecht(tbl_person.geschlecht, tbl_person.gebdatum) as geschlecht_imputiert
FROM
public.tbl_mitarbeiter
JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid)
JOIN public.tbl_person USING(person_id)
JOIN bis.tbl_bisverwendung USING(mitarbeiter_uid)
JOIN bis.tbl_beschaeftigungsausmass USING(beschausmasscode)
WHERE
bismelden
AND personalnummer > 0
AND (beginn <= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 12, 31) OR beginn is null)
AND (tbl_bisverwendung.ende is NULL OR tbl_bisverwendung.ende >= make_date('. $this->db_add_param($bismeldung_jahr). '::INTEGER, 1, 1))
ORDER BY uid, nachname, vorname
';
if($result = $this->db_query($qry))
{
while($row = $this->db_fetch_object($result))
{
$obj = new StdClass();
$obj->uid = $row->uid;
$obj->vorname = $row->vorname;
$obj->vornamen = $row->vornamen;
$obj->nachname = $row->nachname;
$obj->gebdatum = $row->gebdatum;
$obj->geschlecht = $row->geschlecht;
$obj->geschlechtX = $row->geschlecht_imputiert;
$obj->staatsbuergerschaft = $row->staatsbuergerschaft;
$obj->personalnummer = $row->personalnummer;
$obj->ausbildungcode = $row->ausbildungcode;
$this->result []= $obj;
}
return true;
}
return false;
}
}
?>