From 41ff43046486f6ad3484e0156a0bcc15f353765c Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 28 Sep 2023 08:45:54 +0200 Subject: [PATCH] Detailsicht StudentIn, Speichern --- .../controllers/components/stv/Student.php | 163 ++++++++++++++++-- .../controllers/components/stv/Students.php | 3 +- .../Stv/Studentenverwaltung/Details.js | 20 ++- .../Studentenverwaltung/Details/Details.js | 105 +++++++---- 4 files changed, 231 insertions(+), 60 deletions(-) diff --git a/application/controllers/components/stv/Student.php b/application/controllers/components/stv/Student.php index 6268f22e0..2aaf00c9c 100644 --- a/application/controllers/components/stv/Student.php +++ b/application/controllers/components/stv/Student.php @@ -10,28 +10,27 @@ class Student extends FHC_Controller parent::__construct(); } - public function getPerson($person_id) + public function get($prestudent_id) { - $this->load->model('person/Person_model', 'PersonModel'); + // TODO(chris): stdSem from Variable + $studiensemester_kurzbz='SS2023'; - $result = $this->PersonModel->load($person_id); - if (isError($result)) { - $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $this->outputJson(getError($result)); - } elseif (!hasData($result)) { - $this->output->set_status_header(REST_Controller::HTTP_NOT_FOUND); - $this->outputJson('NOT FOUND'); - } else { - $this->outputJson(current(getData($result))); - } - } - - public function getStudent($student_uid) - { - // TODO(chris): this is wrong $this->load->model('crm/Student_model', 'StudentModel'); - $result = $this->StudentModel->load([$student_uid]); + $this->StudentModel->addSelect('p.*'); + $this->StudentModel->addSelect('tbl_student.student_uid'); + $this->StudentModel->addSelect('matrikelnr'); + $this->StudentModel->addSelect('b.aktiv'); + $this->StudentModel->addSelect('v.semester'); + $this->StudentModel->addSelect('v.verband'); + $this->StudentModel->addSelect('v.gruppe'); + $this->StudentModel->addSelect('b.alias'); + + $this->StudentModel->addJoin('public.tbl_benutzer b', 'student_uid = uid'); + $this->StudentModel->addJoin('public.tbl_studentlehrverband v', 'b.uid = v.student_uid AND v.studiensemester_kurzbz = ' . $this->StudentModel->escape($studiensemester_kurzbz), 'LEFT'); + $this->StudentModel->addJoin('public.tbl_person p', 'person_id'); + + $result = $this->StudentModel->loadWhere(['prestudent_id' => $prestudent_id]); if (isError($result)) { $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); $this->outputJson(getError($result)); @@ -90,5 +89,133 @@ class Student extends FHC_Controller } else { $this->outputJson(getData($result) ?: []); } + } + public function save($prestudent_id) + { + // TODO(chris): stdSem from Variable + $studiensemester_kurzbz='SS2023'; + + $this->load->model('person/Person_model', 'PersonModel'); + $this->load->model('crm/Student_model', 'StudentModel'); + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + + $data = json_decode(utf8_encode($this->input->raw_input_stream), true); + + $result = $this->StudentModel->loadWhere(['prestudent_id' =>$prestudent_id]); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } elseif (!hasData($result)) { + $uid = null; + } else { + $student = current(getData($result)); + $uid = $student->student_uid; + } + + $result = $this->PrestudentModel->loadWhere(['prestudent_id' =>$prestudent_id]); + if (isError($result)) { + $this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR); + return $this->outputJson(getError($result)); + } elseif (!hasData($result)) { + $person_id= null; + } else { + $person = current(getData($result)); + $person_id = $person->person_id; + } + + $array_allowed_props = ['verband','semester','gruppe']; + $update = array(); + foreach ($array_allowed_props as $prop) + { + if(isset($data[$prop])){ + $update[$prop] = $data[$prop]; + } + } + //TODO(chris): form validation verband + if (count($update)) + { + if($uid === null) + { + $this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST); + return $this->outputJson("Kein/e StudentIn vorhanden!"); + } + $this->StudentlehrverbandModel->update([ + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'student_uid' => $uid], + $update + ); + } + + $array_allowed_props = [ + 'anrede', + 'bpk', + 'titelpre', + 'titelpost', + 'nachname', + 'vorname', + 'vornamen', + 'wahlname', + 'geburtsdatum', + 'gebort', + 'geburtsnation', + 'svnr', + 'ersatzkennzeichen', + 'staatsbuergerschaft', + 'matr_nr', + 'sprache', + 'geschlecht', + 'familienstand', + 'foto', + 'anmerkung', + 'homepage' + ]; + $update = array(); + foreach ($array_allowed_props as $prop) + { + if(isset($data[$prop])){ + $update[$prop] = $data[$prop]; + } + } + + if (count($update)) + { + if($person_id === null) + { + $this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST); + return $this->outputJson("Keine Person vorhanden!"); + } + $this->PersonModel->update( + $person_id, + $update + ); + } + + + $array_allowed_props = ['matrikelnr']; + $update = array(); + foreach ($array_allowed_props as $prop) + { + if(isset($data[$prop])){ + $update[$prop] = $data[$prop]; + } + } + if (count($update)) + { + if ($uid === null) { + $this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST); + return $this->outputJson("Kein/e StudentIn vorhanden!"); + } + $this->StudentModel->update( + [$uid], + $update + ); + } + + + + + + } } diff --git a/application/controllers/components/stv/Students.php b/application/controllers/components/stv/Students.php index 4d00a1f54..a0394d12e 100644 --- a/application/controllers/components/stv/Students.php +++ b/application/controllers/components/stv/Students.php @@ -283,7 +283,8 @@ class Students extends FHC_Controller $this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid'); $this->PrestudentModel->addJoin( 'public.tbl_studentlehrverband v', - 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz) + 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz), + 'LEFT' ); $this->PrestudentModel->addSelect('p.person_id'); diff --git a/public/js/components/Stv/Studentenverwaltung/Details.js b/public/js/components/Stv/Studentenverwaltung/Details.js index 6072cb3b3..871cfeccb 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details.js @@ -18,13 +18,21 @@ export default { } } }, + computed: { + hasNoStudent() { + return !this.student || (Object.keys(this.student).length === 0 && this.student.constructor === Object); + } + }, template: `
- - +
Bitte StudentIn auswählen!
+
` }; \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Details.js index f6d7d6b40..87cf9ac6e 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Details.js @@ -22,25 +22,30 @@ export default { "v": "verheiratet", "w": "verwitwet" }, - person: null, + data: null, studentIn: null } }, watch: { student(n) { + this.updateStudent(n); + } + }, + methods: { + updateStudent(n) { CoreRESTClient - .get('components/stv/Student/getPerson/' + this.student.person_id) + .get('components/stv/Student/get/' + n.prestudent_id) .then(result => result.data) .then(result => { - this.person = result; - if (!this.person.familienstand) - this.person.familienstand = ''; + this.data = result; + if (!this.data.familienstand) + this.data.familienstand = ''; }) .catch(err => { console.error(err.response.data || err.message); }); - CoreRESTClient - .get('components/stv/Student/getStudent/' + this.student.uid) + /*CoreRESTClient + .get('components/stv/Student/getStudent/' + n.uid) .then(result => result.data) .then(result => { // TODO(chris): IMPLEMENT HERE! @@ -49,7 +54,11 @@ export default { }) .catch(err => { console.error(err.response.data || err.message); - }); + });*/ + }, + save() { + CoreRESTClient + .post('components/stv/Student/save/' + this.student.prestudent_id, this.data) } }, created() { @@ -77,68 +86,71 @@ export default { .catch(err => { console.error(err.response.data || err.message); }); + this.updateStudent(this.student); }, + //TODO(chris): Felder student_uid, person_id sperren, Personenkz + //TODO(chris): Logik Feld Zugangscode template: `
Person -