From 49ca5383819f1b37cd9a4d8b7272c5f402d04060 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Thu, 4 Sep 2025 17:38:32 +0200 Subject: [PATCH] student page redesign; wip mitarbeiter page + add new modal --- .../controllers/api/frontend/v1/Abgabe.php | 3 + .../models/education/Projektarbeit_model.php | 1 + public/js/api/factory/abgabe.js | 3 +- .../Cis/Abgabetool/AbgabeMitarbeiterDetail.js | 457 ++++++++++++++---- .../Cis/Abgabetool/AbgabeStudentDetail.js | 5 +- .../Cis/Abgabetool/AbgabetoolMitarbeiter.js | 119 +++-- .../Cis/Abgabetool/AbgabetoolStudent.js | 345 ++++++------- system/phrasesupdate.php | 20 + 8 files changed, 610 insertions(+), 343 deletions(-) diff --git a/application/controllers/api/frontend/v1/Abgabe.php b/application/controllers/api/frontend/v1/Abgabe.php index 4ff260602..a4384a890 100644 --- a/application/controllers/api/frontend/v1/Abgabe.php +++ b/application/controllers/api/frontend/v1/Abgabe.php @@ -485,6 +485,7 @@ class Abgabe extends FHCAPI_Controller $fixtermin = $_POST['fixtermin']; $kurzbz = $_POST['kurzbz']; $note = $_POST['note']; + $notiz = $_POST['notiz']; $upload_allowed = $_POST['upload_allowed']; $betreuer_person_id = $_POST['betreuer_person_id']; @@ -506,6 +507,7 @@ class Abgabe extends FHCAPI_Controller 'datum' => $datum, 'kurzbz' => $kurzbz, 'note' => $note, + 'notiz' => $notiz, 'upload_allowed' => $upload_allowed, 'insertvon' => getAuthUID(), 'insertamum' => date('Y-m-d H:i:s') @@ -521,6 +523,7 @@ class Abgabe extends FHCAPI_Controller 'datum' => $datum, 'kurzbz' => $kurzbz, 'note' => $note, + 'notiz' => $notiz, 'upload_allowed' => $upload_allowed, 'updatevon' => getAuthUID(), 'updateamum' => date('Y-m-d H:i:s') diff --git a/application/models/education/Projektarbeit_model.php b/application/models/education/Projektarbeit_model.php index c87e9c187..a6eaf7fd2 100644 --- a/application/models/education/Projektarbeit_model.php +++ b/application/models/education/Projektarbeit_model.php @@ -169,6 +169,7 @@ class Projektarbeit_model extends DB_Model campus.tbl_paabgabe.datum, campus.tbl_paabgabe.note, campus.tbl_paabgabe.upload_allowed, + campus.tbl_paabgabe.notiz, campus.tbl_paabgabetyp.paabgabetyp_kurzbz, campus.tbl_paabgabetyp.bezeichnung, campus.tbl_paabgabe.abgabedatum, diff --git a/public/js/api/factory/abgabe.js b/public/js/api/factory/abgabe.js index 67e67f385..9cb26dcc3 100644 --- a/public/js/api/factory/abgabe.js +++ b/public/js/api/factory/abgabe.js @@ -58,7 +58,8 @@ export default { paabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz, datum: termin.datum, note: termin.note_pk, - upload_allowed: termin.upload_allowed, + upload_allowed: !!termin.upload_allowed, + notiz: termin.notiz ?? '', fixtermin: termin.fixtermin, insertvon: termin.insertvon, kurzbz: termin.kurzbz, diff --git a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js index ca8d92cd8..1a480634f 100644 --- a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js +++ b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js @@ -11,9 +11,12 @@ export const AbgabeMitarbeiterDetail = { Checkbox: primevue.checkbox, Dropdown: primevue.dropdown, Textarea: primevue.textarea, + SpeedDial: primevue.speeddial, + Accordion: primevue.accordion, + AccordionTab: primevue.accordiontab, VueDatePicker }, - inject: ['abgabeTypeOptions', 'allowedNotenOptions', 'turnitin_link', 'old_abgabe_beurteilung_link'], + inject: ['abgabeTypeOptions', 'allowedNotenOptions', 'turnitin_link', 'old_abgabe_beurteilung_link', 'isMobile'], props: { projektarbeit: { type: Object, @@ -24,10 +27,19 @@ export const AbgabeMitarbeiterDetail = { return { eidAkzeptiert: false, enduploadTermin: null, - allActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages + allActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages, + speedDialItems: [{ + label: "Create New", + icon: "pi pi-plus", + command: this.createNew + }], + newTermin: null } }, methods: { + createNew(){ + console.log('create new') + }, openZusatzdatenModal(termin) { }, @@ -39,24 +51,26 @@ export const AbgabeMitarbeiterDetail = { this.$api.call(ApiAbgabe.postProjektarbeitAbgabe(termin)).then( (res) => { if(res?.meta?.status == 'success') { this.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert')) - if(paabgabe_id === -1) { // new abgabe has been inserted - termin.paabgabe_id = res?.data?.paabgabe_id - this.projektarbeit.abgabetermine.push({ // new abgatermin row - 'paabgabe_id': -1, - 'projektarbeit_id': this.projektarbeit.projektarbeit_id, - 'fixtermin': false, - 'kurzbz': '', - 'datum': new Date().toISOString().split('T')[0], - 'paabgabetyp_kurzbz': termin.paabgabetyp_kurzbz, - 'note': this.allowedNotenOptions.find(opt => opt.note == termin.note?.note), - 'upload_allowed': termin.upload_allowed, - 'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz), - 'abgabedatum': null, - 'insertvon': this.viewData?.uid ?? '', - 'allowedToSave': true, - 'allowedToDelete': true - }) - } + + // if(paabgabe_id === -1) { // new abgabe has been inserted + // termin.paabgabe_id = res?.data?.paabgabe_id + // this.projektarbeit.abgabetermine.push({ // new abgatermin row + // 'paabgabe_id': -1, + // 'projektarbeit_id': this.projektarbeit.projektarbeit_id, + // 'fixtermin': false, + // 'kurzbz': '', + // 'datum': new Date().toISOString().split('T')[0], + // 'paabgabetyp_kurzbz': termin.paabgabetyp_kurzbz, + // 'note': this.allowedNotenOptions.find(opt => opt.note == termin.note?.note), + // 'upload_allowed': termin.upload_allowed, + // 'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz), + // 'abgabedatum': null, + // 'insertvon': this.viewData?.uid ?? '', + // 'allowedToSave': true, + // 'allowedToDelete': true + // }) + // } + } else if(res?.meta?.status == 'error'){ this.$fhcAlert.alertError() } @@ -135,17 +149,6 @@ export const AbgabeMitarbeiterDetail = { getNotenOptionLabel(option) { return option.bezeichnung }, - formatDate(dateParam) { - const date = new Date(dateParam) - // handle missing leading 0 - const padZero = (num) => String(num).padStart(2, '0'); - - const month = padZero(date.getMonth() + 1); // Months are zero-based - const day = padZero(date.getDate()); - const year = date.getFullYear(); - - return `${day}.${month}.${year}`; - }, openStudentPage() { const link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/Cis/Abgabetool/Student/' + this.projektarbeit?.student_uid @@ -159,6 +162,44 @@ export const AbgabeMitarbeiterDetail = { const path = this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter' const link = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/' + path window.open(link, '_blank') + }, + formatDate(dateParam) { + const date = new Date(dateParam) + // handle missing leading 0 + const padZero = (num) => String(num).padStart(2, '0'); + + const month = padZero(date.getMonth() + 1); // Months are zero-based + const day = padZero(date.getDate()); + const year = date.getFullYear(); + + return `${day}.${month}.${year}`; + }, + getAccTabHeaderForTermin(termin) { + let tabTitle = '' + + const datumFormatted = this.formatDate(termin.datum) + tabTitle += termin.bezeichnung?.bezeichnung + ' ' + datumFormatted + + return tabTitle + }, + openCreateNewAbgabeModal() { + if(!this.newTermin) { + this.newTermin = { + // 'paabgabe_id': -1, + // 'projektarbeit_id': this.projektarbeit.projektarbeit_id, + // 'fixtermin': false, + // 'kurzbz': '', + // 'datum': new Date().toISOString().split('T')[0], + // 'note': this.allowedNotenOptions.find(opt => opt.note == 9), + // 'upload_allowed': false, + // 'paabgabetyp_kurzbz': '', + // 'bezeichnung': '', + // 'abgabedatum': null, + // 'insertvon': this.viewData?.uid ?? '' + } + } + + this.$refs.modalContainerCreateNewAbgabe.show() } }, computed: { @@ -183,6 +224,12 @@ export const AbgabeMitarbeiterDetail = { } }) return qgatefound + }, + getPageWrapperStyle() { + return 'position: relative; min-height: 100vh;' + }, + getSpeedDialStyle() { + return 'position: absolute; right: 1rem; bottom: 1rem;' } }, created() { @@ -192,8 +239,104 @@ export const AbgabeMitarbeiterDetail = { }, template: ` -
- + + + + + + + + +
+ +
{{$p.t('abgabetool/c4abgabeMitarbeiterbereich')}}
@@ -235,33 +378,26 @@ export const AbgabeMitarbeiterDetail = {
-
-
-
{{$p.t('abgabetool/c4fixtermin')}}
-
-
{{$p.t('abgabetool/c4zieldatum')}}
-
{{$p.t('abgabetool/c4abgabetyp')}}
-
{{$p.t('abgabetool/c4note')}}
-
{{$p.t('abgabetool/c4upload_allowed')}}
-
{{$p.t('abgabetool/c4abgabekurzbz')}}
-
{{$p.t('abgabetool/c4abgabedatum')}}
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
`, }; diff --git a/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js b/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js index e56ab90ca..8bf02780e 100644 --- a/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js +++ b/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js @@ -241,10 +241,9 @@ export const AbgabeStudentDetail = {

{{projektarbeit?.titel}}

- - +