diff --git a/application/controllers/api/frontend/v1/vertraege/Vertraege.php b/application/controllers/api/frontend/v1/vertraege/Vertraege.php index 2efe82614..9d38ed27f 100644 --- a/application/controllers/api/frontend/v1/vertraege/Vertraege.php +++ b/application/controllers/api/frontend/v1/vertraege/Vertraege.php @@ -20,7 +20,9 @@ class Vertraege extends FHCAPI_Controller 'addNewContract' => ['admin:r', 'assistenz:r'], 'deleteContract' => ['admin:r', 'assistenz:r'], 'insertContractStatus' => ['admin:r', 'assistenz:r'], + 'loadContractStatus' => ['admin:r', 'assistenz:r'], 'deleteContractStatus' => ['admin:r', 'assistenz:r'], + 'updateContractStatus' => ['admin:r', 'assistenz:r'], ]); //Load Models @@ -30,6 +32,7 @@ class Vertraege extends FHCAPI_Controller $this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel'); } + //TODO(Manu) validations, phrases public function getAllVertraege($person_id) { $result = $this->VertragModel->loadContractsOfPerson($person_id); @@ -37,7 +40,6 @@ class Vertraege extends FHCAPI_Controller if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } - $this->terminateWithSuccess((getData($result) ?: [])); } @@ -48,7 +50,6 @@ class Vertraege extends FHCAPI_Controller if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } - $this->terminateWithSuccess((getData($result) ?: [])); } @@ -59,7 +60,6 @@ class Vertraege extends FHCAPI_Controller if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } - $this->terminateWithSuccess((getData($result) ?: [])); } @@ -70,7 +70,6 @@ class Vertraege extends FHCAPI_Controller if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } - $this->terminateWithSuccess((getData($result) ?: [])); } @@ -86,7 +85,6 @@ class Vertraege extends FHCAPI_Controller public function getAllContractStati() { - //TODO(MANUU) $result = $this->VertragsstatusModel->load(); if (isError($result)) { @@ -124,7 +122,6 @@ class Vertraege extends FHCAPI_Controller 'insertvon' => getAuthUID() ]); - //add entry with status neu in lehre.tbl_vertrag_vertragsstatus //TODO(Manu) validation, dass status nicht schon bereits vorhanden $status_result = $this->VertragvertragsstatusModel->insert([ 'vertrag_id' => $result->retval, @@ -232,7 +229,7 @@ class Vertraege extends FHCAPI_Controller if (!hasData($result)) { return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Vertrag_id']), self::ERROR_TYPE_GENERAL); } - return $this->outputJsonSuccess(current(getData($result))); + return $this->terminateWithSuccess(current(getData($result))); } public function insertContractStatus ($vertrag_id, $datum, $status){ @@ -261,11 +258,11 @@ class Vertraege extends FHCAPI_Controller $this->terminateWithError('Fehler beim Hinzufügen des Vertragsstatus.'); } - return $this->outputJsonSuccess(current(getData($status_result))); + return $this->terminateWithSuccess(current(getData($status_result))); } public function deleteContractStatus($vertrag_id, $status){ - //return $this->terminateWithError($vertrag_id . " - " . $status, self::ERROR_TYPE_GENERAL); + $result = $this->VertragvertragsstatusModel->delete( array( 'vertrag_id' => $vertrag_id, @@ -279,6 +276,50 @@ class Vertraege extends FHCAPI_Controller if (!hasData($result)) { return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'vertragsstatus_kurzb']), self::ERROR_TYPE_GENERAL); } - return $this->outputJsonSuccess(current(getData($result))); + return $this->terminateWithSuccess(current(getData($result))); + } + + public function loadContractStatus ($vertrag_id, $status){ + + $result = $this->VertragvertragsstatusModel->loadWhere( + array( + 'vertrag_id' => $vertrag_id, + 'vertragsstatus_kurzbz' => $status + ) + ); + if (!$result) { + $this->terminateWithError('Status not existing'); + } + return $this->terminateWithSuccess(current(getData($result))); + } + + public function updateContractStatus ($vertrag_id, $datum, $status){ +/* $result = $this->VertragvertragsstatusModel->loadWhere( + array( + 'vertrag_id' => $vertrag_id, + 'vertragsstatus_kurzbz' => $status + ) + ); + + if (hasData($result)) { + $this->terminateWithError("status bereits vorhanden", self::ERROR_TYPE_GENERAL); + // $this->terminateWithError($this->p->t('ui', 'error_status_existing', ['id' => 'Vertrag_id']), self::ERROR_TYPE_GENERAL); + }*/ + + $status_result = $this->VertragvertragsstatusModel->update([ + 'vertrag_id' => $vertrag_id, + 'vertragsstatus_kurzbz' => $status], + [ + 'uid' => getAuthUID(), + 'updateamum' => date('c'), + 'updatevon' => getAuthUID(), + 'datum' => $datum + ]); + + if (!$status_result) { + $this->terminateWithError('Fehler beim Updaten des Vertragsstatus.'); + } + + return $this->terminateWithSuccess(current(getData($status_result))); } } \ No newline at end of file diff --git a/public/js/api/vertraege/person.js b/public/js/api/vertraege/person.js index b9529a6bb..c682342df 100644 --- a/public/js/api/vertraege/person.js +++ b/public/js/api/vertraege/person.js @@ -36,11 +36,17 @@ export default { deleteContract(vertrag_id){ return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id); }, + loadContractStatus(params){ + return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + Object.values(params.vertrag_id).join('/') + '/' + Object.values(params.status).join('/')); + }, insertContractStatus(params) { return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id + '/' + params.datum + '/' + Object.values(params.status).join('/')); }, + updateContractStatus(params) { + console.log("API", params.vertrag_id, params.status, params.datum); + return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id + '/' + params.datum + '/' + Object.values(params.status).join('/')); + }, deleteContractStatus(params) { - console.log("API", params.vertrag_id, params.status); return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + Object.values(params.vertrag_id).join('/') + '/' + Object.values(params.status).join('/')); } } \ No newline at end of file diff --git a/public/js/components/Vertraege/List/Status.js b/public/js/components/Vertraege/List/Status.js index 495d5ed97..24aac571f 100644 --- a/public/js/components/Vertraege/List/Status.js +++ b/public/js/components/Vertraege/List/Status.js @@ -20,6 +20,10 @@ export default { type: Array, required: true }, + formDataParent: { + type: Object, + required: true + } }, data() { return { @@ -53,6 +57,17 @@ export default { let button = document.createElement('button'); button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = 'Status bearbeiten'; + button.addEventListener( + 'click', + (event) => + this.actionEditStatus(cell.getData().vertrag_id, cell.getData().vertragsstatus_kurzbz) + ); + container.append(button); + + button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; button.innerHTML = ''; button.title = 'Status löschen'; button.addEventListener( @@ -75,7 +90,8 @@ export default { selectable: true, }, clickedRows: [], - formContractData: { + statusNew: true, + formData: { vertragsstatus_kurzbz: null, datum: new Date() }, @@ -84,34 +100,64 @@ export default { watch: { vertrag_id() { this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + this.vertrag_id); + }, + formDataParent: { + handler(newVal, oldVal) { + this.formData = this.formDataParent; + }, + deep: true } }, methods: { actionNewStatus() { - console.log("actionNewStatus"); + this.resetModal(); this.$refs.contractStatus.show(); }, + actionEditStatus(vertrag_id, status) { + this.statusNew = false; + this.$emit('loadContractStatus', { + status: status, + vertrag_id: vertrag_id + }); + }, actionDeleteStatus(vertrag_id, status) { - console.log("action: deleteStatus " + status + " from Vertrag" + vertrag_id); this.$emit('deleteContractStatus', { status: status, vertrag_id: vertrag_id }); }, - handleSubmit(){ - this.$emit('setContractStatus', { - status: this.formContractData.vertragsstatus_kurzbz, - datum: this.formContractData.datum - }); + handleSubmit(action){ + if (action == 'new') { + this.$emit('setContractStatus', { + status: this.formData.vertragsstatus_kurzbz, + datum: this.formData.datum + }); + } + if (action == 'edit') { + this.$emit('updateContractStatus', { + status: this.formData.vertragsstatus_kurzbz, + datum: this.formData.datum + }); + } }, closeModal(){ this.$refs.contractStatus.hide(); this.$emit('close-modal'); }, + openModal(){ + this.$refs.contractStatus.show(); + this.$emit('open-modal'); + }, reload() { this.$refs.table.reloadTable(); this.$emit('reload'); }, + resetModal(){ + this.formData = {}; + this.formData.vertragsstatus_kurzbz = null; + this.formData.datum = new Date(); + this.statusNew = true; + } }, template: ` @@ -144,7 +190,7 @@ export default { type="DatePicker" :label="$p.t('global/datum')" name="datum" - v-model="formContractData.datum" + v-model="formData.datum" auto-apply :enable-time-picker="false" format="dd.MM.yyyy" @@ -157,8 +203,9 @@ export default {