diff --git a/application/controllers/api/frontend/v1/stv/Abschlusspruefung.php b/application/controllers/api/frontend/v1/stv/Abschlusspruefung.php index f77de7021..d3b53a8a5 100644 --- a/application/controllers/api/frontend/v1/stv/Abschlusspruefung.php +++ b/application/controllers/api/frontend/v1/stv/Abschlusspruefung.php @@ -20,6 +20,7 @@ class Abschlusspruefung extends FHCAPI_Controller 'getBeurteilungen' => ['admin:rw', 'assistenz:rw'], 'getAkadGrade' => ['admin:rw', 'assistenz:rw'], 'getMitarbeiter' => ['admin:rw', 'assistenz:rw'], + 'getPruefer' => ['admin:rw', 'assistenz:rw'], 'getTypStudiengang' => ['admin:rw', 'assistenz:rw'], 'checkForExistingExams' => ['admin:rw', 'assistenz:rw'], ]); @@ -241,6 +242,21 @@ class Abschlusspruefung extends FHCAPI_Controller $this->terminateWithSuccess($result ?: []); } + public function getPruefer() + { + $searchString = $this->input->get('searchString') ?? ''; + + $this->load->model('ressource/Person_model', 'PersonModel'); + + $result = $this->PersonModel->searchPerson($searchString, 'mitMaUid'); + + if (isError($result)) { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + $this->terminateWithSuccess($result ?: []); + } + public function getNoten() { $this->load->model('education/Note_model', 'NoteModel'); diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index e72b24de4..8dfbc7c4a 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -149,7 +149,7 @@ class Person_model extends DB_Model * @param $filter Term to search for. * @return DB-result */ - public function searchPerson($filter) + public function searchPerson($filter, $mode=null) { $this->addSelect('vorname, nachname, gebdatum, person_id, titelpre, titelpost'); $this->addSelect("CASE @@ -161,6 +161,20 @@ class Person_model extends DB_Model THEN 'Student' ELSE 'Person' END AS status"); + + if($mode == 'mitMaUid') + { + $this->addSelect("( + SELECT m.mitarbeiter_uid + FROM public.tbl_benutzer b + JOIN public.tbl_mitarbeiter m + ON b.uid = m.mitarbeiter_uid + WHERE b.person_id = tbl_person.person_id + LIMIT 1 + ) + AS uid"); + }; + $result = $this->loadWhere( 'lower(nachname) like '.$this->db->escape('%'.mb_strtolower($filter).'%')." OR lower(vorname) like ".$this->db->escape('%'.$filter.'%')." diff --git a/public/js/api/factory/stv/abschlusspruefung.js b/public/js/api/factory/stv/abschlusspruefung.js index 7a1a088ea..dcba61887 100644 --- a/public/js/api/factory/stv/abschlusspruefung.js +++ b/public/js/api/factory/stv/abschlusspruefung.js @@ -90,6 +90,13 @@ export default { params: { searchString } }; }, + getPruefer(searchString) { + return { + method: 'get', + url: 'api/frontend/v1/stv/abschlusspruefung/getPruefer', + params: { searchString } + }; + }, getNoten() { return { method: 'get', diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js b/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js index ba19ccdf4..d6dc0d7a9 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js @@ -66,6 +66,7 @@ export default { arrNoten: [], selectedVorsitz: null, filteredMitarbeiter: [], + filteredPersons: [], selectedPruefer1: null, selectedPruefer2: null, selectedPruefer3: null, @@ -301,7 +302,7 @@ export default { //prepare local Storage let STORAGE_KEY = 'finalExamDefaultData'; - const id = '20260224_01'; + const id = '20260224_02'; const stored = JSON.parse(localStorage.getItem(STORAGE_KEY)) || {}; if (stored[id]) { @@ -354,20 +355,23 @@ export default { }; if (data.p1_person_id) { this.selectedPruefer1 = { - label: this.getPersonLabel(data.p1_titelpre, data.p1_nachname, data.p1_vorname, data.p1_titelpost), - person_id: data.p1_person_id + label: this.getPersonLabel(data.p1_titelpre, data.p1_nachname, data.p1_vorname, data.p1_titelpost, data.p1_uid), + person_id: data.p1_person_id, + mitarbeiter_uid: data.p1_uid }; } if (data.p2_person_id) { this.selectedPruefer2 = { - label: this.getPersonLabel(data.p2_titelpre, data.p2_nachname, data.p2_vorname, data.p2_titelpost), - person_id: data.p2_person_id + label: this.getPersonLabel(data.p2_titelpre, data.p2_nachname, data.p2_vorname, data.p2_titelpost, data.p2_uid), + person_id: data.p2_person_id, + mitarbeiter_uid: data.p2_uid } }; if (data.p3_person_id) { this.selectedPruefer3= { - label: this.getPersonLabel(data.p3_titelpre, data.p3_nachname, data.p3_vorname, data.p3_titelpost), - person_id: data.p3_person_id + label: this.getPersonLabel(data.p3_titelpre, data.p3_nachname, data.p3_vorname, data.p3_titelpost, data.p3_uid), + person_id: data.p3_person_id, + mitarbeiter_uid: data.p3_uid }; } }); @@ -564,6 +568,33 @@ export default { } }); }, + searchPerson(event) { + if (this.abortController.persons) { + this.abortController.persons.abort(); + } + this.abortController.persons = new AbortController(); + + return this.$api + .call(ApiStvAbschlusspruefung.getPruefer(event.query)) + .then(result => { + this.filteredPersons = []; + for (let person of result.data.retval) { + this.filteredPersons.push( + { + label: this.getPersonLabel( + person.titelpre, + person.nachname, + person.vorname, + person.titelpost, + person.uid + ), + person_id: person.person_id, + mitarbeiter_uid: person.uid + } + ); + } + }); + }, }, created() { this.$api @@ -737,8 +768,8 @@ export default { optionValue="person_id" dropdown forceSelection - :suggestions="filteredMitarbeiter" - @complete="searchMitarbeiter" + :suggestions="filteredPersons" + @complete="searchPerson" :min-length="3" > @@ -772,8 +803,8 @@ export default { optionValue="person_id" dropdown forceSelection - :suggestions="filteredMitarbeiter" - @complete="searchMitarbeiter" + :suggestions="filteredPersons" + @complete="searchPerson" :min-length="3" > @@ -788,8 +819,8 @@ export default { optionValue="person_id" dropdown forceSelection - :suggestions="filteredMitarbeiter" - @complete="searchMitarbeiter" + :suggestions="filteredPersons" + @complete="searchPerson" :min-length="3" > @@ -822,8 +853,8 @@ export default { optionValue="person_id" dropdown forceSelection - :suggestions="filteredMitarbeiter" - @complete="searchMitarbeiter" + :suggestions="filteredPersons" + @complete="searchPerson" :min-length="3" >