From 3fce44845152d8a9c917625309e67ff3c3858cd7 Mon Sep 17 00:00:00 2001 From: cgfhtw Date: Mon, 10 Jul 2023 10:19:06 +0200 Subject: [PATCH] Abmeldung durch Stgl: status => typ --- .../components/Antrag/Abmeldung.php | 17 ++++ .../controllers/components/Antrag/Leitung.php | 7 +- .../controllers/lehre/Studierendenantrag.php | 9 ++ application/libraries/AntragLib.php | 31 ++++-- .../education/Studierendenantrag_model.php | 1 + .../models/organisation/Studiengang_model.php | 2 +- .../components/Studierendenantrag/Antrag.js | 2 + .../Studierendenantrag/Form/AbmeldungStgl.js | 99 +++++++++++++++++++ .../Studierendenantrag/Leitung/Actions/New.js | 1 + .../Studierendenantrag/Leitung/Table.js | 6 +- .../27351_digitalisierung_formulare.php | 2 - system/phrasesupdate.php | 40 ++++++++ 12 files changed, 204 insertions(+), 13 deletions(-) create mode 100644 public/js/components/Studierendenantrag/Form/AbmeldungStgl.js diff --git a/application/controllers/components/Antrag/Abmeldung.php b/application/controllers/components/Antrag/Abmeldung.php index b7235f4eb..8c728c804 100644 --- a/application/controllers/components/Antrag/Abmeldung.php +++ b/application/controllers/components/Antrag/Abmeldung.php @@ -76,6 +76,23 @@ class Abmeldung extends FHC_Controller $this->outputJsonSuccess(getData($result)); } + public function getDetailsForAntrag($studierendenantrag_id) + { + if (!$this->antraglib->isEntitledToShowAntrag($studierendenantrag_id)) return show_404(); + + $result = $this->antraglib->getDetailsForAntrag($studierendenantrag_id); + if (isError($result)) { + return $this->outputJsonError(getError($result)); + } + + $data = getData($result); + + if ($data->typ !== Studierendenantrag_model::TYP_ABMELDUNG_STGL) + return show_404(); + + $this->outputJsonSuccess($data); + } + public function createAntrag() { $this->load->library('form_validation'); diff --git a/application/controllers/components/Antrag/Leitung.php b/application/controllers/components/Antrag/Leitung.php index 90a677c31..9df8fdb75 100644 --- a/application/controllers/components/Antrag/Leitung.php +++ b/application/controllers/components/Antrag/Leitung.php @@ -201,7 +201,7 @@ class Leitung extends FHC_Controller public function canBeObjected($studierendenantrag_id) { - return $this->antraglib->hasStatus($studierendenantrag_id, Studierendenantragstatus_model::STATUS_APPROVED_STGL); + return $this->antraglib->hasType($studierendenantrag_id, Studierendenantrag_model::TYP_ABMELDUNG_STGL); } public function isObjected($studierendenantrag_id) @@ -241,6 +241,11 @@ class Leitung extends FHC_Controller return $this->outputJsonSuccess($studierendenantrag_id); } + public function approveAbmeldungStgl() + { + return $this->approveAbmeldung(); + } + public function approveUnterbrechung() { $this->load->library('form_validation'); diff --git a/application/controllers/lehre/Studierendenantrag.php b/application/controllers/lehre/Studierendenantrag.php index 16b47d592..f27350e9a 100644 --- a/application/controllers/lehre/Studierendenantrag.php +++ b/application/controllers/lehre/Studierendenantrag.php @@ -129,6 +129,15 @@ class Studierendenantrag extends FHC_Controller ]); } + public function abmeldungstgl($prestudent_id, $studierendenantrag_id) + { + $this->load->view('lehre/Antrag/Create', [ + 'prestudent_id' => $prestudent_id, + 'studierendenantrag_id' => $studierendenantrag_id, + 'antrag_type' => 'AbmeldungStgl' + ]); + } + public function unterbrechung($prestudent_id, $studierendenantrag_id = null) { $this->load->view('lehre/Antrag/Create', [ diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php index e06c57544..01ca7f894 100644 --- a/application/libraries/AntragLib.php +++ b/application/libraries/AntragLib.php @@ -85,15 +85,15 @@ class AntragLib $prestudent = getData($result)[0]; if($prestudent->person_id == getAuthPersonId()) - $status = Studierendenantragstatus_model::STATUS_CREATED; + $typ = Studierendenantrag_model::TYP_ABMELDUNG; else - $status = Studierendenantragstatus_model::STATUS_CREATED_STGL; + $typ = Studierendenantrag_model::TYP_ABMELDUNG_STGL; $result = $this->_ci->StudierendenantragModel->insert([ 'prestudent_id' => $prestudent_id, 'studiensemester_kurzbz'=> $studiensemester_kurzbz, 'datum' => date('c'), - 'typ' => Studierendenantrag_model::TYP_ABMELDUNG, + 'typ' => $typ, 'insertvon' => $insertvon, 'grund' => $grund ]); @@ -105,7 +105,7 @@ class AntragLib $result = $this->_ci->StudierendenantragstatusModel->insert([ 'studierendenantrag_id' => $antrag_id, - 'studierendenantrag_statustyp_kurzbz' => $status, + 'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_CREATED, 'insertvon' => $insertvon ]); @@ -148,7 +148,7 @@ class AntragLib $result = $this->_ci->StudierendenantragstatusModel->insert([ 'studierendenantrag_id' => $studierendenantrag_id, - 'studierendenantrag_statustyp_kurzbz' => $status_approved, + 'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_APPROVED, 'insertvon' => $insertvon ]); if (isError($result)) @@ -160,7 +160,7 @@ class AntragLib $errors[] = getError($resultPrestudent); continue; } - if ($status_approved == Studierendenantragstatus_model::STATUS_APPROVED) + if ($status->typ == Studierendenantrag_model::TYP_ABMELDUNG) { $antrag = getData($resultPrestudent)[0]; @@ -1482,6 +1482,25 @@ class AntragLib return in_array($lastStatus->studierendenantrag_statustyp_kurzbz, $status); } + /** + * @param integer $antrag_id + * @param string|array $type + * + * @return boolean + */ + public function hasType($antrag_id, $type) + { + $result = $this->_ci->StudierendenantragModel->load($antrag_id); + if (!hasData($result)) + return false; + $antrag = getData($result)[0]; + + if (!is_array($type)) + $type = [$type]; + + return in_array($antrag->typ, $type); + } + /** * @param integer $antrag_id diff --git a/application/models/education/Studierendenantrag_model.php b/application/models/education/Studierendenantrag_model.php index bf993ca67..1d2537a92 100644 --- a/application/models/education/Studierendenantrag_model.php +++ b/application/models/education/Studierendenantrag_model.php @@ -3,6 +3,7 @@ class Studierendenantrag_model extends DB_Model { const TYP_ABMELDUNG = 'Abmeldung'; + const TYP_ABMELDUNG_STGL = 'AbmeldungStgl'; const TYP_UNTERBRECHUNG = 'Unterbrechung'; const TYP_WIEDERHOLUNG = 'Wiederholung'; diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index e06965bea..0d2328b14 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -567,7 +567,7 @@ class Studiengang_model extends DB_Model if ($not_antrag_typ !== null && is_array($not_antrag_typ)) { foreach($not_antrag_typ as $k => $v) $not_antrag_typ[$k] = $this->db->escape($v); - $this->addJoin('campus.tbl_studierendenantrag a', 'a.prestudent_id=p.prestudent_id and a.typ in ('. implode(',', $not_antrag_typ ).')', 'LEFT'); + $this->addJoin('campus.tbl_studierendenantrag a', 'a.prestudent_id=p.prestudent_id and a.typ in ('. implode(',', $not_antrag_typ ).") AND campus.get_status_studierendenantrag (a.studierendenantrag_id)<>'" . Studierendenantragstatus_model::STATUS_CANCELLED . "'", 'LEFT'); $this->db->where('a.typ IS NULL'); } diff --git a/public/js/components/Studierendenantrag/Antrag.js b/public/js/components/Studierendenantrag/Antrag.js index 6619b74e7..d5989b521 100644 --- a/public/js/components/Studierendenantrag/Antrag.js +++ b/public/js/components/Studierendenantrag/Antrag.js @@ -1,4 +1,5 @@ import StudierendenantragAbmeldung from './Form/Abmeldung.js'; +import StudierendenantragAbmeldungStgl from './Form/AbmeldungStgl.js'; import StudierendenantragUnterbrechung from './Form/Unterbrechung.js'; import StudierendenantragWiederholung from './Form/Wiederholung.js'; import Phrasen from '../../mixins/Phrasen.js'; @@ -6,6 +7,7 @@ import Phrasen from '../../mixins/Phrasen.js'; export default { components: { StudierendenantragAbmeldung, + StudierendenantragAbmeldungStgl, StudierendenantragUnterbrechung, StudierendenantragWiederholung }, diff --git a/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js new file mode 100644 index 000000000..7665c7353 --- /dev/null +++ b/public/js/components/Studierendenantrag/Form/AbmeldungStgl.js @@ -0,0 +1,99 @@ +import {CoreFetchCmpt} from '../../Fetch.js'; +import Phrasen from '../../../mixins/Phrasen.js'; + +export default { + components: { + CoreFetchCmpt + }, + mixins: [ + Phrasen + ], + emits: [ + 'setInfos', + 'setStatus' + ], + props: { + studierendenantragId: Number + }, + data() { + return { + data: null + } + }, + computed: { + statusSeverity() { + switch (this.data.status) + { + case 'Erstellt': return 'info'; + case 'Genehmigt': return 'success'; + default: return 'info'; + } + } + }, + methods: { + load() { + return axios.get( + FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/components/Antrag/Abmeldung/getDetailsForAntrag/' + + this.studierendenantragId + ).then( + result => { + this.data = result.data.retval; + if (this.data.status) { + this.$emit("setStatus", { + msg: this.p.t_ref('studierendenantrag', 'status_x', {status: this.data.statustyp}), + severity: this.statusSeverity + }); + } + return result; + } + ); + } + }, + template: ` +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
{{p.t('lehre', 'studiengang')}}{{data.bezeichnung}}
{{p.t('lehre', 'organisationsform')}}{{data.orgform_bezeichnung}}
{{p.t('projektarbeitsbeurteilung', 'nameStudierende')}}{{data.name}}
{{p.t('person', 'personenkennzeichen')}}{{data.matrikelnr}}
{{p.t('lehre', 'studienjahr')}}{{data.studienjahr_kurzbz}}
{{p.t('lehre', 'semester')}}{{data.semester}}
+
+
+
{{p.t('studierendenantrag', 'antrag_grund')}}:
+
{{data.grund}}
+
+
+ +
+
+ ` +} diff --git a/public/js/components/Studierendenantrag/Leitung/Actions/New.js b/public/js/components/Studierendenantrag/Leitung/Actions/New.js index 6169fef72..9fb5e7a64 100644 --- a/public/js/components/Studierendenantrag/Leitung/Actions/New.js +++ b/public/js/components/Studierendenantrag/Leitung/Actions/New.js @@ -79,6 +79,7 @@ export default { @complete="loadData" inputId="newAntragModalAutoComplete" dropdown + dropdown-mode="current" >