From 2237e9f1b72f16e63f0d65da13e910272eb280be Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 9 Mar 2026 11:42:24 +0100 Subject: [PATCH] refactor detail Header, relaod array if semester changed, show no status if no status, phrase --- .../frontend/v1/detailheader/DetailHeader.php | 30 +++++++++++++ public/js/api/factory/detailHeader.js | 6 +++ .../components/DetailHeader/DetailHeader.js | 44 ++++++++++++++++--- .../js/components/Stv/Studentenverwaltung.js | 8 +++- .../Stv/Studentenverwaltung/Details.js | 29 +++++++++++- system/phrasesupdate.php | 20 +++++++++ 6 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 application/controllers/api/frontend/v1/detailheader/DetailHeader.php diff --git a/application/controllers/api/frontend/v1/detailheader/DetailHeader.php b/application/controllers/api/frontend/v1/detailheader/DetailHeader.php new file mode 100644 index 000000000..be9fad27a --- /dev/null +++ b/application/controllers/api/frontend/v1/detailheader/DetailHeader.php @@ -0,0 +1,30 @@ + ['admin:r', 'assistenz:r'], + ]); + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + public function getSemesterStati($prestudent_id) + { + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + $result = $this->PrestudentstatusModel->getAllPrestudentstatiWithStudiensemester($prestudent_id); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } + +} diff --git a/public/js/api/factory/detailHeader.js b/public/js/api/factory/detailHeader.js index 74563bd4b..9e50e8ebb 100644 --- a/public/js/api/factory/detailHeader.js +++ b/public/js/api/factory/detailHeader.js @@ -34,4 +34,10 @@ export default { url: 'api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz, }; }, + getSemesterStati(prestudent_id){ + return { + method: 'get', + url: 'api/frontend/v1/detailheader/DetailHeader/getSemesterStati/' + prestudent_id, + }; + }, } \ No newline at end of file diff --git a/public/js/components/DetailHeader/DetailHeader.js b/public/js/components/DetailHeader/DetailHeader.js index 04c6d1835..f0db9fe5d 100644 --- a/public/js/components/DetailHeader/DetailHeader.js +++ b/public/js/components/DetailHeader/DetailHeader.js @@ -7,6 +7,9 @@ export default { from: 'configDomain', default: 'technikum-wien.at' }, + currentSemester: { + from: 'currentSemester', + }, }, props: { headerData: { @@ -51,6 +54,10 @@ export default { console.error("Error loading department data:", error); }); } + + if(this.headerData){ + this.getSemesterStati(this.headerData[0].prestudent_id); + } }, watch: { person_id: { @@ -65,12 +72,27 @@ export default { }, deep: true, }, + currentSemester: { + handler(newVal) { + if (newVal) { + if(!this.semesterStati.some(item => item.studiensemester_kurzbz === this.currentSemester)) { + this.noCurrentStatus = true; + } + else + { + this.noCurrentStatus = false; + } + } + }, + deep: true, + }, }, data(){ return{ headerDataMa: {}, departmentData: {}, leitungData: {}, + noCurrentStatus: false }; }, methods: { @@ -109,6 +131,14 @@ export default { } else { return 'data:image/jpeg;base64,' + foto; } + }, + getSemesterStati(prestudent_id){ + return this.$api + .call(ApiDetailHeader.getSemesterStati(prestudent_id)) + .then(result => { + this.semesterStati = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); } }, template: ` @@ -149,11 +179,11 @@ export default { {{headerData[0].person_id}} | {{$p.t('lehre', 'studiengang')}} {{headerData[0].stg_bezeichnung}} ({{headerData[0].studiengang}}) - | {{$p.t('lehre', 'semester')}} + | {{$p.t('lehre', 'semester')}} {{headerData[0].semester}} | {{$p.t('lehre', 'verband')}} {{headerData[0].verband}} - | {{$p.t('lehre', 'gruppe')}} + | {{$p.t('lehre', 'gruppe')}} {{headerData[0].gruppe}} @@ -162,12 +192,16 @@ export default { {{headerData[0].mail_intern}} - | Status - {{headerData[0].statusofsemester}} + | Status + + {{$p.t('lehre', 'textNoStatus')}} + + + {{headerData[0].statusofsemester}} + | {{$p.t('person', 'matrikelnummer')}} {{headerData[0].matr_nr}} - diff --git a/public/js/components/Stv/Studentenverwaltung.js b/public/js/components/Stv/Studentenverwaltung.js index a7d97d4fc..fae85b653 100644 --- a/public/js/components/Stv/Studentenverwaltung.js +++ b/public/js/components/Stv/Studentenverwaltung.js @@ -422,6 +422,12 @@ export default { this.$refs.searchbar.abort(); this.$refs.searchbar.hideresult(); }, + handleReloadStudent(students){ + this.$refs.stvList.updateUrl( + ApiStv.students.uid(students[0].uid,'CURRENT_SEMESTER'), + true + ); + } }, created() { if (!this.url_studiensemester_kurzbz) { @@ -629,7 +635,7 @@ export default { diff --git a/public/js/components/Stv/Studentenverwaltung/Details.js b/public/js/components/Stv/Studentenverwaltung/Details.js index dca08c07f..4d49aba0d 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details.js @@ -8,6 +8,11 @@ import ApiStvApp from '../../../api/factory/stv/app.js'; export default { name: "DetailsPrestudent", + inject: { + currentSemester: { + from: 'currentSemester', + }, + }, components: { FhcTabs, FhcHeader @@ -21,6 +26,9 @@ export default { props: { students: Array }, + emits: [ + 'reloadStudent:students' + ], computed: { appRoot() { return FHC_JS_DATA_STORAGE_OBJECT.app_root; @@ -39,13 +47,30 @@ export default { return Object.fromEntries(Object.entries(this.configStudents).filter(([ , value ]) => !value.showOnlyWithUid)); } return Object.fromEntries(Object.entries(this.configStudents).filter(([ , value ]) => !value.showOnlyWithUid && !value.showOnlyWithUid)); - } + }, +/* studiensemester(){ + if(this.students) + return this.students.query_studiensemester_kurzbz; + else + return null; + //return this.students?[0].query_studiensemester_kurzbz || null; + },*/ }, watch: { '$p.user_language.value'(n, o) { if (n !== o && o !== undefined) this.loadConfig(); + }, + currentSemester(newVal) { + if ( + this.students && + this.students.length > 0 && + newVal !== this.students[0].query_studiensemester_kurzbz + ) { + this.$emit('reloadStudent:students', this.students); + } } + }, methods: { loadConfig() { @@ -65,7 +90,7 @@ export default { reload() { if (this.$refs.tabs?.$refs?.current?.reload) this.$refs.tabs.$refs.current.reload(); - } + }, }, created() { this.loadConfig(); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 580f15bc2..b1f4b004a 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -56144,6 +56144,26 @@ I have been informed that I am under no obligation to consent to the transmissio ) ), // ### Refactor Messages END + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'textNoStatus', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Kein Status', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'No status', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), );