From 431ae8ddac5bf53b34bc1098ee1c3d9f5ff843b1 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 12 Dec 2025 13:04:58 +0100 Subject: [PATCH 1/5] - make button edit editable - set field anmerkung editable (like statusgrund and statusgrund) - refactor function updateStatus to skip validation - change phrases --- .../api/frontend/v1/stv/Status.php | 15 ++++- public/js/api/factory/stv/status.js | 7 +- .../Details/Prestudent/MultiStatus.js | 4 +- .../Details/Status/Modal.js | 67 ++++++++++++++----- system/phrasesupdate.php | 8 +-- 5 files changed, 72 insertions(+), 29 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Status.php b/application/controllers/api/frontend/v1/stv/Status.php index 36d445fc6..0f7960f40 100644 --- a/application/controllers/api/frontend/v1/stv/Status.php +++ b/application/controllers/api/frontend/v1/stv/Status.php @@ -206,6 +206,7 @@ class Status extends FHCAPI_Controller $datum_string = date('c'); $datum = new DateTime($datum_string); + //Form Validation $this->load->library('form_validation'); @@ -1088,7 +1089,7 @@ class Status extends FHCAPI_Controller * * @return void */ - public function updateStatus($prestudent_id, $status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) + public function updateStatus($prestudent_id, $status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester, $hasCriticalChangesBis=false) { $result = $this->PrestudentstatusModel->load([ $key_ausbildungssemester, @@ -1130,14 +1131,22 @@ class Status extends FHCAPI_Controller ] ); + $hasCriticalChangesBis = filter_var($hasCriticalChangesBis, FILTER_VALIDATE_BOOLEAN); + $this->form_validation->set_rules( 'datum', $this->p->t('global', 'datum'), [ 'is_valid_date', - ['meldestichtag_not_exceeded', function ($value) use ($isBerechtigtNoStudstatusCheck) { + ['meldestichtag_not_exceeded', function ($value) use ($isBerechtigtNoStudstatusCheck, $hasCriticalChangesBis){ if ($isBerechtigtNoStudstatusCheck) - return true; // Skip if access right says so + { + return true; // Skip if access right says so*/ + } + if (!$hasCriticalChangesBis) { + return true; // Skip if no critical changes were made + } + if (!$value) return true; // Error will be handled by the required statement above diff --git a/public/js/api/factory/stv/status.js b/public/js/api/factory/stv/status.js index 11e7f4fde..7910cb8c7 100644 --- a/public/js/api/factory/stv/status.js +++ b/public/js/api/factory/stv/status.js @@ -39,14 +39,17 @@ export default { status_kurzbz, studiensemester_kurzbz, ausbildungssemester - }, params) { + }, params, hasCriticalChangesBis) { + console.log("hasCriticalChangesBis " + hasCriticalChangesBis); return { + method: 'post', url: 'api/frontend/v1/stv/status/updateStatus/' + prestudent_id + '/' + status_kurzbz + '/' + studiensemester_kurzbz + '/' - + ausbildungssemester, + + ausbildungssemester + '/' + + hasCriticalChangesBis, params }; }, diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js index 4b92df109..e67f19ccf 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js @@ -207,8 +207,8 @@ export default{ button.addEventListener('click', () => this.actionEditStatus(data.status_kurzbz, data.studiensemester_kurzbz, data.ausbildungssemester) ); - if (this.dataMeldestichtag && this.dataMeldestichtag > data.datum && !this.hasPermissionToSkipStatusCheck) - button.disabled = true; +/* if (this.dataMeldestichtag && this.dataMeldestichtag > data.datum && !this.hasPermissionToSkipStatusCheck) + button.disabled = true;*/ container.append(button); button = document.createElement('button'); diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js b/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js index 8b0252be8..f913ab7c6 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js @@ -64,7 +64,9 @@ export default{ 'Unterbrecher', 'Diplomand', 'Incoming' - ] + ], + original: {}, + hasCriticalChangesBis: false }; }, computed: { @@ -136,6 +138,7 @@ export default{ this.statusNew = false; this.formData = result.data; this.originalDatum = new Date(result.data.datum); + this.original = { ...this.formData}; return prestudent; }) .then(this.loadStudienplaeneAndSetPrestudent) @@ -157,7 +160,7 @@ export default{ }, editStatus() { this.$refs.form - .call(ApiStvStatus.updateStatus(this.statusId, this.formData)) + .call(ApiStvStatus.updateStatus(this.statusId, this.formData, this.hasCriticalChangesBis)) .then(result => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.$reloadList(); @@ -179,30 +182,59 @@ export default{ .then(result => this.mischform = result.data.mischform); } }, + watch: { + // watching all disabled fields + "formData.status_kurzbz"(newVal) { + if (newVal !== this.original.status_kurzbz) { + this.hasCriticalChangesBis = true; + } + }, +/* "formData.studiensemester_kurzbz"(newVal) { + if (newVal !== this.original.studiensemester_kurzbz) { + this.hasCriticalChangesBis = true; + } + },*/ + "formData.orgform_kurzbz"(newVal) { + if (newVal !== this.original.orgform_kurzbz) { + this.hasCriticalChangesBis = true; + } + }, + "formData.datum"(newVal) { + if (newVal !== this.original.datum) { + this.hasCriticalChangesBis = true; + } + }, + "formData.bestaetigtam"(newVal) { + if (newVal !== this.original.bestaetigtam) { + this.hasCriticalChangesBis = true; + } + }, + "formData.bewerbung_abgeschicktamum"(newVal) { + if (newVal !== this.original.bestaetigtam) { + this.hasCriticalChangesBis = true; + } + }, + "formData.studienplan_id"(newVal) { + if (newVal !== this.original.studienplan_id) { + this.hasCriticalChangesBis = true; + } + }, + "formData.rt_stufe"(newVal) { + if (newVal !== this.original.rt_stufe) { + this.hasCriticalChangesBis = true; + } + }, + }, created() { this.$api .call(ApiStvStatus.getStatusgruende()) .then(result => this.statusgruende = result.data) .catch(this.$fhcAlert.handleSystemError); - //TODO(Manu) check why it is/was hard coded this.$api .call(ApiStvStatus.getStati()) .then(result => this.stati = result.data) .catch(this.$fhcAlert.handleSystemError); -/* this.stati = [ - { status_kurzbz: 'Interessent', bezeichnung: 'Interessent'}, - { status_kurzbz: 'Bewerber', bezeichnung: 'Bewerber'}, - { status_kurzbz: 'Aufgenommener', bezeichnung: 'Aufgenommener'}, - { status_kurzbz: 'Student', bezeichnung: 'Student'}, - { status_kurzbz: 'Unterbrecher', bezeichnung: 'Unterbrecher'}, - { status_kurzbz: 'Diplomand', bezeichnung: 'Diplomand'}, - { status_kurzbz: 'Incoming', bezeichnung: 'Incoming'}, - { status_kurzbz: 'Absolvent', bezeichnung: 'Absolvent'}, - { status_kurzbz: 'Abbrecher', bezeichnung: 'Abbrecher'}, - { status_kurzbz: 'Abgewiesener', bezeichnung: 'Abgewiesener'}, - { status_kurzbz: 'Wartender', bezeichnung: 'Wartender'} - ];*/ }, template: ` @@ -220,7 +252,7 @@ export default{

