Unterbrechung nur für das Aktuelle und kommende Semester

This commit is contained in:
cgfhtw
2023-07-13 16:13:40 +02:00
parent 9d0801676d
commit b04aefc105
3 changed files with 42 additions and 70 deletions
+24 -21
View File
@@ -1279,35 +1279,38 @@ class AntragLib
$this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel');
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$semester = [];
$result = $this->_ci->StudienplanModel->getStudienplaeneBySemester($studiengang_kz, $studiensemester_kurzbz, $ausbildungssemester);
if (!hasData($result))
return [];
return $semester;
$studienplaene = getData($result);
$studienplan_ids = array_map(function ($studienplan) {
return $studienplan->studienplan_id;
}, $studienplaene);
$result = $this->_ci->StudiensemesterModel->getFollowingSemester($studienplan_ids, $studiensemester_kurzbz, $ausbildungssemester);
$result = $this->_ci->StudiensemesterModel->getNextFrom($studiensemester_kurzbz);
if (!hasData($result))
return [];
return $semester;
$nextSem = current(getData($result));
$stsems = getData($result);
$semester[] = [
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'wiedereinstieg' => $nextSem->start
];
$result = $this->_ci->StudiensemesterModel->loadWhere();
$result = $this->_ci->StudienplanModel->getStudienplaeneBySemester($studiengang_kz, $nextSem->studiensemester_kurzbz, $ausbildungssemester+1);
if (!hasData($result))
return [];
$result = getData($result);
usort($result, function($a, $b) {
return $a->start > $b->start ? 1 : -1;
});
foreach ($stsems as $stsem) {
$stsem->wiedereinstieg = array_filter($result, function ($sem) use ($stsem) {
return $sem->start > $stsem->ende;
});
}
return $semester;
return $stsems;
$result = $this->_ci->StudiensemesterModel->getNextFrom($nextSem->studiensemester_kurzbz);
if (!hasData($result))
return $semester;
$semAfterNext = current(getData($result));
$semester[] = [
'studiensemester_kurzbz' => $nextSem->studiensemester_kurzbz,
'wiedereinstieg' => $semAfterNext->start
];
return $semester;
}
public function getAktivePrestudentenInStgs($studiengaenge, $query)
@@ -204,34 +204,4 @@ class Studiensemester_model extends DB_Model
return $this->execQuery($query, array($studiensemester_kurzbz));
}
public function getFollowingSemester($studienplan_ids, $studiensemester_kurzbz, $ausbildungssemester)
{
$query = '
WITH RECURSIVE following(studiensemester_kurzbz, semester, start) AS (
SELECT studiensemester_kurzbz, ?, start
FROM public.tbl_studiensemester
WHERE studiensemester_kurzbz=?
UNION ALL
SELECT * FROM (
SELECT s.studiensemester_kurzbz, s.semester, ss.start
FROM lehre.tbl_studienplan_semester s
JOIN public.tbl_studiensemester ss USING(studiensemester_kurzbz)
INNER JOIN following a ON(s.semester=a.semester+1 AND ss.start > a.start)
WHERE studienplan_id IN ?
ORDER BY start ASC
LIMIT 1
) wrapper
)
SELECT sem.*, following.semester
FROM following
LEFT JOIN ' . $this->dbTable . ' sem USING(studiensemester_kurzbz)
ORDER BY start';
return $this->execQuery($query, [
$ausbildungssemester,
$studiensemester_kurzbz,
$studienplan_ids
]);
}
}