diff --git a/application/controllers/api/frontend/v1/organisation/Studiensemester.php b/application/controllers/api/frontend/v1/organisation/Studiensemester.php index eaafc6ac5..c082d8b97 100644 --- a/application/controllers/api/frontend/v1/organisation/Studiensemester.php +++ b/application/controllers/api/frontend/v1/organisation/Studiensemester.php @@ -28,7 +28,8 @@ class Studiensemester extends FHCAPI_Controller 'getStudienjahrByStudiensemester' => self::PERM_LOGGED, 'getAllStudiensemesterAndAktOrNext' => self::PERM_LOGGED, 'current' => self::PERM_LOGGED, - 'set' => self::PERM_LOGGED + 'set' => self::PERM_LOGGED, + 'getContainingOrNearestByDateRange' => self::PERM_LOGGED, ) ); // Load model StudiensemesterModel @@ -203,4 +204,15 @@ class Studiensemester extends FHCAPI_Controller $this->terminateWithSuccess(true); } + + public function getContainingOrNearestByDateRange() + { + $from = $this->input->get("from"); + $to = $this->input->get("to"); + + $result = $this->StudiensemesterModel->getContainingOrNearestByDateRange($from, $to); + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } } diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 1b480771f..6e2abae87 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -292,13 +292,29 @@ class Studiensemester_model extends DB_Model COALESCE( (SELECT studiensemester_kurzbz FROM semester_interval_startdate), (SELECT studiensemester_kurzbz FROM nearest_semester_interval_startdate) - ) AS studiensemester_kurzbz + ) AS studiensemester_kurzbz, + COALESCE( + (SELECT start FROM semester_interval_startdate), + (SELECT start FROM nearest_semester_interval_startdate) + ) as start, + COALESCE( + (SELECT ende FROM semester_interval_startdate), + (SELECT ende FROM nearest_semester_interval_startdate) + ) as ende UNION SELECT COALESCE( (SELECT studiensemester_kurzbz FROM semester_interval_enddate), (SELECT studiensemester_kurzbz FROM nearest_semester_interval_enddate) - ) AS studiensemester_kurzbz + ) AS studiensemester_kurzbz, + COALESCE( + (SELECT start FROM semester_interval_enddate), + (SELECT start FROM nearest_semester_interval_enddate) + ) as start, + COALESCE( + (SELECT ende FROM semester_interval_enddate), + (SELECT ende FROM nearest_semester_interval_enddate) + ) as ende EOSQL; diff --git a/public/js/api/factory/studiensemester.js b/public/js/api/factory/studiensemester.js index f57c10763..12a5106a2 100644 --- a/public/js/api/factory/studiensemester.js +++ b/public/js/api/factory/studiensemester.js @@ -44,5 +44,15 @@ export default { studiensemester_kurzbz } }; - } + }, + getContainingOrNearestByDateRange(from, to) { + return { + method: 'get', + url: 'api/frontend/v1/organisation/studiensemester/getContainingOrNearestByDateRange', + params: { + from, + to, + } + }; + }, }; \ No newline at end of file diff --git a/public/js/components/Cis/LvPlan/MyLvPlan.js b/public/js/components/Cis/LvPlan/MyLvPlan.js index cb43a06d9..f146df93b 100644 --- a/public/js/components/Cis/LvPlan/MyLvPlan.js +++ b/public/js/components/Cis/LvPlan/MyLvPlan.js @@ -1,6 +1,7 @@ import FhcCalendar from "../../Calendar/LvPlan.js"; import ApiLvPlan from '../../../api/factory/lvPlan.js'; +import ApiStudienSemester from '../../../api/factory/studiensemester.js'; import ApiAuthinfo from '../../../api/factory/authinfo.js'; export const DEFAULT_MODE_LVPLAN_DESKTOP = "Week"; @@ -16,13 +17,12 @@ export default { }, data() { return { - studiensemester_kurzbz: null, - studiensemester_start: null, - studiensemester_ende: null, uid: null, isMitarbeiter: false, isStudent: false, timezone: FHC_JS_DATA_STORAGE_OBJECT.timezone, + startSemester: null, + endSemester: null, }; }, inject: ["isMobile"], @@ -48,9 +48,12 @@ export default { return this.propsViewData?.mode; }, downloadLinks() { - if (!this.studiensemester_start || !this.studiensemester_ende || !this.uid) - return false; + const startDate = this.startSemester?.start; + const endDate = this.endSemester ? this.endSemester.ende : this.startSemester?.ende; + if (!startDate || !endDate || !this.uid) + return false; + let type = false; type = this.isStudent ? 'student' : type; type = this.isMitarbeiter ? 'lektor' : type; @@ -61,10 +64,10 @@ export default { const opts = { zone: this.timezone }; const start = luxon.DateTime - .fromISO(this.studiensemester_start, opts) + .fromISO(startDate, opts) .toUnixInteger(); const ende = luxon.DateTime - .fromISO(this.studiensemester_ende, opts) + .fromISO(endDate, opts) .toUnixInteger(); const download_link = FHC_JS_DATA_STORAGE_OBJECT.app_root @@ -109,16 +112,21 @@ export default { } }); }, - updateRange(rangeInterval) { - this.$api - .call(ApiLvPlan.studiensemesterDateInterval( - rangeInterval.end.startOf('week').toISODate() - )) - .then(res => { - this.studiensemester_kurzbz = res.data.studiensemester_kurzbz; - this.studiensemester_start = res.data.start; - this.studiensemester_ende = res.data.ende; - }); + async updateRange(rangeInterval) { + const semesterResponse = await this.$api.call( + ApiStudienSemester.getContainingOrNearestByDateRange( + rangeInterval.s.toISO().slice(0, 10), + rangeInterval.e.toISO().slice(0, 10), + ), + ); + this.startSemester = + semesterResponse.data.length + ? semesterResponse.data[0] + : null; + this.endSemester = + semesterResponse.data.length > 1 + ? semesterResponse.data[1] + : null; }, getPromiseFunc(start, end) { return [ @@ -142,8 +150,11 @@ export default {