diff --git a/application/controllers/api/frontend/v1/stv/Betriebsmittel.php b/application/controllers/api/frontend/v1/stv/Betriebsmittel.php index fb7464148..ca1bfab1d 100644 --- a/application/controllers/api/frontend/v1/stv/Betriebsmittel.php +++ b/application/controllers/api/frontend/v1/stv/Betriebsmittel.php @@ -14,7 +14,8 @@ class Betriebsmittel extends FHCAPI_Controller 'updateBetriebsmittel' => ['admin:r', 'assistenz:r'], 'loadBetriebsmittel' => ['admin:r', 'assistenz:r'], 'deleteBetriebsmittel' => ['admin:r', 'assistenz:r'], - 'getTypenBetriebsmittel' => ['admin:r', 'assistenz:r'] + 'getTypenBetriebsmittel' => ['admin:r', 'assistenz:r'], + 'loadInventarliste' => ['admin:r', 'assistenz:r'] ]); //Load Models @@ -34,17 +35,16 @@ class Betriebsmittel extends FHCAPI_Controller public function getAllBetriebsmittel($uid, $person_id) { //uid - //$result = $this->BetriebsmittelpersonModel->getBetriebsmittelByUid($uid); + //$result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($uid, 'uid'); //person_id - $result = $this->BetriebsmittelpersonModel->getBetriebsmittel($person_id); + $result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($person_id, 'person'); if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } - //all $this->terminateWithSuccess((getData($result) ?: [])); } @@ -61,10 +61,29 @@ class Betriebsmittel extends FHCAPI_Controller $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); + $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'); @@ -73,26 +92,46 @@ class Betriebsmittel extends FHCAPI_Controller $person_id = $this->input->post('person_id'); $uid = $this->input->post('uid'); + if($inventarData) + { + $betriebsmitteltyp = $inventarData['betriebsmitteltyp']; + $betriebsmittel_id = $inventarData['betriebsmittel_id']; + } + + if($betriebsmitteltyp == 'Zutrittskarte' && !$nummer) + { + return $this->terminateWithError("Eine Zutrittskarte muss eine Nummer haben. Um die Zuordnung zu dieser Karte zu loeschen entfernen Sie bitte den ganzen Datensatz", self::ERROR_TYPE_GENERAL); + } + + if($retouram && $retouram < $ausgegebenam) + return $this->terminateWithError("Retourdatum darf nicht vor Datum der Ausgabe liegen", self::ERROR_TYPE_GENERAL); + + if($betriebsmitteltyp == "Inventar" && !($inventarData['inventarnummer'])) + return $this->terminateWithError("Bitte wählen Sie das entsprechende Inventar aus dem Drop Down Menü aus", self::ERROR_TYPE_GENERAL); + // Start DB transaction $this->db->trans_begin(); - $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)) + if(!$inventarData) { - $this->db->trans_rollback(); - return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + $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; } - $betriebsmittel_id = $result->retval; $result = $this->BetriebsmittelpersonModel->insert( [ @@ -147,6 +186,33 @@ class Betriebsmittel extends FHCAPI_Controller $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("Eine Zutrittskarte muss eine Nummer haben. Um die Zuordnung zu dieser Karte zu loeschen entfernen Sie bitte den ganzen Datensatz", self::ERROR_TYPE_GENERAL); + } + + if($retouram && $retouram < $ausgegebenam) + return $this->terminateWithError("Retourdatum darf nicht vor Datum der Ausgabe liegen", self::ERROR_TYPE_GENERAL); + + // Start DB transaction $this->db->trans_begin(); @@ -162,8 +228,8 @@ class Betriebsmittel extends FHCAPI_Controller 'anmerkung' => $anmerkung, 'ausgegebenam' => $ausgegebenam, 'retouram ' => $retouram, - 'insertvon' => $uid_user, - 'insertamum' => date('c') + 'updatevon' => $uid_user, + 'updateamum' => date('c') ] ); @@ -199,35 +265,13 @@ class Betriebsmittel extends FHCAPI_Controller } - //TODO(Manu) defaultmässig ersten Eintrag in Edit Modus - public function getFirstBetriebsmittel($uid, $person_id) - { - //uid - //$result = $this->BetriebsmittelpersonModel->getFirstBetriebsmittelByUid($uid); - - //person_id - $result = $this->BetriebsmittelpersonModel->getFirstBetriebsmittelByUid($person_id); - - if (isError($result)) - { - $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); - } - - $this->terminateWithSuccess((getData($result) ?: [])); - } - public function loadBetriebsmittel() { $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); $betriebsmittelperson_id = $this->input->post('betriebsmittelperson_id'); - //$this->terminateWithError("id in function api: " . $betriebsmittelperson_id, self::ERROR_TYPE_GENERAL); - - $this->BetriebsmittelpersonModel->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id'); - - $result = $this->BetriebsmittelpersonModel->loadWhere( - array('betriebsmittelperson_id' => $betriebsmittelperson_id)); + $result = $this->BetriebsmittelpersonModel->getBetriebsmittelData($betriebsmittelperson_id, 'betriebsmittelperson_id'); if (isError($result)) { @@ -239,23 +283,17 @@ class Betriebsmittel extends FHCAPI_Controller $this->terminateWithError("no Betriebsmittelperson with ID found: " . $betriebsmittelperson_id, self::ERROR_TYPE_GENERAL); } - // var_dump($result); - $this->terminateWithSuccess(current(getData($result))); } public function deleteBetriebsmittel() { - //var_dump($betriebsmittelperson_id); $_POST = json_decode(utf8_encode($this->input->raw_input_stream), true); $betriebsmittelperson_id = $this->input->post('betriebsmittelperson_id'); - //return $this->terminateWithError("Betriebsmittelperson " . $betriebsmittelperson_id . " wird gelöscht",self::ERROR_TYPE_GENERAL); - - $result = $this->BetriebsmittelpersonModel->delete( array('betriebsmittelperson_id' => $betriebsmittelperson_id, ) @@ -277,7 +315,9 @@ class Betriebsmittel extends FHCAPI_Controller { $this->load->model('ressource/Betriebsmitteltyp_model', 'BetriebsmitteltypModel'); - $result = $this->BetriebsmitteltypModel->load(); + $this->BetriebsmitteltypModel->addOrder('beschreibung', 'ASC'); + $result = $this->BetriebsmitteltypModel->load(); // load All + if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); @@ -285,6 +325,14 @@ class Betriebsmittel extends FHCAPI_Controller 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/models/ressource/Betriebsmittel_model.php b/application/models/ressource/Betriebsmittel_model.php index a3a6e252f..69aa962c1 100644 --- a/application/models/ressource/Betriebsmittel_model.php +++ b/application/models/ressource/Betriebsmittel_model.php @@ -13,17 +13,22 @@ class Betriebsmittel_model extends DB_Model } /** - * getBetriebsmittelById + * load Liste Inventarnummern */ -/* public function loadBetriebsmittel($betriebsmittelperson_id){ - $query = " - SELECT * - FROM wawi.tbl_betriebsmittelperson - JOIN wawi.tbl_betriebsmittel ON (wawi.tbl_betriebsmittelperson.betriebsmittel_id = wawi.tbl_betriebsmittel.betriebsmittel_id) - WHERE wawi.tbl_betriebsmittelperson.betriebsmittelperson_id = ? - "; + public function loadInventarliste($filter) + { + $filter = strtoLower($filter); - return $this->execQuery($query, array($betriebsmittelperson_id)); - }*/ + $qry = " + SELECT + bm.inventarnummer, bm.betriebsmitteltyp, bm.betriebsmittel_id, CONCAT(bm.inventarnummer, ' ', bm.beschreibung) as dropdowntext + FROM + wawi.tbl_betriebsmittel bm + WHERE + upper(bm.inventarnummer) LIKE '%" .$this->db->escape_like_str($filter)."%' + OR + lower(bm.inventarnummer) LIKE '%" .$this->db->escape_like_str($filter)."%'"; + return $this->execQuery($qry); + } } diff --git a/application/models/ressource/Betriebsmittelperson_model.php b/application/models/ressource/Betriebsmittelperson_model.php index 04878a9ad..17aab3bc7 100644 --- a/application/models/ressource/Betriebsmittelperson_model.php +++ b/application/models/ressource/Betriebsmittelperson_model.php @@ -96,4 +96,33 @@ class Betriebsmittelperson_model extends DB_Model return $this->loadWhere($condition); } + + public function getBetriebsmittelData($id, $type_id) + { + switch ($type_id) { + case 'person': + $cond = 'bmp.person_id'; + break; + case 'uid': + $cond = 'bmp.uid'; + break; + case 'betriebsmittelperson_id': + $cond = 'bmp.betriebsmittelperson_id'; + break; + default: + return error("ID nicht gültig"); + } + + $query = " + SELECT + bm.nummer, bmp.person_id, bm.betriebsmitteltyp, bmp.anmerkung as anmerkung, bmp.retouram, bm.beschreibung, bmp.ausgegebenam, bmp.uid, bmp.kaution, bm.betriebsmittel_id, bmp.betriebsmittelperson_id, bm.inventarnummer --bm.* + FROM + wawi.tbl_betriebsmittelperson bmp + JOIN + wawi.tbl_betriebsmittel bm ON (bmp.betriebsmittel_id = bm.betriebsmittel_id) + WHERE + " . $cond . " = ? "; + + return $this->execQuery($query, array($id)); + } } diff --git a/public/js/components/Betriebsmittel/Betriebsmittel.js b/public/js/components/Betriebsmittel/Betriebsmittel.js index f7e036425..2dce84e10 100644 --- a/public/js/components/Betriebsmittel/Betriebsmittel.js +++ b/public/js/components/Betriebsmittel/Betriebsmittel.js @@ -1,5 +1,7 @@ import VueDatePicker from '../vueDatepicker.js.php'; import {CoreFilterCmpt} from "../filter/Filter.js"; +import PvAutoComplete from "../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js"; + import BsModal from "../Bootstrap/Modal"; import FormForm from '../Form/Form.js'; import FormInput from '../Form/Input.js'; @@ -11,6 +13,7 @@ export default { BsModal, FormForm, FormInput, + PvAutoComplete }, inject: { cisRoot: { @@ -31,13 +34,10 @@ export default { {title: "Nummer", field: "nummer"}, {title: "PersonId", field: "person_id"}, {title: "Typ", field: "betriebsmitteltyp"}, - // {title: "insertVon", field: "insertvon"}, //Test - // {title: "insertAmUm", field: "insertamum"}, //TESt - // {title: "Betriebsmittelperson_id", field: "betriebsmittelperson_id"}, + {title: "Anmerkung", field: "anmerkung", visible: false}, {title: "Retourdatum", field: "retouram"}, {title: "Beschreibung", field: "beschreibung"}, {title: "Uid", field: "uid"}, - {title: "Anmerkung", field: "anmerkung", visible: false}, {title: "Kaution", field: "kaution", visible: false}, {title: "Ausgabedatum", field: "ausgegebenam", visible: false}, {title: "Betriebsmittel_id", field: "betriebsmittel_id", visible: false}, @@ -97,79 +97,31 @@ export default { selectableRangeMode: 'click', selectable: true }, - //tableData: [], - tabulatorEvents: [ - { -/* //TODO Manu phrases - }*/ - - //TODO(manu)für editieren mit click: conflict with action buttons - -/* event: 'rowSelectionChanged', - handler: this.rowSelectionChanged*/ -/* handler: (e, row.getData().betriebsmittelperson_id) => { -// HandlerFunktion, die aufgerufen wird, wenn das Ereignis ausgelöst wird - //this.rowSelectionChanged(row.getData().betriebsmittelperson_id); - // console.log("Selected Row Data:", row.getData()); - //console.log(cell.getData().betriebsmittelperson_id); -*/ - }, - ], + tabulatorEvents: [], betriebsmittelData: {}, betriebsmittelperson_id : null, listBetriebsmitteltyp: [], formData: { ausgegebenam : this.getDefaultDate(), + betriebsmitteltyp: 'Zutrittskarte' }, statusNew: true, - changesDetected: false - }; - }, - computed: { - deltaLength() { - return Object.keys(this.formData).length; - } - }, - watch: { - formData: { - handler: function(newVal) { - - //console.log('Das Objekt wurde geändert:', newVal); - this.changesDetected = true; - }, - deep: true // Hiermit wird auch die Veränderung von Eigenschaften des Objekts überwacht + filteredInventar: [] } }, methods: { - rowSelectionChanged(data) { - //console.log("Selected Row Data:", data[0].betriebsmittelperson_id); - this.param_id = { - 'betriebsmittelperson_id': data[0].betriebsmittelperson_id}; - - this.loadBetriebsmittel(this.param_id); - }, actionEditBetriebsmittel(betriebsmittelperson_id){ - console.log("action EditBM: id: " + betriebsmittelperson_id); this.statusNew = false; this.loadBetriebsmittel(betriebsmittelperson_id); - this.changesDetected = false; }, actionNewBetriebsmittel(){ - console.log("action newBM: person " + this.person_id); this.resetModal(); this.statusNew = true; this.formData.ausgegebenam = this.getDefaultDate(); - //this.changesDetected = false; this.reload(); }, actionDeleteBetriebsmittel(betriebsmittelperson_id){ - console.log("Löschen von Datensatz mit id: " + betriebsmittelperson_id); - this.loadBetriebsmittel(betriebsmittelperson_id).then(() => { -/* if(this.formData) { - this.$refs.deleteBetriebsmittelModal.show(); - }*/ - console.log("nach load" + betriebsmittelperson_id); this.$refs.deleteBetriebsmittelModal.show(); }); }, @@ -184,17 +136,14 @@ export default { ).then(response => { console.log(response); this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); - // this.hideModal('newBetriebsmittelModal'); this.resetModal(); }).catch(this.$fhcAlert.handleSystemError) .finally(() => { window.scrollTo(0, 0); this.reload(); }); - //this.changesDetected = false; //not working }, deleteBetriebsmittel(betriebsmittelperson_id){ - console.log("Delete mit id: " + betriebsmittelperson_id); this.param = { 'betriebsmittelperson_id': betriebsmittelperson_id }; @@ -221,7 +170,6 @@ export default { this.$fhcApi.post('api/frontend/v1/stv/betriebsmittel/updateBetriebsmittel/', this.param ).then(response => { - //console.log(response); this.$fhcAlert.alertSuccess(this.$p.t('ui', 'editSave')); // this.hideModal('newBetriebsmittelModal'); this.resetModal(); @@ -232,7 +180,6 @@ export default { }); }, loadBetriebsmittel(betriebsmittelperson_id){ - console.log("loadBetriebsmittel id:" + betriebsmittelperson_id); this.resetModal(); this.statusNew = false; this.param = { @@ -245,11 +192,16 @@ export default { this.formData = result; }) .catch(this.$fhcAlert.handleSystemError); - // this.changesDetected = false; + }, + searchInventar(event){ + return this.$fhcApi + .get('api/frontend/v1/stv/betriebsmittel/loadInventarliste/' + event.query) + .then(result => { + this.filteredInventar = result.data.retval; + }); }, reload(){ this.$refs.table.reloadTable(); - //this.changesDetected = false; }, hideModal(modalRef){ this.$refs[modalRef].hide(); @@ -257,10 +209,15 @@ export default { resetModal(){ this.formData = {}; this.formData.ausgegebenam = this.getDefaultDate(); - this.formData.listBetriebsmitteltyp = null; + this.formData.retouram = null; + this.formData.betriebsmitteltyp = null; + this.formData.nummer = null; + this.formData.nummer2 = null; + this.formData.kaution = null; + this.formData.anmerkung = null; + this.formData.beschreibung = null; this.betriebsmittelperson_id = {}; this.statusNew = true; - //this.changesDetected = false; }, getDefaultDate() { const today = new Date(); @@ -323,7 +280,7 @@ export default {