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: ` - + +
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:
+ +{{$p.t('ui', 'add_contract')}}
-{{$p.t('ui', 'edit_contract')}}
+{{$p.t('vertrag', 'addVertrag')}}
+{{$p.t('vertrag', 'editVertrag')}}