diff --git a/application/controllers/api/frontend/v1/stv/Status.php b/application/controllers/api/frontend/v1/stv/Status.php index 459b22927..fa3fab1df 100644 --- a/application/controllers/api/frontend/v1/stv/Status.php +++ b/application/controllers/api/frontend/v1/stv/Status.php @@ -13,13 +13,13 @@ class Status extends FHCAPI_Controller 'getHistoryPrestudent' => ['admin:r', 'assistenz:r'], 'insert' => ['admin:rw', 'assistenz:rw'], 'changeStatus' => ['admin:r', 'assistenz:r', 'student/keine_studstatuspruefung'], - //'turnIntoStudent' => ['admin:r', 'assistenz:r', 'student/keine_studstatuspruefung'], 'addStudent' => ['admin:r', 'assistenz:r', 'student/keine_studstatuspruefung'], 'getStatusgruende' => self::PERM_LOGGED, 'getLastBismeldestichtag' => self::PERM_LOGGED, 'isLastStatus' => self::PERM_LOGGED, 'isErsterStudent' => self::PERM_LOGGED, 'hasStatusBewerber' => self::PERM_LOGGED, + 'getStatusarray' => self::PERM_LOGGED, 'deleteStatus' => ['admin:r','assistenz:r'], 'loadStatus' => ['admin:r', 'assistenz:r'], 'updateStatus' => ['admin:rw', 'assistenz:rw'], @@ -357,6 +357,22 @@ class Status extends FHCAPI_Controller return $studiensem->studiensemester_kurzbz; } + public function getStatusarray() + { + $this->load->model('crm/Status_model', 'StatusModel'); + $result = $this->StatusModel->getAllStatiWithStatusgruende(); + + if(isError($result)) + { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + + } + public function changeStatus($prestudent_id) { //get Studiengang von prestudent_id @@ -445,7 +461,11 @@ class Status extends FHCAPI_Controller { $ausbildungssemester = $lastStatusData->ausbildungssemester; } - if($status_kurzbz == Prestudentstatus_model::STATUS_AUFGENOMMENER) + if( + $status_kurzbz == Prestudentstatus_model::STATUS_AUFGENOMMENER || + $status_kurzbz == Prestudentstatus_model::STATUS_WARTENDER || + $status_kurzbz == Prestudentstatus_model::STATUS_ABGEWIESENER + ) { $studiensemester_kurzbz = $this->getStudiensemesterOfStatus($prestudent_id, Prestudentstatus_model::STATUS_BEWERBER); @@ -560,36 +580,6 @@ class Status extends FHCAPI_Controller } } - //TODO(Manu) DELETE - // $new_status_datum = isset($datum) ? $datum : date('Y-m-d'); - - // $result = $this->prestudentstatuschecklib->checkStatusAdd( - // $prestudent_id, - // $status_kurzbz, - // $studiensemester_kurzbz, - // $new_status_datum, - // $ausbildungssemester, - // $studienplan_id - // ); - - // if (isError($result)) - // { - // return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); - // } - - // $this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel'); - // $result = $this->BismeldestichtagModel->checkIfMeldestichtagErreicht($datum, $studiensemester_kurzbz); - // return $this->terminateWithError("retval: " . $result->retval, self::ERROR_TYPE_GENERAL); - - // if (isError($result)) - // { - // return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); - // } - // if ($result->retval == "1") - // { - // return $this->terminateWithError($this->p->t('lehre','error_dataVorMeldestichtag'), self::ERROR_TYPE_GENERAL); - // } - switch($status_kurzbz){ case Prestudentstatus_model::STATUS_ABBRECHER: { @@ -670,7 +660,7 @@ class Status extends FHCAPI_Controller } break; - case Prestudentstatus_model::STATUS_BEWERBER: +/* case Prestudentstatus_model::STATUS_BEWERBER: { $this->load->library('PrestudentLib'); $result = $this->prestudentlib->setBewerber($prestudent_id, $studiensemester_kurzbz, $ausbildungssemester); @@ -683,7 +673,7 @@ class Status extends FHCAPI_Controller $this->terminateWithSuccess($prestudent_id); } - break; + break;*/ // case Prestudentstatus_model::STATUS_BEWERBER: // { // $this->load->library('PrestudentLib'); @@ -956,6 +946,8 @@ class Status extends FHCAPI_Controller return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } $semesterAufgenommen = current(getData($result)); + $semesterAufgenommen = $semesterAufgenommen->studiensemester_kurzbz; + //generate Personenkennzeichen(matrikelnr) $matrikelnr = false; @@ -963,7 +955,7 @@ class Status extends FHCAPI_Controller $matrikelnr = $value; }); if ($matrikelnr === false) { - $resultMat = $this->StudentModel->generateMatrikelnummer2($stg, $semesterAufgenommen->studiensemester_kurzbz, $typ); + $resultMat = $this->StudentModel->generateMatrikelnummer2($stg, $semesterAufgenommen, $typ); if (isError($resultMat)) { return $this->terminateWithError($resultMat, self::ERROR_TYPE_GENERAL); } @@ -1023,6 +1015,8 @@ class Status extends FHCAPI_Controller $aktivierungscode = getData($result); //generate Alias + //TODO(Manu) check if alias already exists + $result = $this->PersonModel->generateAliasByPersonId($person_id); if (isError($result)) diff --git a/application/models/crm/Status_model.php b/application/models/crm/Status_model.php index 7b1b38ecb..6133b64e2 100644 --- a/application/models/crm/Status_model.php +++ b/application/models/crm/Status_model.php @@ -11,4 +11,22 @@ class Status_model extends DB_Model $this->dbTable = 'public.tbl_status'; $this->pk = 'status_kurzbz'; } + + public function getAllStatiWithStatusgruende() + { + $lang = '[(SELECT index FROM public.tbl_sprache WHERE sprache=' . $this->escape(getUserLanguage()) . ' LIMIT 1)]'; + + $this->addSelect('sg.status_kurzbz'); + + $this->addSelect('statusgrund_id'); + $this->addSelect('sg.bezeichnung_mehrsprachig' . $lang . ' AS bezeichnung'); + $this->addSelect('sg.beschreibung' . $lang . ' AS beschreibung'); + + $this->addJoin('public.tbl_status_grund sg', 'ON (sg.status_kurzbz = public.tbl_status.status_kurzbz)', 'LEFT'); + + return $this->loadWhere([ + 'aktiv'=> true, + ]); + + } } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js index c8d569020..67bcde30f 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js @@ -126,6 +126,74 @@ export default{ return !this.modelValue.some(item => item.uid); } return !this.modelValue.uid; + }, + toolbarInteressent() { + return this.listDataToolbar.filter(item => this.statiInteressent.includes(item.status_kurzbz)); + }, + toolbarStudent() { + return this.listDataToolbar.filter(item => this.statiStudent.includes(item.status_kurzbz)); + }, + resultInteressentArray() { + const result = []; + this.statiInteressent.forEach(status => { + const defaultObject = { + status_kurzbz: status, + statusgrund_id: null, + link: `changeStatusTo${status}`, + dropEntry: null + }; + + if (status === "Student") { + defaultObject.link = 'changeInteressentToStudent'; + } + + result.push(defaultObject); + + this.toolbarInteressent.forEach(item => { + if (item.status_kurzbz === status) { + + const itemObject = { + status_kurzbz: item.status_kurzbz, + statusgrund_id: item.statusgrund_id, + beschreibung: item.beschreibung, + link: `changeStatusTo${item.status_kurzbz}(${item.statusgrund_id})`, + dropEntry: `[${item.beschreibung}]` + }; + + if (item.status_kurzbz === "Student") { + itemObject.link = `changeInteressentTo${item.status_kurzbz}(${item.statusgrund_id})`; + } + + result.push(itemObject); + + } + }); + }); + return result; + }, + resultStudentArray() { + const result = []; + this.statiStudent.forEach(status => { + result.push({ + status_kurzbz: status, + statusgrund_id: null, + link: `changeStatusTo${status}`, + dropEntry: null + }); + + this.toolbarStudent.forEach(item => { + if (item.status_kurzbz === status) { + result.push({ + status_kurzbz: item.status_kurzbz, + statusgrund_id: item.statusgrund_id, + beschreibung: item.beschreibung, + link: `changeStatusTo${item.status_kurzbz}(${item.statusgrund_id})`, + dropEntry: `[${item.beschreibung}]`, + }); + } + }); + }); + return result; } }, props: { @@ -301,7 +369,12 @@ export default{ newStatus: '', statusNew: true, isErsterStudent: false, - isBewerber: true + isBewerber: true, + listDataToolbar: [], + //TODO(Manu) get from config + statiInteressent: ["Bewerber", "Aufgenommener", "Student" , "Wartender", "Abgewiesener"], + statiStudent: ["Abbrecher", "Unterbrecher", "Student" , "Diplomand", "Absolvent"], + selectedStatus: 'default' } }, watch: { @@ -452,7 +525,8 @@ export default{ this.newArray = this.updateData.map(objekt => ({ ...objekt, ...deltaData })); this.changeStatus(prestudentIds); }, - changeStatusToStudent(prestudentIds){ + changeStatusToStudent(statusgrund_id){ + console.log("in function changeStatusToStudent: ", statusgrund_id); let def_date = this.getDefaultDate(); //TODO Manu validation if Bewerber already before asking for ausbildungssemester //this.checkIfBewerber(); @@ -461,12 +535,14 @@ export default{ { status_kurzbz: 'Student', datum: def_date, - bestaetigtam: def_date + bestaetigtam: def_date, + statusgrund_id: statusgrund_id }; this.newArray = this.updateData.map(objekt => ({ ...objekt, ...deltaData, ausbildungssemester: this.actionSem})); - //BewerberZuStudent - this.addStudent(prestudentIds); + + //TODO(Manu) get bezeichnung von statusgrund_kurzbz + this.actionConfirmDialogue(this.updateData, 'student','Studenten'); }, changeStatusToWiederholer(prestudentIds){ this.hideModal('askForAusbildungssemester'); @@ -506,7 +582,7 @@ export default{ this.newArray = this.updateData.map(objekt => ({ ...objekt, ...deltaData})); this.changeStatus(prestudentIds); }, - changeStatusToBewerber(prestudentIds){ + changeStatusToBewerber(){ let def_date = this.getDefaultDate(); let deltaData = { @@ -519,10 +595,9 @@ export default{ this.newArray = this.updateData.map(objekt => ({ ...objekt, ...deltaData})); - this.changeStatus(prestudentIds); + this.changeStatus(this.prestudentIds); }, - changeStatusToAufgenommener(prestudentIds){ - this.hideModal('confirmStatusAction'); + changeStatusToAufgenommener(){ let def_date = this.getDefaultDate(); let deltaData = { @@ -534,39 +609,62 @@ export default{ this.newArray = this.updateData.map(objekt => ({ ...objekt, ...deltaData, - })); + })); - //TODO(Manu) change studiensemester_kurzbz in backend - //studiensemester_kurzbz: this.getStudiensemesterOfBewerber(objekt.prestudent_id) - this.changeStatus(prestudentIds); + this.actionConfirmDialogue(this.updateData, 'aufgenommener','Aufgenommenen'); }, - changeInteressentToStudent(prestudentIds){ - - console.log("in function changeInteressentToStudent") + changeInteressentToStudent(statusgrund_id){ + //TODO(Manu) test statusgrund_id + console.log("in function changeInteressentToStudent mit statusgrund_id", statusgrund_id); let def_date = this.getDefaultDate(); let deltaData = { status_kurzbz: 'Student', datum: def_date, - bestaetigtam: def_date + bestaetigtam: def_date, + statusgrund_id: statusgrund_id }; this.newArray = this.updateData.map(objekt => ({ ...objekt, ...deltaData, - })); + })); - //TODO(Manu) change studiensemester_kurzbz in backend - //studiensemester_kurzbz: this.getStudiensemesterOfBewerber(objekt.prestudent_id) - //this.addStudent(prestudentIds); + this.addStudent(this.prestudentIds); }, - changeStatusToAbgewiesen(prestudentIds){ - console.log("in function changeStatusToAbgewiesen"); + changeStatusToAbgewiesener(statusgrund_id){ + let def_date = this.getDefaultDate(); + let deltaData = + { + status_kurzbz: 'Abgewiesener', + datum: def_date, + bestaetigtam: def_date, + statusgrund_id: statusgrund_id + }; + + this.newArray = this.updateData.map(objekt => ({ + ...objekt, + ...deltaData, + })); + + this.actionConfirmDialogue(this.updateData, 'abgewiesener','Abgewiesenen'); }, - changeStatusToWartend(prestudentIds){ - console.log("in function changeStatusToWartend"); + changeStatusToWartender(){ + let def_date = this.getDefaultDate(); + let deltaData = + { + status_kurzbz: 'Wartender', + datum: def_date, + bestaetigtam: def_date + }; + this.newArray = this.updateData.map(objekt => ({ + ...objekt, + ...deltaData, + })); + + this.actionConfirmDialogue(this.updateData, 'wartender','Wartenden'); }, addStudent(prestudentIds){ @@ -637,6 +735,7 @@ export default{ .catch(this.$fhcAlert.handleSystemError); }, changeStatus(prestudentIds){ + this.hideModal('confirmStatusAction'); //Array.isArray(prestudentIds) ? this.modelValue.prestudent_id : [prestudentIds]; let changeData = {}; @@ -868,6 +967,17 @@ export default{ getDefaultDate() { const today = new Date(); return today; + }, + handleSelectionChange(event) { + const selectedValue = event.target.value; + const selectedItem = this.resultInteressentArray.find(item => + item.status_kurzbz + (item.statusgrund_id !== null ? '-' + item.statusgrund_id : '') === selectedValue + ); + if (selectedItem && typeof this[selectedItem.link] === 'function') { + this[selectedItem.link](); + } else { + console.warn(`No method found for ${selectedItem.link}`); + } } }, created(){ @@ -893,9 +1003,37 @@ export default{ this.$refs.table.tabulator.redraw(true); }) .catch(this.$fhcAlert.handleSystemError); + this.$fhcApi + .get('api/frontend/v1/stv/status/getStatusarray/') + .then(result => result.data) + .then(result => { + this.listDataToolbar = result; + }) + .catch(this.$fhcAlert.handleSystemError); }, template: `
+ + @@ -930,6 +1068,7 @@ export default{ + OK
- +
- +
- +
@@ -1150,7 +1289,7 @@ export default{ Bewerber
  • - Pre-Abbrecher + Pre-Abbrecher
  • - Pre-Wiederholer + Pre-Wiederholer
  • - Wiederholer + Wiederholer
  • - + + +
    + +
    + + +
    + +
    + @@ -1239,49 +1410,66 @@ export default{ Bewerber - + + +
    + +
    + + +
    + +
    `