diff --git a/application/controllers/components/Antrag/Abmeldung.php b/application/controllers/components/Antrag/Abmeldung.php index 9130c1d7d..44d1b5c4a 100644 --- a/application/controllers/components/Antrag/Abmeldung.php +++ b/application/controllers/components/Antrag/Abmeldung.php @@ -167,9 +167,12 @@ class Abmeldung extends FHC_Controller { $this->load->library('PermissionLib'); + $_POST = json_decode($this->input->raw_input_stream, true); + $query = $this->input->post('query'); + $studiengaenge = $this->permissionlib->getSTG_isEntitledFor('student/studierendenantrag'); - $result = $this->antraglib->getAbmeldeBerechtigtForStg($studiengaenge); + $result = $this->antraglib->getAktivePrestudentenInStgs($studiengaenge, $query); if (isError($result)) { return $this->outputJsonError(getError($result)); } @@ -178,6 +181,8 @@ class Abmeldung extends FHC_Controller return $this->outputJsonSuccess([]); } + return $this->outputJsonSuccess($result); + $sortedStudents = []; foreach ($result as $item) { if (!isset($sortedStudents[$item->studiengang_kz])) diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php index e3119d65b..e06c57544 100644 --- a/application/libraries/AntragLib.php +++ b/application/libraries/AntragLib.php @@ -1188,13 +1188,15 @@ class AntragLib return $stsems; } - public function getAbmeldeBerechtigtForStg($studiengaenge) + public function getAktivePrestudentenInStgs($studiengaenge, $query) { $blacklist = $this->_ci->config->item('stgkz_blacklist_abmeldung'); $studiengaenge = array_diff($studiengaenge, $blacklist); - return $this->_ci->StudiengangModel->getAktivePrestudenten($studiengaenge, [ - Studierendenantrag_model::TYP_ABMELDUNG - ]); + return $this->_ci->StudiengangModel->getAktivePrestudenten( + $studiengaenge, + [ Studierendenantrag_model::TYP_ABMELDUNG ], + $query + ); } public function getFailedExamForPrestudent($prestudent_id) diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index ea9e5857e..1e5c16cc5 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -532,7 +532,7 @@ class Studiengang_model extends DB_Model * * @return stdClass */ - public function getAktivePrestudenten($studiengang_kzs, $not_antrag_typ = null) + public function getAktivePrestudenten($studiengang_kzs, $not_antrag_typ = null, $query = null) { $this->load->config('studierendenantrag'); @@ -571,6 +571,21 @@ class Studiengang_model extends DB_Model $this->db->group_end(); } + if ($query) { + $query = explode(' ', $query); + $this->db->group_start(); + foreach ($query as $q) { + $this->db->group_start(); + $this->db->where('pers.vorname ILIKE', "%" . $q . "%"); + $this->db->or_where('pers.nachname ILIKE', "%" . $q . "%"); + $this->db->or_where($this->dbTable . '.bezeichnung ILIKE', "%" . $q . "%"); + if (is_numeric($q)) + $this->db->or_where('p.prestudent_id', $q); + $this->db->group_end(); + } + $this->db->group_end(); + } + return $this->load(); } } diff --git a/application/views/templates/FHC-Footer.php b/application/views/templates/FHC-Footer.php index c461dd8b0..f4d66a9b9 100644 --- a/application/views/templates/FHC-Footer.php +++ b/application/views/templates/FHC-Footer.php @@ -122,6 +122,7 @@ generateJSsInclude('vendor/npm-asset/primevue/column/column.min.js'); generateJSsInclude('vendor/npm-asset/primevue/calendar/calendar.min.js'); generateJSsInclude('vendor/npm-asset/primevue/skeleton/skeleton.min.js'); + generateJSsInclude('vendor/npm-asset/primevue/autocomplete/autocomplete.min.js'); } // -------------------------------------------------------------------------------------------------------- diff --git a/public/js/apps/lehre/Antrag/Leitung.js b/public/js/apps/lehre/Antrag/Leitung.js index 0e68cccba..e243aad93 100644 --- a/public/js/apps/lehre/Antrag/Leitung.js +++ b/public/js/apps/lehre/Antrag/Leitung.js @@ -5,4 +5,4 @@ const app = Vue.createApp({ StudierendenantragLeitung } }); -app.mount('#wrapper'); +app.use(primevue.config.default).mount('#wrapper'); diff --git a/public/js/components/Studierendenantrag/Leitung/Actions/New.js b/public/js/components/Studierendenantrag/Leitung/Actions/New.js index 8a98a6aa5..b9c21b05f 100644 --- a/public/js/components/Studierendenantrag/Leitung/Actions/New.js +++ b/public/js/components/Studierendenantrag/Leitung/Actions/New.js @@ -4,7 +4,8 @@ import Phrasen from '../../../../mixins/Phrasen.js'; export default { components: { - BsModal + BsModal, + AutoComplete: primevue.autocomplete }, mixins: [ Phrasen @@ -15,8 +16,7 @@ export default { data() { return { data: [], - student: '', - stg: '' + student: '' } }, computed: { @@ -24,13 +24,13 @@ export default { return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/lehre/Studierendenantrag/abmeldung/' + this.student; }, students() { - if (!this.stg) - return []; - if (!this.data[this.stg]) - return []; - return this.data[this.stg].studenten.sort( + return this.data.sort( (a, b) => a.nachname == b.nachname ? - a.vorname > b.vorname : + ( + a.vorname == b.vorname ? + a.bezeichnung > b.bezeichnung : + a.vorname > b.vorname + ) : a.nachname > b.nachname ); }, @@ -47,15 +47,17 @@ export default { }), { dialogClass: 'modal-fullscreen' }, this.p.t('studierendenantrag', 'antrag_header')).then(() => { + this.data = []; this.loadSelects(); this.$emit('reload'); }); }, - loadSelects() { - return axios.get( + loadData(evt) { + axios.post( FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + - '/components/Antrag/Abmeldung/getStudiengaengeAssistenz/' + '/components/Antrag/Abmeldung/getStudiengaengeAssistenz/', + evt ).then( result => { if (result.data.error) { @@ -66,14 +68,30 @@ export default { return result; } ); + }, + loadSelects() { + if (this.hasNoData) { + return axios.post( + FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/components/Antrag/Abmeldung/getStudiengaengeAssistenz/', + {query: 'felix'} + ).then( + result => { + if (result.data.error) { + BsAlert.popup(result.data.retval, {dialogClass: 'alert alert-danger'}); + } else { + this.data = result.data.retval; + } + return result; + } + ); + } } }, - created() { - return this.loadSelects(); - }, template: `