{{$p.t('bismeldestichtag', 'info_MeldestichtagStatusgrundSemester')}}

- + array( array( 'sprache' => 'German', - 'text' => 'Meldestichtag erreicht - ausschließlich Bearbeiten Statusgrund möglich', + 'text' => 'Meldestichtag erreicht - ausschließlich Bearbeiten Statusgrund und Anmerkung möglich', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'Reporting deadline reached - only editing status reason possible', + 'text' => 'Reporting deadline reached - only editing status reason and note possible', 'description' => '', 'insertvon' => 'system' ) @@ -41320,13 +41320,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Meldestichtag erreicht - Bearbeiten Ausbildungssemester und Statusgrund möglich', + 'text' => 'Meldestichtag erreicht - Bearbeiten Ausbildungssemester, Statusgrund und Anmerkung möglich', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'Edit education semester and status reason possible', + 'text' => 'Edit education semester, status reason and note possible', 'description' => '', 'insertvon' => 'system' ) From 3f891179aa477e83ceb47a57fe0857c894c20954 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 15 Dec 2025 15:12:49 +0100 Subject: [PATCH 2/5] move check for critical changes bis from frontend to backend --- .../api/frontend/v1/stv/Status.php | 23 +++++++-- public/js/api/factory/stv/status.js | 6 +-- .../Details/Status/Modal.js | 49 +------------------ 3 files changed, 24 insertions(+), 54 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Status.php b/application/controllers/api/frontend/v1/stv/Status.php index 0f7960f40..a99db9ac8 100644 --- a/application/controllers/api/frontend/v1/stv/Status.php +++ b/application/controllers/api/frontend/v1/stv/Status.php @@ -1079,6 +1079,24 @@ class Status extends FHCAPI_Controller $this->terminateWithSuccess(true); } + protected function checkForCriticalChangesBis($oldstatus) + { + $changedFields = array(); + $allowedFields = array('anmerkung', 'statusgrund_id'); + $oldstatus_array = get_object_vars($oldstatus); + foreach($oldstatus_array as $key => $oldValue) + { + $newValue = $this->input->post($key); + if( $newValue !== $oldValue ) + { + $changedFields[] = $key; + } + } + $criticalFieldsChanged = array_diff($changedFields, $allowedFields); + $hasCriticalChangesBis = count($criticalFieldsChanged) > 0 ? true : false; + return $hasCriticalChangesBis; + } + /** * Updates a status entry * @@ -1089,7 +1107,7 @@ class Status extends FHCAPI_Controller * * @return void */ - public function updateStatus($prestudent_id, $status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester, $hasCriticalChangesBis=false) + public function updateStatus($prestudent_id, $status_kurzbz, $key_studiensemester_kurzbz, $key_ausbildungssemester) { $result = $this->PrestudentstatusModel->load([ $key_ausbildungssemester, @@ -1103,6 +1121,7 @@ class Status extends FHCAPI_Controller $oldstatus = current($oldstatus); + $hasCriticalChangesBis = $this->checkForCriticalChangesBis($oldstatus); $isBerechtigtNoStudstatusCheck = $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'); $isBerechtigtBasisPrestudentstatus = $this->permissionlib->isBerechtigt('basis/prestudentstatus'); @@ -1131,8 +1150,6 @@ class Status extends FHCAPI_Controller ] ); - $hasCriticalChangesBis = filter_var($hasCriticalChangesBis, FILTER_VALIDATE_BOOLEAN); - $this->form_validation->set_rules( 'datum', $this->p->t('global', 'datum'), diff --git a/public/js/api/factory/stv/status.js b/public/js/api/factory/stv/status.js index 7910cb8c7..7c289dc22 100644 --- a/public/js/api/factory/stv/status.js +++ b/public/js/api/factory/stv/status.js @@ -39,8 +39,7 @@ export default { status_kurzbz, studiensemester_kurzbz, ausbildungssemester - }, params, hasCriticalChangesBis) { - console.log("hasCriticalChangesBis " + hasCriticalChangesBis); + }, params) { return { method: 'post', @@ -48,8 +47,7 @@ export default { + prestudent_id + '/' + status_kurzbz + '/' + studiensemester_kurzbz + '/' - + ausbildungssemester + '/' - + hasCriticalChangesBis, + + ausbildungssemester, params }; }, diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js b/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js index f913ab7c6..3b282d230 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js @@ -64,9 +64,7 @@ export default{ 'Unterbrecher', 'Diplomand', 'Incoming' - ], - original: {}, - hasCriticalChangesBis: false + ] }; }, computed: { @@ -160,7 +158,7 @@ export default{ }, editStatus() { this.$refs.form - .call(ApiStvStatus.updateStatus(this.statusId, this.formData, this.hasCriticalChangesBis)) + .call(ApiStvStatus.updateStatus(this.statusId, this.formData)) .then(result => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.$reloadList(); @@ -182,49 +180,6 @@ export default{ .then(result => this.mischform = result.data.mischform); } }, - watch: { - // watching all disabled fields - "formData.status_kurzbz"(newVal) { - if (newVal !== this.original.status_kurzbz) { - this.hasCriticalChangesBis = true; - } - }, -/* "formData.studiensemester_kurzbz"(newVal) { - if (newVal !== this.original.studiensemester_kurzbz) { - this.hasCriticalChangesBis = true; - } - },*/ - "formData.orgform_kurzbz"(newVal) { - if (newVal !== this.original.orgform_kurzbz) { - this.hasCriticalChangesBis = true; - } - }, - "formData.datum"(newVal) { - if (newVal !== this.original.datum) { - this.hasCriticalChangesBis = true; - } - }, - "formData.bestaetigtam"(newVal) { - if (newVal !== this.original.bestaetigtam) { - this.hasCriticalChangesBis = true; - } - }, - "formData.bewerbung_abgeschicktamum"(newVal) { - if (newVal !== this.original.bestaetigtam) { - this.hasCriticalChangesBis = true; - } - }, - "formData.studienplan_id"(newVal) { - if (newVal !== this.original.studienplan_id) { - this.hasCriticalChangesBis = true; - } - }, - "formData.rt_stufe"(newVal) { - if (newVal !== this.original.rt_stufe) { - this.hasCriticalChangesBis = true; - } - }, - }, created() { this.$api .call(ApiStvStatus.getStatusgruende()) From 718272e8a152a897eebeef33a58e340590bb09ac Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 15 Dec 2025 15:13:53 +0100 Subject: [PATCH 3/5] remove empty line --- application/controllers/api/frontend/v1/stv/Status.php | 1 - 1 file changed, 1 deletion(-) diff --git a/application/controllers/api/frontend/v1/stv/Status.php b/application/controllers/api/frontend/v1/stv/Status.php index a99db9ac8..dbd9e69b4 100644 --- a/application/controllers/api/frontend/v1/stv/Status.php +++ b/application/controllers/api/frontend/v1/stv/Status.php @@ -1132,7 +1132,6 @@ class Status extends FHCAPI_Controller $ausbildungssemester = $this->input->post('ausbildungssemester') ?: $oldstatus->ausbildungssemester; $datum = $this->input->post('datum') ?: $oldstatus->datum; - //Form Validation $this->load->library('form_validation'); From 11ff26d8e7f9cf7ccee6625613370754bfaac5b6 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 15 Dec 2025 15:20:19 +0100 Subject: [PATCH 4/5] remove empty lines --- application/controllers/api/frontend/v1/stv/Status.php | 1 - public/js/api/factory/stv/status.js | 1 - 2 files changed, 2 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Status.php b/application/controllers/api/frontend/v1/stv/Status.php index dbd9e69b4..09a9f18b1 100644 --- a/application/controllers/api/frontend/v1/stv/Status.php +++ b/application/controllers/api/frontend/v1/stv/Status.php @@ -206,7 +206,6 @@ class Status extends FHCAPI_Controller $datum_string = date('c'); $datum = new DateTime($datum_string); - //Form Validation $this->load->library('form_validation'); diff --git a/public/js/api/factory/stv/status.js b/public/js/api/factory/stv/status.js index 7c289dc22..11e7f4fde 100644 --- a/public/js/api/factory/stv/status.js +++ b/public/js/api/factory/stv/status.js @@ -41,7 +41,6 @@ export default { ausbildungssemester }, params) { return { - method: 'post', url: 'api/frontend/v1/stv/status/updateStatus/' + prestudent_id + '/' From 7de3c4a24e423fcdef9e6bdc787e28b1a32ae32f Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 15 Dec 2025 15:22:32 +0100 Subject: [PATCH 5/5] remove unnecessary line --- .../components/Stv/Studentenverwaltung/Details/Status/Modal.js | 1 - 1 file changed, 1 deletion(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js b/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js index 3b282d230..7507b0ebd 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Status/Modal.js @@ -136,7 +136,6 @@ export default{ this.statusNew = false; this.formData = result.data; this.originalDatum = new Date(result.data.datum); - this.original = { ...this.formData}; return prestudent; }) .then(this.loadStudienplaeneAndSetPrestudent)