diff --git a/application/controllers/api/frontend/v1/vertraege/Vertraege.php b/application/controllers/api/frontend/v1/vertraege/Vertraege.php index eaf3062f5..2efe82614 100644 --- a/application/controllers/api/frontend/v1/vertraege/Vertraege.php +++ b/application/controllers/api/frontend/v1/vertraege/Vertraege.php @@ -13,12 +13,14 @@ class Vertraege extends FHCAPI_Controller 'getAllContractsNotAssigned' => ['admin:r', 'assistenz:r'], 'getAllContractsAssigned' => ['admin:r', 'assistenz:r'], 'getAllContractTypes' => self::PERM_LOGGED, + 'getAllContractStati' => self::PERM_LOGGED, 'getStatiOfContract' => self::PERM_LOGGED, 'loadContract' => ['admin:r', 'assistenz:r'], 'updateContract' => ['admin:r', 'assistenz:r'], 'addNewContract' => ['admin:r', 'assistenz:r'], 'deleteContract' => ['admin:r', 'assistenz:r'], - + 'insertContractStatus' => ['admin:r', 'assistenz:r'], + 'deleteContractStatus' => ['admin:r', 'assistenz:r'], ]); //Load Models @@ -82,6 +84,17 @@ class Vertraege extends FHCAPI_Controller $this->terminateWithSuccess(getData($result) ?: []); } + public function getAllContractStati() + { + //TODO(MANUU) + $result = $this->VertragsstatusModel->load(); + if (isError($result)) + { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess(getData($result) ?: []); + } + public function addNewContract($person_id) { //$this->validateNewOrUpdate(); @@ -221,4 +234,51 @@ class Vertraege extends FHCAPI_Controller } return $this->outputJsonSuccess(current(getData($result))); } + + public function insertContractStatus ($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->insert([ + 'vertrag_id' => $vertrag_id, + 'uid' => getAuthUID(), + 'vertragsstatus_kurzbz' => $status, + 'insertamum' => date('c'), + 'insertvon' => getAuthUID(), + 'datum' => $datum + ]); + + if (!$status_result) { + $this->terminateWithError('Fehler beim Hinzufügen des Vertragsstatus.'); + } + + return $this->outputJsonSuccess(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, + 'vertragsstatus_kurzbz' => $status + ) + ); + + if (isError($result)) { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + 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))); + } } \ No newline at end of file diff --git a/application/models/accounting/Vertrag_model.php b/application/models/accounting/Vertrag_model.php index 62b109922..a179dbc81 100644 --- a/application/models/accounting/Vertrag_model.php +++ b/application/models/accounting/Vertrag_model.php @@ -477,7 +477,9 @@ SELECT { $query = " SELECT - * + *, + TO_CHAR(tbl_vertrag_vertragsstatus.datum::timestamp, 'DD.MM.YYYY HH24:MI') AS format_datum, + TO_CHAR(tbl_vertrag_vertragsstatus.insertamum::timestamp, 'DD.MM.YYYY HH24:MI') AS format_insertamum FROM lehre.tbl_vertrag_vertragsstatus JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz) diff --git a/public/js/api/vertraege/person.js b/public/js/api/vertraege/person.js index cff6ea87d..b9529a6bb 100644 --- a/public/js/api/vertraege/person.js +++ b/public/js/api/vertraege/person.js @@ -18,6 +18,9 @@ export default { getAllContractTypes(){ return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/'); }, + getAllContractStati(){ + return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/'); + }, addNewContract(person_id, formData) { return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/addNewContract/' + person_id, formData @@ -33,4 +36,11 @@ export default { deleteContract(vertrag_id){ return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id); }, + insertContractStatus(params) { + return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/insertContractStatus/' + 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 13423267f..495d5ed97 100644 --- a/public/js/components/Vertraege/List/Status.js +++ b/public/js/components/Vertraege/List/Status.js @@ -16,6 +16,10 @@ export default { type: [Number], required: true }, + listContractStati: { + type: Array, + required: true + }, }, data() { return { @@ -29,17 +33,40 @@ export default { }, ajaxResponse: (url, params, response) => response.data, columns: [ - {title: "Status", field: "status", width: 125}, - {title: "Datum", field: "datum", width: 150}, + {title: "Status", field: "vertragsstatus_kurzbz"}, + {title: "Datum", field: "format_datum"}, {title: "vertrag_id", field: "vertrag_id", visible: false}, - {title: "User", field: "bezeichnung", width: 150}, - {title: "Vertragsstatus_kurzbz", field: "studiensemester_kurzbz"}, + // {title: "User", field: "bezeichnung", visible: false}, + // {title: "Vertragsstatus_kurzbz", field: "Vertragsstatus_kurzbz", visible: false}, {title: "insertvon", field: "insertvon", visible: false}, - {title: "insertamum", field: "insertamum", visible: false}, - {title: "updatevon", field: "updatevon", visible: false}, - {title: "updateamum", field: "updateamum", visible: true}, + // {title: "insertamum", field: "insertamum", visible: false}, + {title: "insertamum", field: "format_insertamum", visible: false}, {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false}, {title: "Vertragsstunden", field: "vertragsstunden", visible: false}, + { + title: 'Aktionen', field: 'actions', + minWidth: 150, + formatter: (cell, formatterParams, onRendered) => { + + const container = document.createElement('div'); + container.className = "d-flex gap-2"; + + let button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = 'Status löschen'; + button.addEventListener( + 'click', + () => + this.actionDeleteStatus(cell.getData().vertrag_id, cell.getData().vertragsstatus_kurzbz) + ); + + container.append(button); + + return container; + }, + frozen: true + }, ], layout: 'fitColumns', layoutColumnsOnNewData: false, @@ -47,7 +74,11 @@ export default { selectableRangeMode: 'click', selectable: true, }, - clickedRows: [] + clickedRows: [], + formContractData: { + vertragsstatus_kurzbz: null, + datum: new Date() + }, } }, watch: { @@ -55,21 +86,98 @@ export default { this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + this.vertrag_id); } }, - methods: { }, + methods: { + actionNewStatus() { + console.log("actionNewStatus"); + this.$refs.contractStatus.show(); + }, + 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 + }); + }, + closeModal(){ + this.$refs.contractStatus.hide(); + this.$emit('close-modal'); + }, + reload() { + this.$refs.table.reloadTable(); + this.$emit('reload'); + }, + }, template: `
{{$p.t('ui', 'add_Status')}}
+ + + +