diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php index bda165e0f..6e05380a5 100644 --- a/application/libraries/AntragLib.php +++ b/application/libraries/AntragLib.php @@ -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) diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 6daa76b59..bb9b94c92 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -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 - ]); - } } diff --git a/public/js/components/Studierendenantrag/Form/Unterbrechung.js b/public/js/components/Studierendenantrag/Form/Unterbrechung.js index 2034361bc..e1322067f 100644 --- a/public/js/components/Studierendenantrag/Form/Unterbrechung.js +++ b/public/js/components/Studierendenantrag/Form/Unterbrechung.js @@ -53,9 +53,18 @@ export default { this.prestudentId; }, datumWsFormatted() { - if(!this.data.datum_wiedereinstieg) - return ''; - let datum = new Date(this.data.datum_wiedereinstieg); + let datumUnformatted = ''; + + if (this.studierendenantragId) { + if (this.data.datum_wiedereinstieg) + datumUnformatted = this.data.datum_wiedereinstieg; + } else { + if (this.stsem !== null && this.data.studiensemester[this.stsem].wiedereinstieg) + datumUnformatted = this.data.studiensemester[this.stsem].wiedereinstieg; + } + if (datumUnformatted === '') + return datumUnformatted; + let datum = new Date(datumUnformatted); return datum.toLocaleDateString(); } }, @@ -93,7 +102,7 @@ export default { formData.append("studiensemester", this.stsem !== null && this.data.studiensemester[this.stsem].studiensemester_kurzbz); formData.append("prestudent_id", this.data.prestudent_id); formData.append("grund", this.$refs.grund.value); - formData.append("datum_wiedereinstieg", this.$refs.datum_wiedereinstieg && this.$refs.datum_wiedereinstieg.value); + formData.append("datum_wiedereinstieg", this.stsem !== null && this.data.studiensemester[this.stsem].wiedereinstieg); axios.post( FHC_JS_DATA_STORAGE_OBJECT.app_root + @@ -267,21 +276,11 @@ export default {