From 8c98cea114545b78589ff2620172b6fc015859da Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Tue, 25 Jul 2023 13:37:03 +0200 Subject: [PATCH 1/3] semicolon --- public/js/components/Studierendenantrag/Lvzuweisung.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/components/Studierendenantrag/Lvzuweisung.js b/public/js/components/Studierendenantrag/Lvzuweisung.js index d987f55be..f70812209 100644 --- a/public/js/components/Studierendenantrag/Lvzuweisung.js +++ b/public/js/components/Studierendenantrag/Lvzuweisung.js @@ -18,7 +18,7 @@ export default { isloading: false, statusCode: '', statusMsg: '' - } + }; }, computed: { lvs1() { From 72391138477cbf773a5181920cfdf04ffd580b91 Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Tue, 25 Jul 2023 13:42:38 +0200 Subject: [PATCH 2/3] Optionaler Grund bei Einspruch ablehnen --- .../controllers/components/Antrag/Leitung.php | 3 +- application/libraries/AntragLib.php | 4 +- .../components/Studierendenantrag/Leitung.js | 91 ++++++++++++------- .../Studierendenantrag/Leitung/GrundPopup.js | 18 ++-- system/phrasesupdate.php | 20 ++++ 5 files changed, 92 insertions(+), 44 deletions(-) diff --git a/application/controllers/components/Antrag/Leitung.php b/application/controllers/components/Antrag/Leitung.php index 6cc25f87d..a429625ae 100644 --- a/application/controllers/components/Antrag/Leitung.php +++ b/application/controllers/components/Antrag/Leitung.php @@ -190,8 +190,9 @@ class Leitung extends FHC_Controller } $studierendenantrag_id = $this->input->post('studierendenantrag_id'); + $grund = $this->input->post('grund'); - $result = $this->antraglib->denyObjectionAbmeldung($studierendenantrag_id, getAuthUID()); + $result = $this->antraglib->denyObjectionAbmeldung($studierendenantrag_id, getAuthUID(), $grund); if (isError($result)) return $this->outputJsonError(['studierendenantrag_id' => getError($result)]); diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php index 753432edf..a04a03d84 100644 --- a/application/libraries/AntragLib.php +++ b/application/libraries/AntragLib.php @@ -259,7 +259,6 @@ class AntragLib */ public function denyObjectionAbmeldung($studierendenantrag_id, $insertvon, $grund = null) { - // TODO(chris): grund? $result = $this->_ci->StudierendenantragModel->load($studierendenantrag_id); if (isError($result)) { @@ -282,6 +281,9 @@ class AntragLib $status = current(getData($result)); + if ($grund) + $grund = $this->_ci->p->t('studierendenantrag', 'mail_part_grund', ['grund' => $grund]); + $result = $this->_ci->StudierendenantragstatusModel->insert([ 'studierendenantrag_id' => $studierendenantrag_id, 'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_OBJECTION_DENIED, diff --git a/public/js/components/Studierendenantrag/Leitung.js b/public/js/components/Studierendenantrag/Leitung.js index ba7af0a2c..2b2a53d61 100644 --- a/public/js/components/Studierendenantrag/Leitung.js +++ b/public/js/components/Studierendenantrag/Leitung.js @@ -123,30 +123,30 @@ export default { }, actionReject(evt, gruende) { var antraege = evt || this.selectedData; - if(!gruende) - { + if (!gruende) gruende = []; - } var currentAntrag = antraege.pop(); - if(currentAntrag) - GrundPopup.popup(this.p.t('studierendenantrag', 'title_grund', {id: currentAntrag.studierendenantrag_id})).then(result => - { - currentAntrag.grund = result[0]; - gruende.push(currentAntrag); - if(result[1]) - { - while (antraege.length) + if (currentAntrag) { + GrundPopup + .popup(this.p.t('studierendenantrag', 'title_grund', {id: currentAntrag.studierendenantrag_id}), { + countRemaining: antraege.length + }) + .then(result => { + currentAntrag.grund = result[0]; + gruende.push(currentAntrag); + if (result[1]) { - currentAntrag = antraege.pop(); - currentAntrag.grund = result[0]; - gruende.push(currentAntrag); + while (antraege.length) + { + currentAntrag = antraege.pop(); + currentAntrag.grund = result[0]; + gruende.push(currentAntrag); + } } - } - this.actionReject(antraege, gruende); - }) - .catch(() => {}); - else - { + this.actionReject(antraege, gruende); + }) + .catch(() => {}); + } else { this.$refs.loader.show(); axios .all( @@ -206,22 +206,47 @@ export default { }, actionoObjectionDeny(evt, gruende) { var antraege = evt || this.selectedData; - this.$refs.loader.show(); - axios - .all( - antraege.map( - antrag => axios.post( - FHC_JS_DATA_STORAGE_OBJECT.app_root + - FHC_JS_DATA_STORAGE_OBJECT.ci_router + - '/components/Antrag/Leitung/objectionDeny/', - { - studierendenantrag_id: antrag.studierendenantrag_id + if (!gruende) + gruende = []; + var currentAntrag = antraege.pop(); + if (currentAntrag) { + GrundPopup + .popup(this.p.t('studierendenantrag', 'title_grund', {id: currentAntrag.studierendenantrag_id}), { + countRemaining : antraege.length, + optional: true + }) + .then(result => { + currentAntrag.grund = result[0]; + gruende.push(currentAntrag); + if (result[1]) { + while (antraege.length) { + currentAntrag = antraege.pop(); + currentAntrag.grund = result[0]; + gruende.push(currentAntrag); } + } + this.actionoObjectionDeny(antraege, gruende); + }) + .catch(() => {}); + } else { + this.$refs.loader.show(); + axios + .all( + gruende.map( + antrag => axios.post( + FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/components/Antrag/Leitung/objectionDeny/', + { + studierendenantrag_id: antrag.studierendenantrag_id, + grund: antrag.grund + } + ) ) ) - ) - .then(this.showValidation) - .catch(this.showError); + .then(this.showValidation) + .catch(this.showError); + } }, actionObjectionApprove(evt, gruende) { var antraege = evt || this.selectedData; diff --git a/public/js/components/Studierendenantrag/Leitung/GrundPopup.js b/public/js/components/Studierendenantrag/Leitung/GrundPopup.js index d560dfb00..3a7b40f2d 100644 --- a/public/js/components/Studierendenantrag/Leitung/GrundPopup.js +++ b/public/js/components/Studierendenantrag/Leitung/GrundPopup.js @@ -9,7 +9,9 @@ export default { ], props: { placeholder: String, - default: String + default: String, + countRemaining: Number, + optional: Boolean }, data: () => ({ value: '', @@ -18,15 +20,13 @@ export default { isInvalid: false }), methods: { - submit(){ - if(!this.value) { + submit() { + if (!this.value && !this.optional) { this.isInvalid = true; - } - else { + } else { this.result = [this.value, this.check]; this.hide(); } - return } }, created() { @@ -49,12 +49,12 @@ export default { {{p.t('kvp','new.error.required')}} -
+ + - diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index aa16ea77b..442ef7f81 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -20666,6 +20666,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'studierendenantrag', + 'phrase' => 'mail_part_grund', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => '

Grund:

{grund}

', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '

Reason:

{grund}

', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'studierendenantrag', From 02b64ad6a7c8690e95dc9b88166ca1443ee6f8ce Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Tue, 25 Jul 2023 13:59:18 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Assistenz=20kann=20eigene=20Abmeldungen=20Z?= =?UTF-8?q?ur=C3=BCckziehen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/libraries/AntragLib.php | 3 +-- .../components/Studierendenantrag/Leitung.js | 20 +++++++++++++++++++ .../Studierendenantrag/Leitung/Table.js | 11 +++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php index a04a03d84..0b5ec1957 100644 --- a/application/libraries/AntragLib.php +++ b/application/libraries/AntragLib.php @@ -1627,8 +1627,7 @@ class AntragLib if ($antrag->typ != Studierendenantrag_model::TYP_ABMELDUNG_STGL) return $this->isOwnAntrag($antrag_id); - // TODO(chris): assistenz can not cancel - should they be able to? - return false; + return $this->hasAccessToAntrag($antrag_id, 'student/studierendenantrag'); } /** diff --git a/public/js/components/Studierendenantrag/Leitung.js b/public/js/components/Studierendenantrag/Leitung.js index 2b2a53d61..747ad7123 100644 --- a/public/js/components/Studierendenantrag/Leitung.js +++ b/public/js/components/Studierendenantrag/Leitung.js @@ -267,6 +267,25 @@ export default { .then(this.showValidation) .catch(this.showError); }, + actionCancel(evt) { + var antraege = evt || this.selectedData; + this.$refs.loader.show(); + axios + .all( + antraege.map( + antrag => axios.post( + FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/components/Antrag/Abmeldung/cancelAntrag/', + { + antrag_id: antrag.studierendenantrag_id + } + ) + ) + ) + .then(this.showValidation) + .catch(this.showError); + }, showValidation(results) { var errors = results.filter(res => res.data.error); this.$refs.loader.hide(); @@ -327,6 +346,7 @@ export default { @action:object="actionObject" @action:objectionDeny="actionoObjectionDeny" @action:objectionApprove="actionObjectionApprove" + @action:cancel="actionCancel" > diff --git a/public/js/components/Studierendenantrag/Leitung/Table.js b/public/js/components/Studierendenantrag/Leitung/Table.js index cb469ee57..ba665c6f9 100644 --- a/public/js/components/Studierendenantrag/Leitung/Table.js +++ b/public/js/components/Studierendenantrag/Leitung/Table.js @@ -25,7 +25,8 @@ export default { 'action:reopen', 'action:object', 'action:objectionDeny', - 'action:objectionApprove' + 'action:objectionApprove', + 'action:cancel' ], data() { return { @@ -272,6 +273,14 @@ export default { }; container.append(button); } + // NOTE(chris): Cancel + if (data.typ == 'AbmeldungStgl' && data.status == 'Erstellt') { + let button = document.createElement('button'); + button.innerHTML = this.p.t('studierendenantrag', 'btn_cancel'); + button.className = "btn btn-outline-secondary"; + button.addEventListener('click',() => this.$emit('action:cancel', [cell.getData()])); + container.append(button); + } } if (this.stgL.includes(data.studiengang_kz)) {