diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index 3a383ed2c..031b24670 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -441,6 +441,13 @@ class Student extends FHCAPI_Controller $this->load->model('person/Person_model', 'PersonModel'); + $this->PersonModel->addSelect( + 'person_id, vorname, nachname, vornamen, wahlname, gebdatum, staatsbuergerschaft, geburtsnation, sprache, anrede, + titelpost, titelpre, gebort, gebzeit, homepage, geschlecht, matr_nr, + aktiv, unruly, tbl_geschlecht.bezeichnung_mehrsprachig AS geschlecht_bezeichnung' + ); + $this->PersonModel->addJoin('public.tbl_geschlecht', 'geschlecht'); + if ($gebdatum) $this->PersonModel->db->where('gebdatum', (new DateTime($gebdatum))->format('Y-m-d')); if ($vorname && $nachname) { @@ -456,6 +463,33 @@ class Student extends FHCAPI_Controller $data = $this->getDataOrTerminateWithError($result); + $this->load->model('person/Adresse_model', 'AdresseModel'); + $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); + + foreach ($data as $person) + { + // get adresses + $langIdx = $this->_getLanguageIndex() - 1; + $person->geschlecht_bezeichnung = isset($person->geschlecht_bezeichnung[$langIdx]) ? $person->geschlecht_bezeichnung[$langIdx] : ''; + + // get Adresse + $this->AdresseModel->addOrder('heimatadresse', 'DESC'); + $this->AdresseModel->addOrder('zustelladresse', 'DESC'); + $this->AdresseModel->addOrder('adresse_id', 'DESC'); + $result = $this->AdresseModel->loadWhere(['person_id' => $person->person_id]); + + $adressen = $this->getDataOrTerminateWithError($result); + + $person->adressen = $adressen; + + // get status + $result = $this->PrestudentstatusModel->getLastStatusPerson($person->person_id); + + $status = $this->getDataOrTerminateWithError($result); + + $person->status = $status; + } + $this->terminateWithSuccess($data); } @@ -471,7 +505,6 @@ class Student extends FHCAPI_Controller $this->_validate(); - // TODO(chris): This should be in a library $this->load->model('crm/Student_model', 'StudentModel'); $this->load->model('crm/Prestudent_model', 'PrestudentModel'); $this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); @@ -486,6 +519,8 @@ class Student extends FHCAPI_Controller $this->db->trans_begin(); $result = $this->_addPerson(); + if (isError($result)) $errors[] = getError($result); + if (hasData($result)) { $person_id = getData($result); @@ -536,7 +571,7 @@ class Student extends FHCAPI_Controller if ($this->input->post('geschlecht')) $data['geschlecht'] = $this->input->post('geschlecht'); if ($this->input->post('gebdatum')) - $data['gebdatum'] = (new DateTime($this->input->post('datum_obj')))->format('Y-m-d'); + $data['gebdatum'] = (new DateTime($this->input->post('gebdatum')))->format('Y-m-d'); if ($this->input->post('geburtsnation')) $data['geburtsnation'] = $this->input->post('geburtsnation'); if ($this->input->post('staatsbuergerschaft')) @@ -551,8 +586,8 @@ class Student extends FHCAPI_Controller private function _addAdresse($person_id) { // Addresse anlegen? - $anlegen = $this->input->post('address[func]'); - if ($anlegen) + $anlegen = $this->input->post('address[checked]'); + if ($anlegen === true) { // Adresse laden $this->load->model('person/Adresse_model', 'AdresseModel'); @@ -567,46 +602,21 @@ class Student extends FHCAPI_Controller 'zustelladresse' => true, ]; - if ($anlegen < 0) // Adresse überschreiben - { $this->AdresseModel->addSelect('adresse_id'); - $this->AdresseModel->addJoin('public.tbl_adressentyp', 'typ = adressentyp_kurzbz'); - $this->AdresseModel->addOrder('zustelladresse', 'DESC'); - $this->AdresseModel->addOrder('sort'); $result = $this->AdresseModel->loadWhere([ 'person_id' => $person_id ]); if (isError($result)) return $result; - if (hasData($result)) - { - $address = getData($result)[0]; + // wenn neue Adresse, heimatadresse setzen + if (!hasData($result)) $data['heimatadresse'] = true; - $data['updateamum'] = date('c'); - $data['updatevon'] = getAuthUID(); - - return $this->AdresseModel->update($address->adresse_id, $data); - } - else { - //Wenn keine Adrese vorhanden ist dann eine neue Anlegen - $anlegen = 1; - $data['heimatadresse'] = true; - } - } - - if ($anlegen > 0) // Adresse hinzufügen - { $data['person_id'] = $person_id; $data['insertamum'] = date('c'); $data['insertvon'] = getAuthUID(); - // Wenn die Person neu angelegt wird, dann ist die neue Adresse die Heimatadresse - if (!isset($data['heimatadresse'])) - $data['heimatadresse'] = !$this->input->post('person_id'); - return $this->AdresseModel->insert($data); - } } return success(null); @@ -714,7 +724,7 @@ class Student extends FHCAPI_Controller public function requiredIfAddressFunc($value) { - if (!$_POST['address']['func'] || $_POST['address']['func'] == 0) + if (!isset($_POST['address']['checked']) || !$_POST['address']['checked']) return true; return !!$value; } @@ -733,11 +743,6 @@ class Student extends FHCAPI_Controller return !!$value; } - public function isValidDate($value) - { - return isValidDate($value); - } - /** * Validates input data. Terminates with validation errors, if invalid. */ @@ -754,7 +759,7 @@ class Student extends FHCAPI_Controller $this->form_validation->set_rules('gebdatum', 'Geburtsdatum', ['isValidDate', function($value) { return isValidDate($value); }], [ 'isValidDate' => $this->p->t('ui', 'error_invalid_date') ]); - $this->form_validation->set_rules('address[func]', 'Address', 'required|integer|less_than[2]|greater_than[-2]'); + //$this->form_validation->set_rules('address[checked]', 'Address', 'required'); $this->form_validation->set_rules('address[plz]', 'PLZ', 'callback_requiredIfAddressFunc', [ 'requiredIfAddressFunc' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('person', 'plz')]) ]); @@ -789,4 +794,14 @@ class Student extends FHCAPI_Controller if (!$this->form_validation->run()) $this->terminateWithValidationErrors($this->form_validation->error_array()); } + + private function _getLanguageIndex() + { + $this->load->model('system/Sprache_model', 'SpracheModel'); + $this->SpracheModel->addSelect('index'); + $result = $this->SpracheModel->loadWhere(array('sprache' => getUserLanguage())); + $this->addMeta('lang', getUserLanguage()); + + return hasData($result) ? getData($result)[0]->index : 1; + } } diff --git a/application/models/crm/Prestudentstatus_model.php b/application/models/crm/Prestudentstatus_model.php index de91319b9..c0ed8595e 100644 --- a/application/models/crm/Prestudentstatus_model.php +++ b/application/models/crm/Prestudentstatus_model.php @@ -290,7 +290,11 @@ class Prestudentstatus_model extends DB_Model */ public function getLastStatusPerson($person_id, $studiensemester_kurzbz = null) { - $query = 'SELECT * + $query = 'SELECT p.*, ps.*, s.*, + stg.kurzbz AS studiengang_kurzbz, stg.kurzbzlang AS studiengang_kurzbzlang, + UPPER(typ::varchar(1) || kurzbz) AS studiengang_kuerzel, + stg.typ AS studiengang_typ, stg.bezeichnung AS studiengang_bezeichnung, stg.english AS studiengang_bezeichnung_english, + stg.orgform_kurzbz AS studiengang_orgform FROM public.tbl_prestudent p JOIN ( SELECT DISTINCT ON(prestudent_id) * @@ -298,7 +302,8 @@ class Prestudentstatus_model extends DB_Model WHERE prestudent_id IN (SELECT prestudent_id FROM public.tbl_prestudent WHERE person_id = ?) ORDER BY prestudent_id, datum desc, insertamum desc ) ps USING(prestudent_id) - JOIN public.tbl_status USING(status_kurzbz)'; + JOIN public.tbl_status s USING(status_kurzbz) + JOIN public.tbl_studiengang stg USING (studiengang_kz)'; $parametersArray = array($person_id); diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index adcf2f2a8..ca8ff891b 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -381,7 +381,6 @@ export default { return false; }, actionNewPerson() { - this.$refs.newPersonModal.reset(); this.$refs.newPersonModal.open(); }, actionKontaktdatenBearbeiten() { diff --git a/public/js/components/Stv/Studentenverwaltung/List/New.js b/public/js/components/Stv/Studentenverwaltung/List/New.js index 27afb103c..018602d0c 100644 --- a/public/js/components/Stv/Studentenverwaltung/List/New.js +++ b/public/js/components/Stv/Studentenverwaltung/List/New.js @@ -13,9 +13,11 @@ import ApiStudienplan from '../../../../api/factory/studienplan.js'; var _uuid = 0; const FORMDATA_DEFAULT = { address: { - func: 1, + checked: true, nation: 'A' }, + vorname: '', + nachname: '', geburtsnation: 'A', staatsbuergerschaft: 'A', ausbildungssemester: 1, @@ -45,7 +47,7 @@ export default { data() { return { places: [], - formData: FORMDATA_DEFAULT, + formData: null, suggestions: {}, person: null, semester: [], @@ -63,7 +65,7 @@ export default { return this.formData; }, orte() { - return this.places.filter(ort => ort.name == this.formData.address.gemeinde); + return this.places.filter(ort => ort.name == this.formData?.address.gemeinde); }, gemeinden() { return Object.values(this.places.reduce((res,place) => { @@ -73,7 +75,7 @@ export default { }, formDataStg: { get() { - return this.formData.studiengang_kz !== undefined ? this.formData.studiengang_kz : this.studiengangKz; + return this.formData?.studiengang_kz !== undefined ? this.formData?.studiengang_kz : this.studiengangKz; }, set(v) { this.formData.studiengang_kz = v; @@ -81,7 +83,7 @@ export default { }, formDataSem: { get() { - return this.formData.studiensemester_kurzbz !== undefined ? this.formData.studiensemester_kurzbz : this.studiensemesterKurzbz; + return this.formData?.studiensemester_kurzbz !== undefined ? this.formData?.studiensemester_kurzbz : this.studiensemesterKurzbz; }, set(v) { this.formData.studiensemester_kurzbz = v; @@ -101,10 +103,10 @@ export default { this.$refs.modal.show(); }, reset() { - this.formData = FORMDATA_DEFAULT; + this.formData = JSON.parse(JSON.stringify(FORMDATA_DEFAULT)); this.person = null; this.suggestions = []; - this.$refs.form.clearValidation(); + if (this.$refs.form) this.$refs.form.clearValidation(); }, loadSuggestions() { if (this.abortController.suggestions) @@ -116,9 +118,9 @@ export default { this.$api .call(ApiStvStudents.getPerson({ - vorname: this.formData.vorname, - nachname: this.formData.nachname, - gebdatum: this.formData.gebdatum + vorname: this.formData?.vorname, + nachname: this.formData?.nachname, + gebdatum: this.formData?.gebdatum }), { signal: this.abortController.suggestions.signal }) @@ -137,12 +139,12 @@ export default { loadPlaces() { if (this.abortController.places) this.abortController.places.abort(); - if (this.formData.address.nation != 'A' || !this.formData.address.plz) + if (this.formData?.address?.nation != 'A' || !this?.formData?.address?.plz) return; this.abortController.places = new AbortController(); this.$refs.form.call( - ApiStvAddress.getPlaces(this.formData.address.plz) + ApiStvAddress.getPlaces(this.formData?.address.plz) //~ undefined, //~ { //~ signal: this.abortController.places.signal @@ -164,13 +166,13 @@ export default { .call(ApiStudienplan.getStudienplaeneBySemester( this.formDataStg, this.formDataSem, - this.formData.ausbildungssemester, - this.formData.orgform_kurzbz + this.formData?.ausbildungssemester, + this.formData?.orgform_kurzbz )) .then(result => result.data || []) .then(result => { this.studienplaene = result; - if (this.formData.studienplan_id !== '' && !this.studienplaene.filter(plan => plan.studienplan_id == this.formData.studienplan_id).length) + if (this.formData?.studienplan_id !== '' && !this.studienplaene.filter(plan => plan.studienplan_id == this.formData?.studienplan_id).length) this.formData.studienplan_id = ''; }) .catch(error => { @@ -184,10 +186,10 @@ export default { } }, changeAddressNation(e) { - if (this.formData['geburtsnation'] == this.formData['address']['nation']) - this.formData['geburtsnation'] = e.target.value; - if (this.formData['staatsbuergerschaft'] == this.formData['address']['nation']) - this.formData['staatsbuergerschaft'] = e.target.value; + if (this.formData.geburtsnation == this.formData?.address.nation) + this.formData.geburtsnation = e.target.value; + if (this.formData.staatsbuergerschaft == this.formData?.address.nation) + this.formData.staatsbuergerschaft = e.target.value; this.loadPlaces(); }, send(e) { @@ -216,11 +218,23 @@ export default { setPerson(suggestion) { this.person = suggestion; - this.formData.address.func = -1; + this.formData.address.checked = false; + }, + dateFormatter(val) + { + if (!val) + return ''; + let date = new Date(val); + return date.toLocaleDateString('de-AT', { + "day": "2-digit", + "month": "2-digit", + "year": "numeric" + }); } }, created() { this.uuid = _uuid++; + this.reset(); this.$api.call(ApiStudiensemester.getAll()) .then(result => result.data || []) .then(result => { @@ -282,9 +296,17 @@ export default { - -
| {{ $p.t('person', 'nachname') }} | +{{ $p.t('person', 'vorname') }} | +{{ $p.t('person', 'weitereVornamen') }} | +{{ $p.t('person', 'geburtsdatum') }} | +{{ $p.t('person', 'geschlecht') }} | +{{ $p.t('person', 'adresse') }} | +Status | +||
|---|---|---|---|---|---|---|---|---|
| {{suggestion.vorname + ' ' + suggestion.nachname}} | -+ | {{ suggestion.nachname }} | +{{ suggestion.vorname }} | +{{ suggestion.vornamen }} | +{{ dateFormatter(suggestion.gebdatum) }} | +{{ suggestion.geschlecht_bezeichnung }} | +
+
+ {{ (adresse.plz ?? '') + (adresse.plz && adresse.ort ? ' ' : '') + (adresse.ort ?? '') + (adresse.ort && adresse.strasse ? ', ' : '') + (adresse.strasse ?? '') }}
+
+ |
+
+
+ {{ status.status_kurzbz + " " + status.studiengang_kuerzel }}
+
+ |