mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
Merge branch 'feature-75703/BIS_Personalmeldung_Lehrgaenge'
This commit is contained in:
@@ -552,9 +552,40 @@ class lehreinheitmitarbeiter extends basis_db
|
|||||||
$beginn = new DateTime($beginn);
|
$beginn = new DateTime($beginn);
|
||||||
$ende = new DateTime($ende);
|
$ende = new DateTime($ende);
|
||||||
|
|
||||||
|
// get relevant Studiensemester
|
||||||
|
$studiensemester_kurzbz_arr = [];
|
||||||
|
|
||||||
|
$qry = '
|
||||||
|
SELECT
|
||||||
|
studiensemester_kurzbz
|
||||||
|
FROM
|
||||||
|
public.tbl_studiensemester
|
||||||
|
WHERE
|
||||||
|
start BETWEEN
|
||||||
|
'. $this->db_add_param($beginn->format('Y-m-d')). ' AND
|
||||||
|
'. $this->db_add_param($ende->format('Y-m-d'));
|
||||||
|
|
||||||
|
if ($this->db_query($qry))
|
||||||
|
{
|
||||||
|
while($row = $this->db_fetch_object())
|
||||||
|
{
|
||||||
|
$studiensemester_kurzbz_arr[] = $row->studiensemester_kurzbz;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errormsg = 'Fehler bei der Datenbankabfrage';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lehrgaengeDistr = $this->_getLehrgaengeForDistribution($studiensemester_kurzbz_arr);
|
||||||
|
|
||||||
|
if (!is_array($studiensemester_kurzbz_arr) || empty($studiensemester_kurzbz_arr)) return true;
|
||||||
|
|
||||||
$qry = '
|
$qry = '
|
||||||
WITH semester_sws_tbl AS (
|
WITH semester_sws_tbl AS (
|
||||||
SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, lema.semesterstunden, stg.studiengang_kz
|
SELECT DISTINCT lehreinheit_id, studiensemester_kurzbz, lema.semesterstunden,
|
||||||
|
stg.studiengang_kz, stg.melde_studiengang_kz, stg.lgartcode
|
||||||
FROM lehre.tbl_lehreinheitmitarbeiter lema
|
FROM lehre.tbl_lehreinheitmitarbeiter lema
|
||||||
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
JOIN lehre.tbl_lehreinheit USING (lehreinheit_id)
|
||||||
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
|
||||||
@@ -564,38 +595,103 @@ class lehreinheitmitarbeiter extends basis_db
|
|||||||
JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz
|
JOIN public.tbl_studiengang stg ON stg.studiengang_kz = sto.studiengang_kz
|
||||||
JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz)
|
JOIN public.tbl_studiensemester ss USING (studiensemester_kurzbz)
|
||||||
WHERE mitarbeiter_uid = '. $this->db_add_param($uid). '
|
WHERE mitarbeiter_uid = '. $this->db_add_param($uid). '
|
||||||
AND (
|
AND ss.studiensemester_kurzbz IN ('.$this->implode4SQL($studiensemester_kurzbz_arr).')
|
||||||
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
|
-- nur lehre, die bisgemeldet wird
|
||||||
AND lema.bismelden
|
AND lema.bismelden
|
||||||
-- keine lehreinheiten ohne semesterstunden
|
-- keine lehreinheiten ohne semesterstunden
|
||||||
AND lema.semesterstunden != 0
|
AND lema.semesterstunden != 0
|
||||||
)
|
)
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
studiengang_kz,
|
studiengang_kz,
|
||||||
studiensemester_kurzbz,
|
studiensemester_kurzbz,
|
||||||
|
melde_studiengang_kz,
|
||||||
|
lgartcode,
|
||||||
sum(semesterstunden) AS summe,
|
sum(semesterstunden) AS summe,
|
||||||
round(sum(semesterstunden) / 15, 2) AS sws
|
round(sum(semesterstunden) / 15, 2) AS sws
|
||||||
FROM
|
FROM
|
||||||
semester_sws_tbl
|
semester_sws_tbl
|
||||||
GROUP BY
|
GROUP BY
|
||||||
studiengang_kz,
|
studiengang_kz,
|
||||||
studiensemester_kurzbz
|
studiensemester_kurzbz,
|
||||||
|
melde_studiengang_kz,
|
||||||
|
lgartcode
|
||||||
ORDER BY
|
ORDER BY
|
||||||
studiengang_kz;
|
studiengang_kz;
|
||||||
';
|
';
|
||||||
|
|
||||||
if ($this->db_query($qry))
|
if ($this->db_query($qry))
|
||||||
{
|
{
|
||||||
|
$additionalLehrgaenge = [];
|
||||||
|
|
||||||
while($row = $this->db_fetch_object())
|
while($row = $this->db_fetch_object())
|
||||||
{
|
{
|
||||||
$obj = new StdClass();
|
$obj = new StdClass();
|
||||||
$obj->studiengang_kz = $row->studiengang_kz;
|
$obj->studiengang_kz = $row->studiengang_kz;
|
||||||
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
|
$obj->studiensemester_kurzbz = $row->studiensemester_kurzbz;
|
||||||
|
$obj->melde_studiengang_kz = $row->melde_studiengang_kz;
|
||||||
|
$obj->lgartcode = $row->lgartcode;
|
||||||
$obj->sws = $row->sws;
|
$obj->sws = $row->sws;
|
||||||
|
|
||||||
|
if (isset($lehrgaengeDistr[$uid][$row->studiensemester_kurzbz]))
|
||||||
|
{
|
||||||
|
$lehrgaenge = $lehrgaengeDistr[$uid][$row->studiensemester_kurzbz];
|
||||||
|
|
||||||
|
foreach ($lehrgaenge as $lehreinheit_id => $lehrgangKzArr)
|
||||||
|
{
|
||||||
|
// wenn lehrgang gefunden, zusammenhängende Lehrgaenge holen und sws aufteilen
|
||||||
|
if (array_key_exists($row->studiengang_kz, $lehrgangKzArr))
|
||||||
|
{
|
||||||
|
foreach ($lehrgangKzArr as $studiengang_kz => $lehrgang)
|
||||||
|
{
|
||||||
|
// check: nur eine Studiengangsverknüpfung pro Mitarbeiter, Semester, und Referenzstudiengang
|
||||||
|
if (
|
||||||
|
$studiengang_kz == $row->studiengang_kz
|
||||||
|
|| isset(
|
||||||
|
$additionalLehrgaenge[$uid][$row->studiensemester_kurzbz][$row->studiengang_kz][$studiengang_kz]
|
||||||
|
)
|
||||||
|
) continue;
|
||||||
|
|
||||||
|
// Lehrgang erstellen
|
||||||
|
$lg = new StdClass();
|
||||||
|
$lg->mitarbeiter_uid = $uid;
|
||||||
|
$lg->melde_studiengang_kz = $lehrgang->melde_studiengang_kz;
|
||||||
|
$lg->lgartcode = $lehrgang->lgartcode;
|
||||||
|
$lg->studiengang_kz = $lehrgang->studiengang_kz;
|
||||||
|
$lg->studiensemester_kurzbz = $lehrgang->studiensemester_kurzbz;
|
||||||
|
$lg->summe = $row->summe;
|
||||||
|
$lg->sws = $row->sws;
|
||||||
|
// Lehrgang, der mit Ursprungsstudiengang aufgrund lehreinheit "verknüpft" ist, hinzufügen
|
||||||
|
$additionalLehrgaenge[$uid][$row->studiensemester_kurzbz][$row->studiengang_kz][$studiengang_kz] = $lg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignorieren, wenn für den Studiengang keine verknüpften Lehrgaenge hat
|
||||||
|
if (isset($additionalLehrgaenge[$uid][$row->studiensemester_kurzbz][$row->studiengang_kz]))
|
||||||
|
{
|
||||||
|
$addLehrgaenge = $additionalLehrgaenge[$uid][$row->studiensemester_kurzbz][$row->studiengang_kz];
|
||||||
|
|
||||||
|
// sws Durchschnitt über alle verknuepften Lehrgaenge berechnet
|
||||||
|
$summeSws = $row->summe/(count($addLehrgaenge) + 1);
|
||||||
|
$sws = $row->sws/(count($addLehrgaenge) + 1);
|
||||||
|
|
||||||
|
// neue sws zuweisen
|
||||||
|
$obj->summe = $summeSws;
|
||||||
|
$obj->sws = $sws;
|
||||||
|
|
||||||
|
foreach ($addLehrgaenge as $conn_ws_studiengang_kz => $lehrgang)
|
||||||
|
{
|
||||||
|
// sws fuer jeden verknuepften Lehrgang zuweisen
|
||||||
|
$lehrgang->summe = $summeSws;
|
||||||
|
$lehrgang->sws = $sws;
|
||||||
|
|
||||||
|
// neue lehrgang sws hinzufuegen
|
||||||
|
$this->result [] = $lehrgang;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->result []= $obj;
|
$this->result []= $obj;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -655,4 +751,63 @@ class lehreinheitmitarbeiter extends basis_db
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get "connected" Lehrgaenge for equal sws distribution.
|
||||||
|
* @param $studiensemester_kurzbz_arr all semester for which Lehrgaenge should be retrieved
|
||||||
|
* @return object success or error
|
||||||
|
*/
|
||||||
|
private function _getLehrgaengeForDistribution($studiensemester_kurzbz_arr)
|
||||||
|
{
|
||||||
|
if (!is_array($studiensemester_kurzbz_arr) || empty($studiensemester_kurzbz_arr)) return [];
|
||||||
|
|
||||||
|
$qry = "
|
||||||
|
WITH gruppen AS (
|
||||||
|
SELECT
|
||||||
|
mitarbeiter_uid, lehreinheit_id, lehrveranstaltung_id, studiensemester_kurzbz, sem.start, sem.ende,
|
||||||
|
lehreinheitgruppe_id, studiengang_kz, melde_studiengang_kz, lgartcode
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehreinheitmitarbeiter lema
|
||||||
|
JOIN lehre.tbl_lehreinheit le USING (lehreinheit_id)
|
||||||
|
JOIN lehre.tbl_lehreinheitgruppe legr USING (lehreinheit_id)
|
||||||
|
JOIN public.tbl_studiengang stg USING (studiengang_kz)
|
||||||
|
JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz)
|
||||||
|
WHERE
|
||||||
|
bismelden
|
||||||
|
AND stg.melderelevant
|
||||||
|
AND stg.typ = 'l'
|
||||||
|
AND le.studiensemester_kurzbz IN (".$this->implode4SQL($studiensemester_kurzbz_arr).")
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
DISTINCT mitarbeiter_uid, studiensemester_kurzbz, lehreinheit_id, studiengang_kz, melde_studiengang_kz, lgartcode
|
||||||
|
FROM
|
||||||
|
gruppen gr
|
||||||
|
GROUP BY
|
||||||
|
mitarbeiter_uid, studiensemester_kurzbz, lehreinheit_id, studiengang_kz, melde_studiengang_kz, lgartcode
|
||||||
|
ORDER BY
|
||||||
|
mitarbeiter_uid, studiensemester_kurzbz, lehreinheit_id, studiengang_kz, melde_studiengang_kz, lgartcode";
|
||||||
|
|
||||||
|
$lehrgaengeDistributions = [];
|
||||||
|
|
||||||
|
if($this->db_query($qry))
|
||||||
|
{
|
||||||
|
while($row = $this->db_fetch_object())
|
||||||
|
{
|
||||||
|
// group by properties
|
||||||
|
$lehrgaengeDistributions
|
||||||
|
[$row->mitarbeiter_uid]
|
||||||
|
[$row->studiensemester_kurzbz]
|
||||||
|
[$row->lehreinheit_id]
|
||||||
|
[$row->studiengang_kz]
|
||||||
|
= $row;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->errormsg = 'Fehler bei der Datenbankabfrage';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $lehrgaengeDistributions;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -875,7 +875,6 @@ function _getLehrecontainer($sws_proStg_arr)
|
|||||||
$sws_proStg_arr = array_filter($sws_proStg_arr, function ($obj) {
|
$sws_proStg_arr = array_filter($sws_proStg_arr, function ($obj) {
|
||||||
return
|
return
|
||||||
!in_array($obj->studiengang_kz, BIS_EXCLUDE_STG) &&
|
!in_array($obj->studiengang_kz, BIS_EXCLUDE_STG) &&
|
||||||
$obj->studiengang_kz > 0 &&
|
|
||||||
$obj->studiengang_kz < 10000;
|
$obj->studiengang_kz < 10000;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -886,13 +885,17 @@ function _getLehrecontainer($sws_proStg_arr)
|
|||||||
{
|
{
|
||||||
$is_sommersemester = substr($sws_proStg->studiensemester_kurzbz, 0, 2) == 'SS';
|
$is_sommersemester = substr($sws_proStg->studiensemester_kurzbz, 0, 2) == 'SS';
|
||||||
$is_wintersemester = substr($sws_proStg->studiensemester_kurzbz, 0, 2) == 'WS';
|
$is_wintersemester = substr($sws_proStg->studiensemester_kurzbz, 0, 2) == 'WS';
|
||||||
|
$is_lehrgang = isset($sws_proStg->lgartcode);
|
||||||
|
$kennzeichen_name = $is_lehrgang ? 'LehrgangNr' : 'StgKz';
|
||||||
|
|
||||||
// Lehreobjekt generieren
|
// Lehreobjekt generieren
|
||||||
if (empty($lehre_arr) || !lehre_stg_exists($sws_proStg->studiengang_kz, $lehre_arr))
|
if (empty($lehre_arr) || !lehre_stg_exists($sws_proStg->studiengang_kz, $lehre_arr))
|
||||||
{
|
{
|
||||||
$lehre_obj = new StdClass();
|
$lehre_obj = new StdClass();
|
||||||
|
|
||||||
$lehre_obj->StgKz = setLeadingZero(intval($sws_proStg->studiengang_kz), 4);
|
$lehre_obj->{$kennzeichen_name} = $sws_proStg->melde_studiengang_kz;
|
||||||
|
//~ $lehre_obj->StgKz = setLeadingZero(intval($sws_proStg->studiengang_kz), 4);
|
||||||
|
|
||||||
$lehre_obj->SommersemesterSWS = $is_sommersemester ? $sws_proStg->sws : 0.00;
|
$lehre_obj->SommersemesterSWS = $is_sommersemester ? $sws_proStg->sws : 0.00;
|
||||||
$lehre_obj->WintersemesterSWS = $is_wintersemester ? $sws_proStg->sws : 0.00;
|
$lehre_obj->WintersemesterSWS = $is_wintersemester ? $sws_proStg->sws : 0.00;
|
||||||
|
|
||||||
@@ -1020,9 +1023,14 @@ function _generateXML($person_arr)
|
|||||||
foreach ($person->lehre_arr as $lehre)
|
foreach ($person->lehre_arr as $lehre)
|
||||||
{
|
{
|
||||||
$xml .= '<Lehre>';
|
$xml .= '<Lehre>';
|
||||||
$xml .= '<StgKz><![CDATA['. $lehre->StgKz. ']]></StgKz>';
|
|
||||||
$xml .= '<SommersemesterSWS><![CDATA['. $lehre->SommersemesterSWS. ']]></SommersemesterSWS>';
|
if (isset($lehre->LehrgangNr))
|
||||||
$xml .= '<WintersemesterSWS><![CDATA['. $lehre->WintersemesterSWS. ']]></WintersemesterSWS>';
|
$xml .= '<LehrgangNr><![CDATA['. $lehre->LehrgangNr. ']]></LehrgangNr>';
|
||||||
|
else
|
||||||
|
$xml .= '<StgKz><![CDATA['. $lehre->StgKz. ']]></StgKz>';
|
||||||
|
|
||||||
|
$xml .= '<SommersemesterSWS><![CDATA['. number_format($lehre->SommersemesterSWS, 2, '.', ''). ']]></SommersemesterSWS>';
|
||||||
|
$xml .= '<WintersemesterSWS><![CDATA['. number_format($lehre->WintersemesterSWS, 2, '.', ''). ']]></WintersemesterSWS>';
|
||||||
$xml .= '</Lehre>';
|
$xml .= '</Lehre>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1211,7 +1219,7 @@ function _outputHTML($person_arr)
|
|||||||
{
|
{
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td>'. $lehre->StgKz. '</td>
|
<td>'. (isset($lehre->LehrgangNr) ? $lehre->LehrgangNr : $lehre->StgKz). '</td>
|
||||||
<td>'. $lehre->SommersemesterSWS. '</td>
|
<td>'. $lehre->SommersemesterSWS. '</td>
|
||||||
<td>'. $lehre->WintersemesterSWS. '</td>
|
<td>'. $lehre->WintersemesterSWS. '</td>
|
||||||
</tr>';
|
</tr>';
|
||||||
@@ -1359,7 +1367,8 @@ function lehre_stg_exists($studiengang_kz, $lehre_arr)
|
|||||||
{
|
{
|
||||||
foreach($lehre_arr as $row)
|
foreach($lehre_arr as $row)
|
||||||
{
|
{
|
||||||
if($row->StgKz == $studiengang_kz)
|
$kennzeichenName = $row->LehrgangNr ?? $row->StgKz;
|
||||||
|
if(isset($row->{$kennzeichenName}) && $row->{$kennzeichenName} == $melde_studiengang_kz)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user