From 2d61dea28741b155ad4091e85fb64bfe9b3fa4c8 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 5 Jun 2024 16:53:54 +0200 Subject: [PATCH] refactor resources: endpoint betriebsmittel --- .../v1/betriebsmittel/BetriebsmittelP.php | 284 ++++++++++++++++++ .../api/frontend/v1/stv/Betriebsmittel.php | 7 +- .../ressource/Betriebsmittelperson_model.php | 2 +- public/js/api/betriebsmittel.js | 5 + public/js/api/betriebsmittel/person.js | 27 ++ public/js/api/fhcapifactory.js | 4 +- public/js/api/notiz.js | 10 +- .../Betriebsmittel/Betriebsmittel.js | 82 +++-- .../Details/Betriebsmittel.js | 4 +- 9 files changed, 364 insertions(+), 61 deletions(-) create mode 100644 application/controllers/api/frontend/v1/betriebsmittel/BetriebsmittelP.php create mode 100644 public/js/api/betriebsmittel.js create mode 100644 public/js/api/betriebsmittel/person.js diff --git a/application/controllers/api/frontend/v1/betriebsmittel/BetriebsmittelP.php b/application/controllers/api/frontend/v1/betriebsmittel/BetriebsmittelP.php new file mode 100644 index 000000000..8a6d7e340 --- /dev/null +++ b/application/controllers/api/frontend/v1/betriebsmittel/BetriebsmittelP.php @@ -0,0 +1,284 @@ + ['admin:r', 'assistenz:r'], + 'addNewBetriebsmittel' => ['admin:r', 'assistenz:r'], + 'updateBetriebsmittel' => ['admin:r', 'assistenz:r'], + 'loadBetriebsmittel' => ['admin:r', 'assistenz:r'], + 'deleteBetriebsmittel' => ['admin:r', 'assistenz:r'], + 'getTypenBetriebsmittel' => ['admin:r', 'assistenz:r'], + 'loadInventarliste' => ['admin:r', 'assistenz:r'] + ]); + + //Load Models + $this->load->model('ressource/Betriebsmittel_model', 'BetriebsmittelModel'); + $this->load->model('ressource/Betriebsmittelperson_model', 'BetriebsmittelpersonModel'); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + $this->load->library('form_validation'); + + // Load language phrases + $this->loadPhrases([ + 'ui', + 'wawi' + ]); + } + + public function getAllBetriebsmittel($type_id, $id) + { + $result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($id, $type_id); + + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + $this->terminateWithSuccess((getData($result) ?: [])); + } + + public function addNewBetriebsmittel($person_id) + { + $this->form_validation->set_rules('kaution', 'Kaution', 'numeric', [ + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Kaution']) + ]); + + $this->form_validation->set_rules('betriebsmitteltyp', 'TYP', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ']) + ]); + + $this->form_validation->set_rules('ausgegebenam', 'Ausgegeben am', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausgegeben am']) + ]); + + if ($this->form_validation->run() == false) { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + + $uid_user = getAuthUID(); + $betriebsmitteltyp = $this->input->post('betriebsmitteltyp'); + $nummer = $this->input->post('nummer'); + $nummer2 = $this->input->post('nummer2'); + $inventarData = $this->input->post('inventarData'); + $beschreibung = $this->input->post('beschreibung'); + $kaution = $this->input->post('kaution'); + $anmerkung = $this->input->post('anmerkung'); + $ausgegebenam = $this->input->post('ausgegebenam'); + $retouram = $this->input->post('retouram'); + $uid = $this->input->post('uid'); + + if ($inventarData) { + $betriebsmitteltyp = $inventarData['betriebsmitteltyp']; + $betriebsmittel_id = $inventarData['betriebsmittel_id']; + } + + if ($betriebsmitteltyp == 'Zutrittskarte' && !$nummer) { + return $this->terminateWithError($this->p->t('wawi', 'error_zutrittskarteOhneNummer'), self::ERROR_TYPE_GENERAL); + } + + if ($retouram && $retouram < $ausgegebenam) { + return $this->terminateWithError($this->p->t('wawi', 'error_retourdatumVorAusgabe'), self::ERROR_TYPE_GENERAL); + } + + if ($betriebsmitteltyp == "Inventar" && !($inventarData['inventarnummer'])) { + return $this->terminateWithError($this->p->t('wawi', 'error_inventarWaehlen'), self::ERROR_TYPE_GENERAL); + } + + // Start DB transaction + $this->db->trans_begin(); + + $betriebsmitteltyp = utf8_decode($betriebsmitteltyp); + + if (!$inventarData) { + $result = $this->BetriebsmittelModel->insert( + [ + 'betriebsmitteltyp' => $betriebsmitteltyp, + 'nummer' => $nummer, + 'nummer2' => $nummer2, + 'beschreibung' => $beschreibung, + 'anmerkung' => $anmerkung, + 'insertvon' => $uid_user, + 'insertamum' => date('c') + ] + ); + if ($this->db->trans_status() === false || isError($result)) { + $this->db->trans_rollback(); + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $betriebsmittel_id = $result->retval; + } + + $result = $this->BetriebsmittelpersonModel->insert( + [ + 'betriebsmittel_id' => $betriebsmittel_id, + 'person_id' => $person_id, + 'kaution' => $kaution, + 'anmerkung' => $anmerkung, + 'ausgegebenam' => $ausgegebenam, + 'retouram ' => $retouram, + 'insertvon' => $uid_user, + 'insertamum' => date('c'), + 'uid' => $uid + ] + ); + + if ($this->db->trans_status() === false || isError($result)) { + $this->db->trans_rollback(); + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + $this->db->trans_commit(); + return $this->terminateWithSuccess(true); + } + + public function updateBetriebsmittel($betriebsmittelperson_id) + { + $uid_user = getAuthUID(); + $betriebsmittel_id = $this->input->post('betriebsmittel_id'); + $betriebsmitteltyp = $this->input->post('betriebsmitteltyp'); + $nummer = $this->input->post('nummer'); + $nummer2 = $this->input->post('nummer2'); + $beschreibung = $this->input->post('beschreibung'); + $kaution = $this->input->post('kaution'); + $anmerkung = $this->input->post('anmerkung'); + $ausgegebenam = $this->input->post('ausgegebenam'); + $retouram = $this->input->post('retouram'); + $person_id = $this->input->post('person_id'); + $uid = $this->input->post('uid'); + + $this->form_validation->set_rules('kaution', 'Kaution', 'numeric', [ + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Kaution']) + ]); + + $this->form_validation->set_rules('betriebsmitteltyp', 'TYP', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ']) + ]); + + $this->form_validation->set_rules('ausgegebenam', 'Ausgegeben am', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausgegeben am']) + ]); + + + if ($this->form_validation->run() == false) { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + + if ($betriebsmitteltyp == 'Zutrittskarte' && !$nummer) { + return $this->terminateWithError($this->p->t('wawi', 'error_zutrittskarteOhneNummer'), self::ERROR_TYPE_GENERAL); + } + + if ($retouram && $retouram < $ausgegebenam) { + return $this->terminateWithError($this->p->t('wawi', 'error_retourdatumVorAusgabe'), self::ERROR_TYPE_GENERAL); + } + + + // Start DB transaction + $this->db->trans_begin(); + + $result = $this->BetriebsmittelpersonModel->update( + [ + 'betriebsmittelperson_id' => $betriebsmittelperson_id, + + ], + [ + 'person_id' => $person_id, + 'uid' => $uid, + 'kaution' => $kaution, + 'anmerkung' => $anmerkung, + 'ausgegebenam' => $ausgegebenam, + 'retouram ' => $retouram, + 'updatevon' => $uid_user, + 'updateamum' => date('c') + ] + ); + + if ($this->db->trans_status() === false || isError($result)) { + $this->db->trans_rollback(); + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + $result = $this->BetriebsmittelModel->update( + [ + 'betriebsmittel_id' => $betriebsmittel_id + ], + [ + 'betriebsmitteltyp' => $betriebsmitteltyp, + 'nummer' => $nummer, + 'nummer2' => $nummer2, + 'beschreibung' => $beschreibung, + 'anmerkung' => $anmerkung, + 'updatevon' => $uid_user, + 'updateamum' => date('c') + ] + ); + if ($this->db->trans_status() === false || isError($result)) { + $this->db->trans_rollback(); + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + $this->db->trans_commit(); + return $this->terminateWithSuccess(true); + } + + public function loadBetriebsmittel($betriebsmittelperson_id) + { + $result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($betriebsmittelperson_id, 'betriebsmittelperson_id'); + + if (isError($result)) { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + + if (!hasData($result)) { + $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Betriebsmittelperson_id']), self::ERROR_TYPE_GENERAL); + } + + $this->terminateWithSuccess(current(getData($result))); + } + + public function deleteBetriebsmittel($betriebsmittelperson_id) + { + $result = $this->BetriebsmittelpersonModel->delete( + array('betriebsmittelperson_id' => $betriebsmittelperson_id, + ) + ); + + if (isError($result)) { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + if (!hasData($result)) { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Betriebsmittelperson_id']), self::ERROR_TYPE_GENERAL); + } + return $this->outputJsonSuccess(current(getData($result))); + } + + public function getTypenBetriebsmittel() + { + $this->load->model('ressource/Betriebsmitteltyp_model', 'BetriebsmitteltypModel'); + + $this->BetriebsmitteltypModel->addOrder('beschreibung', 'ASC'); + $result = $this->BetriebsmitteltypModel->load(); // load All + + if (isError($result)) { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess(getData($result) ?: []); + } + + public function loadInventarliste($searchString) + { + $result = $this->BetriebsmittelModel->loadInventarliste($searchString); + if (isError($result)) { + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess($result ?: []); + } +} + + diff --git a/application/controllers/api/frontend/v1/stv/Betriebsmittel.php b/application/controllers/api/frontend/v1/stv/Betriebsmittel.php index dbf11f90b..a58b56478 100644 --- a/application/controllers/api/frontend/v1/stv/Betriebsmittel.php +++ b/application/controllers/api/frontend/v1/stv/Betriebsmittel.php @@ -33,13 +33,10 @@ class Betriebsmittel extends FHCAPI_Controller ]); } - public function getAllBetriebsmittel($uid, $person_id) + public function getAllBetriebsmittel($type_id, $id) { - //uid - //$result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($uid, 'uid'); - //person_id - $result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($person_id, 'person'); + $result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($id, $type_id); if (isError($result)) { diff --git a/application/models/ressource/Betriebsmittelperson_model.php b/application/models/ressource/Betriebsmittelperson_model.php index bffa82501..75609759b 100644 --- a/application/models/ressource/Betriebsmittelperson_model.php +++ b/application/models/ressource/Betriebsmittelperson_model.php @@ -100,7 +100,7 @@ class Betriebsmittelperson_model extends DB_Model public function getBetriebsmittelData($id, $type_id) { switch ($type_id) { - case 'person': + case 'person_id': $cond = 'bmp.person_id'; break; case 'uid': diff --git a/public/js/api/betriebsmittel.js b/public/js/api/betriebsmittel.js new file mode 100644 index 000000000..bd088b195 --- /dev/null +++ b/public/js/api/betriebsmittel.js @@ -0,0 +1,5 @@ +import person from "./betriebsmittel/person.js"; + +export default { + person +} \ No newline at end of file diff --git a/public/js/api/betriebsmittel/person.js b/public/js/api/betriebsmittel/person.js new file mode 100644 index 000000000..13138de55 --- /dev/null +++ b/public/js/api/betriebsmittel/person.js @@ -0,0 +1,27 @@ +export default { + getAllBetriebsmittel(url, config, params){ + return this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id); + }, + addNewBetriebsmittel(person_id, formData) { + return this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' + + person_id, formData + ); + }, + loadBetriebsmittel(betriebsmittelperson_id){ + return this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id); + }, + updateBetriebsmittel(betriebsmittelperson_id, formData) { + return this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id, + formData); + }, + deleteBetriebsmittel(betriebsmittelperson_id){ + return this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' + betriebsmittelperson_id); + }, + getTypenBetriebsmittel(){ + return this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/'); + }, + loadInventarliste(query){ + console.log(query); + return this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' + query); + } +} \ No newline at end of file diff --git a/public/js/api/fhcapifactory.js b/public/js/api/fhcapifactory.js index 835c74998..655bfa409 100644 --- a/public/js/api/fhcapifactory.js +++ b/public/js/api/fhcapifactory.js @@ -22,6 +22,7 @@ import filter from "./filter.js"; import studstatus from "./studstatus.js"; import stv from "./stv.js"; import notiz from "./notiz.js"; +import betriebsmittel from "./betriebsmittel.js"; export default { search, @@ -30,5 +31,6 @@ export default { filter, studstatus, stv, - notiz + notiz, + betriebsmittel }; diff --git a/public/js/api/notiz.js b/public/js/api/notiz.js index fbab63ef5..0a1034703 100644 --- a/public/js/api/notiz.js +++ b/public/js/api/notiz.js @@ -1,13 +1,5 @@ -//TODO(Manu) refactor with require or async! -//sonst Error wenn extension file nicht vorhanden - import person from "./notiz/person.js"; -//import softwarenotiz from "../../extensions/FHC-Core-Softwarebereitstellung/js/api/softwarenotiz.js"; -//import pppnotiz from "../../extensions/FHC-Core-PEP/js/api/pppnotiz.js"; - export default { - person, -// softwarenotiz, -// pppnotiz + person } \ No newline at end of file diff --git a/public/js/components/Betriebsmittel/Betriebsmittel.js b/public/js/components/Betriebsmittel/Betriebsmittel.js index 6a9e3efa7..e7f09b26a 100644 --- a/public/js/components/Betriebsmittel/Betriebsmittel.js +++ b/public/js/components/Betriebsmittel/Betriebsmittel.js @@ -20,15 +20,30 @@ export default { from: 'cisRoot' }, }, - props: [ - 'person_id', - 'uid' - ], + props: { + endpoint: { + type: Object, + required: true + }, + typeId: String, + id: { + type: [Number, String], + required: true + }, + uid: { + type: [Number, String], + required: true + } + }, data() { return { tabulatorOptions: { - ajaxURL: 'api/frontend/v1/stv/Betriebsmittel/getAllBetriebsmittel/' + this.uid + '/' + this.person_id, - ajaxRequestFunc: this.$fhcApi.get, + ajaxURL: 'dummy', + ajaxRequestFunc: this.endpoint.getAllBetriebsmittel, + ajaxParams: { + type: this.typeId, + id: this.id + }, ajaxResponse: (url, params, response) => response.data, columns: [ {title: "Nummer", field: "nummer"}, @@ -139,7 +154,7 @@ export default { }, watch: { uid() { - this.$refs.table.tabulator.setData('api/frontend/v1/stv/Betriebsmittel/getAllBetriebsmittel/' + this.uid + '/' + this.person_id); + this.$refs.table.tabulator.setData(this.endpoint.getAllBetriebsmittel + '/' + this.typeId + '/' + this.id); } }, methods: { @@ -159,28 +174,20 @@ export default { }); }, addNewBetriebsmittel() { - this.param = { - 'uid': this.uid, - 'person_id': this.person_id, - ...this.formData - }; - this.$fhcApi.post('api/frontend/v1/stv/betriebsmittel/addNewBetriebsmittel/', - this.param - ).then(response => { - this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); - this.resetModal(); - }).catch(this.$fhcAlert.handleSystemError) + //just append uid to formdata + this.formData.uid = this.uid; + return this.endpoint.addNewBetriebsmittel(this.id, this.formData) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.resetModal(); + }).catch(this.$fhcAlert.handleSystemError) .finally(() => { window.scrollTo(0, 0); this.reload(); }); }, deleteBetriebsmittel(betriebsmittelperson_id) { - this.param = { - 'betriebsmittelperson_id': betriebsmittelperson_id - }; - return this.$fhcApi.post('api/frontend/v1/stv/betriebsmittel/deleteBetriebsmittel/', - this.param) + return this.endpoint.deleteBetriebsmittel(betriebsmittelperson_id) .then( result => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); @@ -193,15 +200,10 @@ export default { this.reload(); }); }, - updateBetriebsmittel() { - this.param = { - 'uid': this.uid, - 'person_id': this.person_id, - ...this.formData - }; - this.$fhcApi.post('api/frontend/v1/stv/betriebsmittel/updateBetriebsmittel/', - this.param - ).then(response => { + updateBetriebsmittel(betriebsmittelperson_id) { + this.formData.uid = this.uid; + return this.endpoint.updateBetriebsmittel(betriebsmittelperson_id, this.formData) + .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.resetModal(); }).catch(this.$fhcAlert.handleSystemError) @@ -213,11 +215,7 @@ export default { loadBetriebsmittel(betriebsmittelperson_id) { this.resetModal(); this.statusNew = false; - this.param = { - 'betriebsmittelperson_id': betriebsmittelperson_id - }; - return this.$fhcApi.post('api/frontend/v1/stv/betriebsmittel/loadBetriebsmittel/', - this.param) + return this.endpoint.loadBetriebsmittel(betriebsmittelperson_id) .then(result => result.data) .then(result => { this.formData = result; @@ -226,8 +224,7 @@ export default { }, searchInventar(event) { const encodedQuery = encodeURIComponent(event.query); - return this.$fhcApi - .get('api/frontend/v1/stv/betriebsmittel/loadInventarliste/' + encodedQuery) + return this.endpoint.loadInventarliste(encodedQuery) .then(result => { this.filteredInventar = result.data.retval; }); @@ -257,8 +254,7 @@ export default { } }, created(){ - this.$fhcApi - .get('api/frontend/v1/stv/betriebsmittel/getTypenBetriebsmittel') + return this.endpoint.getTypenBetriebsmittel() .then(result => result.data) .then(result => { this.listBetriebsmitteltyp = result; @@ -300,8 +296,6 @@ export default { - - Details @@ -445,7 +439,7 @@ export default {
- +
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Betriebsmittel.js b/public/js/components/Stv/Studentenverwaltung/Details/Betriebsmittel.js index fbee3dda3..9d2970a54 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Betriebsmittel.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Betriebsmittel.js @@ -10,8 +10,10 @@ export default { template: `