From 2d0285e31d900f16626225d27f0b7b44658ab327 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 8 Nov 2024 13:29:19 +0100 Subject: [PATCH] =?UTF-8?q?add=20and=20update=20Lehrauftraege,=20logic=20s?= =?UTF-8?q?umup=20betr=C3=A4ge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/frontend/v1/vertraege/Vertraege.php | 260 ++++++++++++++---- .../models/accounting/Vertrag_model.php | 11 +- public/js/api/vertraege/person.js | 33 ++- .../js/components/Vertraege/List/Details.js | 85 +++++- public/js/components/Vertraege/List/Status.js | 6 +- .../components/Vertraege/List/Unassigned.js | 91 +++++- public/js/components/Vertraege/Vertraege.js | 161 +++++++++-- system/phrasesupdate.php | 83 +++++- 8 files changed, 618 insertions(+), 112 deletions(-) diff --git a/application/controllers/api/frontend/v1/vertraege/Vertraege.php b/application/controllers/api/frontend/v1/vertraege/Vertraege.php index 9d38ed27f..a6480740b 100644 --- a/application/controllers/api/frontend/v1/vertraege/Vertraege.php +++ b/application/controllers/api/frontend/v1/vertraege/Vertraege.php @@ -23,6 +23,8 @@ class Vertraege extends FHCAPI_Controller 'loadContractStatus' => ['admin:r', 'assistenz:r'], 'deleteContractStatus' => ['admin:r', 'assistenz:r'], 'updateContractStatus' => ['admin:r', 'assistenz:r'], + 'deleteLehrauftrag' => ['admin:r', 'assistenz:r'], + 'deleteBetreuung' => ['admin:r', 'assistenz:r'] ]); //Load Models @@ -93,23 +95,31 @@ class Vertraege extends FHCAPI_Controller $this->terminateWithSuccess(getData($result) ?: []); } - public function addNewContract($person_id) + public function addNewContract() { //$this->validateNewOrUpdate(); //TODO(Manu) check validations + //$bezeichnung = $formData->bezeichnung; - //$person_id = $this->input->post('person_id'); - $vertragsdatum = $this->input->post('vertragsdatum'); - $bezeichnung = $this->input->post('bezeichnung'); - $vertragstyp_kurzbz = $this->input->post('vertragstyp_kurzbz'); - $betrag = $this->input->post('betrag'); - $vertragsstunden = $this->input->post('vertragsstunden'); - $vertragsstunden_studiensemester_kurzbz = $this->input->post('vertragsstunden_studiensemester_kurzbz'); - $anmerkung = $this->input->post('anmerkung'); + $person_id = $this->input->post('person_id'); + $formData = $this->input->post('formData'); + + $vertragsdatum = $formData['vertragsdatum']; + $bezeichnung = $formData['bezeichnung']; + $vertragstyp_kurzbz = $formData['vertragstyp_kurzbz']; + $betrag = isset($formData['betrag']) ? $formData['betrag'] : null; + $vertragsstunden = isset($formData['vertragsstunden']) ? $formData['vertragsstunden'] : null; + $vertragsstunden_studiensemester_kurzbz = isset($formData['vertragsstunden_studiensemester_kurzbz']) ? $formData['vertragsstunden_studiensemester_kurzbz'] : null; + $anmerkung = isset($formData['anmerkung']) ? $formData['anmerkung'] : null; + + $lehrauftraege = $this->input->post('clickedRows'); + + + //$this->terminateWithError("in function" . $lehrauftraege[0]['lehreinheit_id'], self::ERROR_TYPE_GENERAL); $this->db->trans_start(); - $result = $this->VertragModel->insert( [ + $result = $this->VertragModel->insert([ 'person_id' => $person_id, 'vertragsdatum' => $vertragsdatum, 'bezeichnung' => $bezeichnung, @@ -122,9 +132,13 @@ class Vertraege extends FHCAPI_Controller 'insertvon' => getAuthUID() ]); + $vertrag_id = $result->retval; + + //$this->terminateWithError($result->retval, self::ERROR_TYPE_GENERAL); + //TODO(Manu) validation, dass status nicht schon bereits vorhanden $status_result = $this->VertragvertragsstatusModel->insert([ - 'vertrag_id' => $result->retval, + 'vertrag_id' => $vertrag_id, 'uid' => getAuthUID(), 'vertragsstatus_kurzbz' => 'neu', 'insertamum' => date('c'), @@ -134,7 +148,140 @@ class Vertraege extends FHCAPI_Controller if (!$status_result) { $this->db->trans_rollback(); - $this->terminateWithError('Fehler beim Hinzufügen des Vertragsstatus.'); + $this->terminateWithError('Fehler beim Hinzufügen des Vertragsstatus.', self::ERROR_TYPE_GENERAL); + } + + //Hinzufügen der Lehraufträge + foreach ($lehrauftraege as $row) { + + if ($row['type'] == 'Lehrauftrag') + { + $this->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel'); + + $result_lehrauftrag = $this->LehreinheitmitarbeiterModel->update( + [ + 'lehreinheit_id' => $row['lehreinheit_id'], + 'mitarbeiter_uid' => $row['mitarbeiter_uid'] + ], + [ + 'vertrag_id' => $vertrag_id + ]); + + if (!$result_lehrauftrag) { + $this->db->trans_rollback(); + $this->terminateWithError('Fehler beim Verknüpfen Lehrauftrag mit Vertrag', self::ERROR_TYPE_GENERAL); + } + } + + if ($row['type'] == 'Betreuung') + { + + $this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel'); + + $result_projektbetreuer = $this->Projektbetreuermodel->update( + [ + 'person_id' => $person_id, + 'projektarbeit_id' => $row['projektarbeit_id'], + 'betreuerart_kurzbz' => $row['betreuerart_kurzbz'] + ], + [ + 'vertrag_id' => $vertrag_id + ]); + + if (!$result_projektbetreuer) + { + $this->db->trans_rollback(); + $this->terminateWithError('Fehler beim Verknüpfen Lehrauftrag mit Betreuung', self::ERROR_TYPE_GENERAL); + } + } + + } + + $this->db->trans_complete(); + $this->terminateWithSuccess(true); + } + + public function updateContract() + { + $vertrag_id = $this->input->post('vertrag_id'); + $person_id = $this->input->post('person_id'); + $formData = $this->input->post('formData'); + + $vertragsdatum = $formData['vertragsdatum']; + $bezeichnung = $formData['bezeichnung']; + $vertragstyp_kurzbz = $formData['vertragstyp_kurzbz']; + $betrag = isset($formData['betrag']) ? $formData['betrag'] : null; + $vertragsstunden = isset($formData['vertragsstunden']) ? $formData['vertragsstunden'] : null; + $vertragsstunden_studiensemester_kurzbz = isset($formData['vertragsstunden_studiensemester_kurzbz']) ? $formData['vertragsstunden_studiensemester_kurzbz'] : null; + $anmerkung = isset($formData['anmerkung']) ? $formData['anmerkung'] : null; + + $lehrauftraege = $this->input->post('clickedRows'); + + $this->db->trans_start(); + + $result = $this->VertragModel->update( + $vertrag_id, [ + 'person_id' => $person_id, + 'vertragsdatum' => $vertragsdatum, + 'bezeichnung' => $bezeichnung, + 'vertragstyp_kurzbz' => $vertragstyp_kurzbz, + 'betrag' => $betrag, + 'vertragsstunden' => $vertragsstunden, + 'vertragsstunden_studiensemester_kurzbz' => $vertragsstunden_studiensemester_kurzbz, + 'anmerkung' => $anmerkung, + 'vertragsstunden' => $vertragsstunden, + 'updateamum' => date('c'), + 'updatevon' => getAuthUID() + ]); + + $this->getDataOrTerminateWithError($result); + + //TODO(MANU) Transaction: splitting of in error und rollback sonst weiter + + //Adding of Lehraufträge + foreach ($lehrauftraege as $row) { + + if ($row['type'] == 'Lehrauftrag') + { + $this->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel'); + + $result_lehrauftrag = $this->LehreinheitmitarbeiterModel->update( + [ + 'lehreinheit_id' => $row['lehreinheit_id'], + 'mitarbeiter_uid' => $row['mitarbeiter_uid'] + ], + [ + 'vertrag_id' => $vertrag_id + ]); + + if (!$result_lehrauftrag) { + $this->db->trans_rollback(); + $this->terminateWithError('Fehler beim Verknüpfen Lehrauftrag mit Vertrag', self::ERROR_TYPE_GENERAL); + } + } + + if ($row['type'] == 'Betreuung') + { + + $this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel'); + + $result_projektbetreuer = $this->Projektbetreuermodel->update( + [ + 'person_id' => $person_id, + 'projektarbeit_id' => $row['projektarbeit_id'], + 'betreuerart_kurzbz' => $row['betreuerart_kurzbz'] + ], + [ + 'vertrag_id' => $vertrag_id + ]); + + if (!$result_projektbetreuer) + { + $this->db->trans_rollback(); + $this->terminateWithError('Fehler beim Verknüpfen Lehrauftrag mit Betreuung', self::ERROR_TYPE_GENERAL); + } + } + } $this->db->trans_complete(); @@ -157,45 +304,6 @@ class Vertraege extends FHCAPI_Controller $this->terminateWithSuccess(current(getData($result))); } - public function updateContract($vertrag_id) - { - //$this->validateNewOrUpdate(); - //TODO(Manu)validations - - - $vertrag_id = $this->input->post('vertrag_id'); - $person_id = $this->input->post('person_id'); - $vertragsdatum = $this->input->post('vertragsdatum'); - $bezeichnung = $this->input->post('bezeichnung'); - $vertragstyp_kurzbz = $this->input->post('vertragstyp_kurzbz'); - $betrag = $this->input->post('betrag'); - $vertragsstunden = $this->input->post('vertragsstunden'); - $vertragsstunden_studiensemester_kurzbz = $this->input->post('vertragsstunden_studiensemester_kurzbz'); - $anmerkung = $this->input->post('anmerkung'); - - $this->db->trans_start(); - - $result = $this->VertragModel->update($vertrag_id, [ - 'person_id' => $person_id, - 'vertragsdatum' => $vertragsdatum, - 'bezeichnung' => $bezeichnung, - 'vertragstyp_kurzbz' => $vertragstyp_kurzbz, - 'betrag' => $betrag, - 'vertragsstunden' => $vertragsstunden, - 'vertragsstunden_studiensemester_kurzbz' => $vertragsstunden_studiensemester_kurzbz, - 'anmerkung' => $anmerkung, - 'vertragsstunden' => $vertragsstunden, - 'updateamum' => date('c'), - 'updatevon' => getAuthUID() - ]); - - $this->getDataOrTerminateWithError($result); - - $this->db->trans_complete(); - - $this->terminateWithSuccess(true); - } - public function deleteContract($vertrag_id) { //TODO(Manu) validations, @@ -322,4 +430,54 @@ class Vertraege extends FHCAPI_Controller return $this->terminateWithSuccess(current(getData($status_result))); } + + public function deleteLehrauftrag($vertrag_id, $lehreinheit_id, $mitarbeiter_uid) + { + $this->load->model('education/Lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel'); + + //kein delete: ein update, bei dem die vertrag_id auf null gesetzt wird + $result = $this->LehreinheitmitarbeiterModel->update( + [ + 'lehreinheit_id' => $lehreinheit_id, + 'mitarbeiter_uid' => $mitarbeiter_uid, + 'vertrag_id' => $vertrag_id + ], + [ + 'vertrag_id' => null + ]); + + if (isError($result)) { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + if (!hasData($result)) { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Id_Lehrauftrag']), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess(current(getData($result))); + } + + public function deleteBetreuung($vertrag_id, $person_id, $projektarbeit_id, $betreuerart_kurzbz) + { + $this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel'); + + $result = $this->Projektbetreuermodel->update( + [ + 'person_id' => $person_id, + 'projektarbeit_id' => $projektarbeit_id, + 'betreuerart_kurzbz' => $betreuerart_kurzbz, + 'vertrag_id' => $vertrag_id + ], + [ + 'vertrag_id' => null + ]); + + if (isError($result)) { + return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + if (!hasData($result)) { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Id_Lehrauftrag']), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess(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 a179dbc81..a9f514666 100644 --- a/application/models/accounting/Vertrag_model.php +++ b/application/models/accounting/Vertrag_model.php @@ -370,7 +370,7 @@ SELECT mitarbeiter_uid, null as pruefung_id, null as projektarbeit_id, - (tbl_lehreinheitmitarbeiter.semesterstunden*tbl_lehreinheitmitarbeiter.stundensatz) as betrag, + (tbl_lehreinheitmitarbeiter.semesterstunden*tbl_lehreinheitmitarbeiter.stundensatz) as betrag1, tbl_lehreinheit.studiensemester_kurzbz, null as betreuerart_kurzbz, ( SELECT @@ -394,7 +394,7 @@ SELECT null as mitarbeiter_uid, null::integer as pruefung_id, projektarbeit_id, - (tbl_projektbetreuer.stunden*tbl_projektbetreuer.stundensatz) as betrag, + (tbl_projektbetreuer.stunden*tbl_projektbetreuer.stundensatz) as betrag1, tbl_lehreinheit.studiensemester_kurzbz, tbl_projektbetreuer.betreuerart_kurzbz, (SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid) @@ -436,7 +436,7 @@ SELECT JOIN public.tbl_studiengang USING(studiengang_kz) WHERE lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id) - as bezeichnung + as bezeichnung, vertrag_id FROM lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) @@ -454,7 +454,7 @@ SELECT tbl_lehreinheit.studiensemester_kurzbz, tbl_projektbetreuer.betreuerart_kurzbz, (SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid) - as bezeichnung + as bezeichnung, vertrag_id FROM lehre.tbl_projektbetreuer JOIN lehre.tbl_projektarbeit USING(projektarbeit_id) @@ -479,7 +479,8 @@ SELECT 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 + TO_CHAR(tbl_vertrag_vertragsstatus.insertamum::timestamp, 'DD.MM.YYYY HH24:MI') AS format_insertamum, + TO_CHAR(tbl_vertrag_vertragsstatus.updateamum::timestamp, 'DD.MM.YYYY HH24:MI') AS format_updateamum 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 c682342df..5befc16c1 100644 --- a/public/js/api/vertraege/person.js +++ b/public/js/api/vertraege/person.js @@ -6,7 +6,6 @@ export default { return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id); }, getAllContractsAssigned(url, config, params){ - console.log(params.person_id, params.vertrag_id); return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id); }, getAllContractsNotAssigned2(person_id){ @@ -21,17 +20,35 @@ export default { getAllContractStati(){ return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/'); }, - addNewContract(person_id, formData) { +/* addNewContract(person_id, formData) { return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/addNewContract/' + person_id, formData ); + },*/ + addNewContract(data) { + //TODO(Manu) Refactor + const { person_id, formData, clickedRows } = data; + console.log("Person ID:", person_id); + console.log("Form Data:", formData); + console.log("Clicked Rows:", clickedRows); + //return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/addNewContract/' + Object.values(params.person_id).join('/') + '/' + Object.values(params.formData).join('/') + '/' + Object.values(params.clickedRows).join('/')); + return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/addNewContract/', data); }, loadContract(vertrag_id){ return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id); }, - updateContract(vertrag_id, formData) { +/* updateContract(vertrag_id, formData) { return this.$fhcApi.post( 'api/frontend/v1/vertraege/vertraege/updateContract/' + vertrag_id, formData); + },*/ + updateContract(data) { + //TODO(Manu) Refactor + const { vertrag_id, person_id, formData, clickedRows } = data; + console.log("Person ID:", person_id); + console.log("Vertrag ID:", vertrag_id); + console.log("Form Data:", formData); + console.log("Clicked Rows:", clickedRows); + return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/updateContract/', data); }, deleteContract(vertrag_id){ return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id); @@ -43,10 +60,18 @@ export default { 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) { return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + Object.values(params.vertrag_id).join('/') + '/' + Object.values(params.status).join('/')); + }, + deleteLehrauftrag(params) { + //TODO Manu (Refactor!) + console.log(params.vertrag_id, params.lehreinheit_id, params.mitarbeiter_uid); + return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + Object.values(params.vertrag_id).join('/') + '/' + Object.values(params.lehreinheit_id).join('/') + '/' + Object.values(params.mitarbeiter_uid).join('/')); + }, + deleteBetreuung(params) { + console.log(params.vertrag_id, params.person_id, params.projektarbeit_id, params.betreuerart_kurzbz); + return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + Object.values(params.vertrag_id).join('/') + '/' + Object.values(params.person_id).join('/') + '/' + Object.values(params.projektarbeit_id).join('/') + '/' + Object.values(params.betreuerart_kurzbz).join('/')); } } \ No newline at end of file diff --git a/public/js/components/Vertraege/List/Details.js b/public/js/components/Vertraege/List/Details.js index ef0710970..b858d84b9 100644 --- a/public/js/components/Vertraege/List/Details.js +++ b/public/js/components/Vertraege/List/Details.js @@ -56,6 +56,45 @@ export default { field: "vertragsstunden_studiensemester_kurzbz", visible: false }, + { + title: 'Aktionen', field: 'actions', + minWidth: 50, + 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 = 'Lehrauftrag löschen'; + + let type = cell.getData().type; + console.log(type); + if (type == 'Lehrauftrag') + { + button.addEventListener( + 'click', + () => + this.actionDeleteLehrauftrag(cell.getData().vertrag_id, cell.getData().lehreinheit_id, cell.getData().mitarbeiter_uid) + ); + } + + if (type == 'Betreuung') + { + button.addEventListener( + 'click', + () => + this.actionDeleteBetreuung(cell.getData().vertrag_id, cell.getData().projektarbeit_id, cell.getData().betreuerart_kurzbz) + ); + } + + container.append(button); + + return container; + }, + frozen: true + }, ], layout: 'fitColumns', layoutColumnsOnNewData: false, @@ -69,27 +108,48 @@ export default { } }, watch: { - person_id: 'updateTableData', - vertrag_id: 'updateTableData' -/* person_id() { +/* person_id: 'updateTableData', + vertrag_id: 'updateTableData'*/ + person_id() { + console.log("person geändert"); this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + this.person_id + '/' + this.vertrag_id); }, vertrag_id() { + console.log("vertrag geändert"); this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + this.person_id + '/' + this.vertrag_id); - },*/ + }, }, methods: { - updateTableData() { +/* updateTableData() { this.$refs.table.tabulator.setData(`api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/ ' ${this.person_id}/${this.vertrag_id}`); - } + },*/ + //TODO(Manu) delete vertrag_id: not necessary + actionDeleteLehrauftrag(vertrag_id, lehreinheit_id, mitarbeiter_uid) { + console.log("child", vertrag_id); + this.$emit('deleteLehrauftrag', { + lehreinheit_id: lehreinheit_id, + vertrag_id: vertrag_id, + mitarbeiter_uid: mitarbeiter_uid + }); + }, + actionDeleteBetreuung(vertrag_id, projektarbeit_id, betreuerart_kurzbz) { + this.$emit('deleteBetreuung', { + person_id: this.person_id, + vertrag_id: vertrag_id, + projektarbeit_id: projektarbeit_id, + betreuerart_kurzbz: betreuerart_kurzbz + }); + }, + reload() { + this.$refs.table.reloadTable(); + this.$emit('reload'); + }, }, template: ` - + +
- person_id: {{person_id}} -
- vertrag_id: {{vertrag_id}} - +
@@ -106,7 +166,8 @@ export default { ref="table" :tabulator-options="tabulatorOptions" table-only - :side-menu="false" + :side-menu="false" + reload >
` diff --git a/public/js/components/Vertraege/List/Status.js b/public/js/components/Vertraege/List/Status.js index 24aac571f..07efe6c90 100644 --- a/public/js/components/Vertraege/List/Status.js +++ b/public/js/components/Vertraege/List/Status.js @@ -37,14 +37,14 @@ export default { }, ajaxResponse: (url, params, response) => response.data, columns: [ - {title: "Status", field: "vertragsstatus_kurzbz"}, + {title: "Status", field: "bezeichnung"}, {title: "Datum", field: "format_datum"}, {title: "vertrag_id", field: "vertrag_id", visible: false}, // {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: "insertamum", field: "format_insertamum", visible: false}, + {title: "updatevon", field: "updatevon", visible: false}, + {title: "updateamum", field: "format_updateamum", visible: false}, {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false}, {title: "Vertragsstunden", field: "vertragsstunden", visible: false}, { diff --git a/public/js/components/Vertraege/List/Unassigned.js b/public/js/components/Vertraege/List/Unassigned.js index 8549b1a1a..0f61d6adf 100644 --- a/public/js/components/Vertraege/List/Unassigned.js +++ b/public/js/components/Vertraege/List/Unassigned.js @@ -31,10 +31,37 @@ export default { person_id: this.person_id }; }, + //TODO(Manu) auch beträge von NULL anzeigen als 0.00 ajaxResponse: (url, params, response) => response.data, columns: [ - {title: "Typ", field: "type", width: 125}, - {title: "Betrag", field: "betrag", width: 150}, + {title: "Typ", field: "type"}, +/* { + title: "Betrag", + field: "betrag", + formatter: function(cell) { + // Hole den Wert der Zelle + let value = cell.getValue(); + + // Falls der Wert null oder undefined ist, setze ihn auf "0,00" + if (value == null) { + return "0,00"; + } + + // Andernfalls formatiere ihn auf zwei Dezimalstellen + return parseFloat(value).toFixed(2).replace(".", ","); + } + },*/ + {title: "Betrag", + field: "betrag1", + formatter: function(cell) { + let value = cell.getValue(); + + if (value == null) { + return "0.00"; + } + + return parseFloat(value).toFixed(2); + }}, {title: "Bezeichnung", field: "bezeichnung", width: 150}, {title: "Studiensemester", field: "studiensemester_kurzbz"}, {title: "PruefungId", field: "betrag", visible: false}, @@ -56,16 +83,24 @@ export default { selectableRangeMode: 'click', selectable: true, }, - clickedRows: [] + clickedRows: [], + sumBetragLehrauftraege: 0 } }, + //TODO(Manu) auch auf fhcapi umbauen? + watch: { + person_id() { + console.log("data changed"); + this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + this.person_id); + }, + }, methods: { toggleRowClick(rowData){ //id already existing? //const index = this.clickedRows.findIndex(row => row.id === id); - //id alleine reicht nicht: Betreuerart ebenfalls + //id alleine reicht nicht: Betreuerart ebenfalls, am besten gleich ganze Row! /* if (this.clickedRows.indexOf(id) == -1) { console.log("Die Zahl " + id + " ist NICHT Array enthalten."); this.clickedRows.push(id); @@ -81,11 +116,30 @@ export default { if (exists) { this.clickedRows = this.clickedRows.filter(row => JSON.stringify(row) !== JSON.stringify(rowData)); + this.sumBetragLehrauftraege -= Number(rowData.betrag1); + this.handleSumUp(); } else { this.clickedRows.push(rowData); + //hier soll der variable sumBetragLehrauftraege der Wert von this.clickedRows.betrag1 hinzugefügt werden + this.sumBetragLehrauftraege += Number(rowData.betrag1); + console.log(rowData.betrag1); + this.handleSumUp(); } - } + }, + emitSaveEvent() { + // Emit ein Event und übergebe clickedRows an die Parent-Komponente + this.$emit('saveClickedRows', this.clickedRows); + }, + reload() { + this.$refs.table.reloadTable(); + this.$emit('reload'); + this.clickedRows = {}; + }, + handleSumUp() { + //this.localValue += 1; // Increment the local value + this.$emit("sum-updated", this.sumBetragLehrauftraege); // Emit the updated value to the parent + }, }, mounted() { this.$nextTick(() => { @@ -99,14 +153,35 @@ export default {
- {{clickedRows}} + + + +

Die folgenden Lehraufträge sind noch keinem Vertrag zugeordnet. Markieren Sie die Lehraufträge um diese dem Vertrag zuzuordnen:

+ - + + + +

Folgende Lehraufträge werden hinzugefügt:

+ +
+
+ +
+ +
+
` } \ No newline at end of file diff --git a/public/js/components/Vertraege/Vertraege.js b/public/js/components/Vertraege/Vertraege.js index a3277d6f7..8cc9b9bc3 100644 --- a/public/js/components/Vertraege/Vertraege.js +++ b/public/js/components/Vertraege/Vertraege.js @@ -34,7 +34,7 @@ export default { }, data() { return { - //TODO(Manu) check if filter bei Status: Abgerechnet wird zum Beispiel nicht angezeigt + //TODO(Manu) filter: alle vs offene Verträge tabulatorOptions: { ajaxURL: 'dummy', ajaxRequestFunc: this.$fhcApi.factory.vertraege.person.getAllVertraege, @@ -59,7 +59,7 @@ export default { {title: "Anmerkung", field: "anmerkung", visible: false}, { title: 'Aktionen', field: 'actions', - minWidth: 150, // Ensures Action-buttons will be always fully displayed + minWidth: 150, maxWidth: 150, formatter: (cell, formatterParams, onRendered) => { let container = document.createElement('div'); @@ -127,19 +127,23 @@ export default { } ], statusNew: true, - formData: {}, + formData: { }, listContractsUnassigned: [], listContractTypes: [], contractSelected: [], listContractStati: [], contractFormData: { vertragsstatus_kurzbz: 'test', - datum: new Date() - } - // isContractModalVisible: true, + datum: new Date(), + }, + childData: {} } }, - + watch: { + person_id() { + this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + this.person_id); + }, + }, methods: { actionNewContract() { this.resetModal(); @@ -165,24 +169,43 @@ export default { .catch(this.$fhcAlert.handleSystemError); }, addNewContract() { + this.$refs.unassignedLehrauftraege.emitSaveEvent(); + + const dataToSend = { + person_id: this.person_id, + formData: this.formData, + clickedRows: this.childData, //do I need all Data, maybe smaller array? + }; + return this.endpoint - .addNewContract(this.person_id, this.formData) + .addNewContract(dataToSend) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.$refs.contractModal.hide(); this.resetModal(); - //window.scrollTo(0, 0); + //this.$refs.contractdetails.reload(); //TOOD(Manu) check why error + this.$refs.unassignedLehrauftraege.reload(); this.reload(); }) .catch(this.$fhcAlert.handleSystemError); }, updateContract(vertrag_id) { + this.$refs.unassignedLehrauftraege.emitSaveEvent(); + + const dataToSend = { + vertrag_id: vertrag_id, + person_id: this.person_id, + formData: this.formData, + clickedRows: this.childData, //do I need all Data, maybe smaller array? + }; + return this.endpoint - .updateContract(vertrag_id, this.formData) + .updateContract(dataToSend) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.$refs.contractModal.hide(); this.resetModal(); + this.$refs.unassignedLehrauftraege.reload(); this.reload(); }) .catch(this.$fhcAlert.handleSystemError); @@ -197,6 +220,7 @@ export default { }) .catch(this.$fhcAlert.handleSystemError); }, + //Methods Contract Stati addNewContractStatus({status, datum}) { const date = new Date(); //TODO(Manu) refactor this @@ -233,6 +257,43 @@ export default { }) .catch(this.$fhcAlert.handleSystemError); }, + deleteLehrauftrag({lehreinheit_id, vertrag_id, mitarbeiter_uid}){ + + let params = { + vertrag_id : {vertrag_id}, + lehreinheit_id: {lehreinheit_id}, + mitarbeiter_uid: {mitarbeiter_uid}, + }; + return this.endpoint + .deleteLehrauftrag(params) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); + + //window.scrollTo(0, 0); + this.resetModal(); + this.$refs.contractdetails.reload(); + this.$refs.unassignedLehrauftraege.reload(); + }) + .catch(this.$fhcAlert.handleSystemError); + }, + deleteBetreuung({person_id, vertrag_id, projektarbeit_id, betreuerart_kurzbz}){ + let params = { + vertrag_id : {vertrag_id}, + person_id: {person_id}, + projektarbeit_id: {projektarbeit_id}, + betreuerart_kurzbz: {betreuerart_kurzbz}, + }; + return this.endpoint + .deleteBetreuung(params) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); + + //window.scrollTo(0, 0); + this.$refs.contractdetails.reload(); + this.$refs.unassignedLehrauftraege.reload(); + }) + .catch(this.$fhcAlert.handleSystemError); + }, updateContractStatus({datum, status}){ //TODO(Manu) refactor this const formattedDate = datum.toLocaleDateString('en-CA'); @@ -265,15 +326,36 @@ export default { }) .catch(this.$fhcAlert.handleSystemError); }, + //Methods Unassigned List + saveClickedRows(clickedRows) { + this.childData = clickedRows; + }, reload() { this.$refs.table.reloadTable(); }, resetModal(){ this.formData = {}; this.formData.vertragsdatum = new Date(); + this.formData.betrag = 0; + this.formData.bezeichnung = this.getFormattedDate(); this.formData.vertragstyp_kurzbz = null; this.statusNew = true; - } + + //this.childData = {}; + //gefährlich, immer null?? + //TODO(Manu) check if this.childData = {}, + }, + updateBetrag(sumBetrag){ + this.formData.betrag = sumBetrag; + }, + getFormattedDate() { + const today = new Date(); + const year = today.getFullYear(); + const month = String(today.getMonth() + 1).padStart(2, "0"); + const day = String(today.getDate()).padStart(2, "0"); + + return `${year}${month}${day}`; // Format: YYYYMMDD + }, }, created() { Promise.all([ @@ -294,11 +376,16 @@ export default { this.contractSelected = row.getData(); }); }); + this.getFormattedDate(); + }, template: `
+ parent: + {{childData}} +
- +
- +
@@ -342,18 +435,30 @@ export default { - - + {{formData}} + + + + +
+
'system' ) ) - ) + ), + // Contract + array( + 'app' => 'core', + 'category' => 'vertrag', + 'phrase' => 'addVertrag', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Neuen Vertrag erstellen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Add new contract', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'vertrag', + 'phrase' => 'editVertrag', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Vertrag bearbeiten', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Edit contract', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'vertrag', + 'phrase' => 'datum_vertrag', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Vertragsdatum', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'contract date', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'vertrag', + 'phrase' => 'vertrag_urfassung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Vertrags-Urfassung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'original version of the contract', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), );