diff --git a/application/controllers/api/frontend/v1/vertraege/Vertraege.php b/application/controllers/api/frontend/v1/vertraege/Vertraege.php index 52224fba1..21fb310fc 100644 --- a/application/controllers/api/frontend/v1/vertraege/Vertraege.php +++ b/application/controllers/api/frontend/v1/vertraege/Vertraege.php @@ -27,11 +27,19 @@ class Vertraege extends FHCAPI_Controller 'deleteBetreuung' => ['admin:r', 'assistenz:r'] ]); - //Load Models + //Load Models and Libraries $this->load->model('accounting/Vertrag_model', 'VertragModel'); $this->load->model('accounting/Vertragsstatus_model', 'VertragsstatusModel'); $this->load->model('accounting/Vertragstyp_model', 'VertragstypModel'); $this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel'); + + //TODO(Manu) additional permission checks + + // Load language phrases + $this->loadPhrases([ + 'ui', + 'vertrag' + ]); } //TODO(Manu) validations, phrases @@ -97,46 +105,66 @@ class Vertraege extends FHCAPI_Controller public function addNewContract() { - //$this->validateNewOrUpdate(); - //TODO(Manu) check validations - //$bezeichnung = $formData->bezeichnung; + $this->load->library('form_validation'); $person_id = $this->input->post('person_id'); + + if(!$person_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL); + } + $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; + //Manually rewrite to postparameter for form validation + $_POST['vertragstyp_kurzbz'] = $formData['vertragstyp_kurzbz']; + $_POST['vertragsdatum']= $formData['vertragsdatum']; + $_POST['bezeichnung']= $formData['bezeichnung']; + $_POST['betrag'] = $formData['betrag']; + $_POST['vertragsstunden']= isset($formData['vertragsstunden']) ? $formData['vertragsstunden'] : null; + $_POST['vertragsstunden_studiensemester_kurzbz']= isset($formData['vertragsstunden_studiensemester_kurzbz']) ? $formData['vertragsstunden_studiensemester_kurzbz'] : null; + $_POST['anmerkung']= isset($formData['anmerkung']) ? $formData['anmerkung'] : null; + + + $this->form_validation->set_rules('vertragstyp_kurzbz', 'Vertragstyp', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Vertragstyp']) + ]); + $this->form_validation->set_rules('vertragsdatum', 'Vertragsdatum', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Vertragsdatum']) + ]); + $this->form_validation->set_rules('betrag', 'Betrag', 'required|numeric', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Betrag']), + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Betrag']) + ]); + $this->form_validation->set_rules('vertragsstunden', 'Stunden(Vertrags-Urfassung)', 'numeric', [ + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Stunden(Vertrags-Urfassung)']) + ]); + + if ($this->form_validation->run() == false) + { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } $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([ 'person_id' => $person_id, - 'vertragsdatum' => $vertragsdatum, - 'bezeichnung' => $bezeichnung, - 'vertragstyp_kurzbz' => $vertragstyp_kurzbz, - 'betrag' => $betrag, - 'vertragsstunden' => $vertragsstunden, - 'vertragsstunden_studiensemester_kurzbz' => $vertragsstunden_studiensemester_kurzbz, - 'anmerkung' => $anmerkung, + 'vertragsdatum' => $_POST['vertragsdatum'], + 'bezeichnung' => $_POST['bezeichnung'], + 'vertragstyp_kurzbz' => $_POST['vertragstyp_kurzbz'], + 'betrag' => $_POST['betrag'], + 'vertragsstunden' => $_POST['vertragsstunden'], + 'vertragsstunden_studiensemester_kurzbz' => $_POST['vertragsstunden_studiensemester_kurzbz'], + 'anmerkung' => $_POST['anmerkung'], 'insertamum' => date('c'), 'insertvon' => getAuthUID() ]); + $this->getDataOrTerminateWithError($result); $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' => $vertrag_id, 'uid' => getAuthUID(), @@ -148,7 +176,7 @@ class Vertraege extends FHCAPI_Controller if (!$status_result) { $this->db->trans_rollback(); - $this->terminateWithError('Fehler beim Hinzufügen des Vertragsstatus.', self::ERROR_TYPE_GENERAL); + $this->terminateWithError($this->p->t('vertrag', 'error_insertOrUpdateStatusVertrag'), self::ERROR_TYPE_GENERAL); } //Hinzufügen der Lehraufträge @@ -169,13 +197,12 @@ class Vertraege extends FHCAPI_Controller if (!$result_lehrauftrag) { $this->db->trans_rollback(); - $this->terminateWithError('Fehler beim Verknüpfen Lehrauftrag mit Vertrag', self::ERROR_TYPE_GENERAL); + $this->terminateWithError($this->p->t('vertrag', 'error_addOrUpdateLehrauftraege'), self::ERROR_TYPE_GENERAL); } } if ($row['type'] == 'Betreuung') { - $this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel'); $result_projektbetreuer = $this->Projektbetreuermodel->update( @@ -191,10 +218,9 @@ class Vertraege extends FHCAPI_Controller if (!$result_projektbetreuer) { $this->db->trans_rollback(); - $this->terminateWithError('Fehler beim Verknüpfen Lehrauftrag mit Betreuung', self::ERROR_TYPE_GENERAL); + $this->terminateWithError($this->p->t('vertrag', 'error_addOrUpdateLehrauftraege'), self::ERROR_TYPE_GENERAL); } } - } $this->db->trans_complete(); @@ -203,41 +229,62 @@ class Vertraege extends FHCAPI_Controller public function updateContract() { + $this->load->library('form_validation'); + $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'); + //Manually rewrite to postparameter for form validation + $_POST['vertragstyp_kurzbz'] = $formData['vertragstyp_kurzbz']; + $_POST['vertragsdatum']= $formData['vertragsdatum']; + $_POST['bezeichnung']= $formData['bezeichnung']; + $_POST['betrag'] = $formData['betrag']; + $_POST['vertragsstunden']= isset($formData['vertragsstunden']) ? $formData['vertragsstunden'] : null; + $_POST['vertragsstunden_studiensemester_kurzbz']= isset($formData['vertragsstunden_studiensemester_kurzbz']) ? $formData['vertragsstunden_studiensemester_kurzbz'] : null; + $_POST['anmerkung']= isset($formData['anmerkung']) ? $formData['anmerkung'] : null; + + + $this->form_validation->set_rules('vertragstyp_kurzbz', 'Vertragstyp', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Vertragstyp']) + ]); + $this->form_validation->set_rules('vertragsdatum', 'Vertragsdatum', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Vertragsdatum']) + ]); + $this->form_validation->set_rules('betrag', 'Betrag', 'required|numeric', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Betrag']), + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Betrag']) + ]); + $this->form_validation->set_rules('vertragsstunden', 'Stunden(Vertrags-Urfassung)', 'numeric', [ + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Stunden(Vertrags-Urfassung)']) + ]); + + if ($this->form_validation->run() == false) + { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + $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() + $vertrag_id, + [ + 'person_id' => $person_id, + 'vertragsdatum' => $_POST['vertragsdatum'], + 'bezeichnung' => $_POST['bezeichnung'], + 'vertragstyp_kurzbz' => $_POST['vertragstyp_kurzbz'], + 'betrag' => $_POST['betrag'], + 'vertragsstunden' => $_POST['vertragsstunden'], + 'vertragsstunden_studiensemester_kurzbz' => $_POST['vertragsstunden_studiensemester_kurzbz'], + 'anmerkung' => $_POST['anmerkung'], + 'vertragsstunden' => $_POST['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) { @@ -256,13 +303,12 @@ class Vertraege extends FHCAPI_Controller if (!$result_lehrauftrag) { $this->db->trans_rollback(); - $this->terminateWithError('Fehler beim Verknüpfen Lehrauftrag mit Vertrag', self::ERROR_TYPE_GENERAL); + $this->terminateWithError($this->p->t('vertrag', 'error_addOrUpdateLehrauftraege'), self::ERROR_TYPE_GENERAL); } } if ($row['type'] == 'Betreuung') { - $this->load->model('education/Projektbetreuer_model', 'Projektbetreuermodel'); $result_projektbetreuer = $this->Projektbetreuermodel->update( @@ -278,12 +324,10 @@ class Vertraege extends FHCAPI_Controller if (!$result_projektbetreuer) { $this->db->trans_rollback(); - $this->terminateWithError('Fehler beim Verknüpfen Lehrauftrag mit Betreuung', self::ERROR_TYPE_GENERAL); + $this->terminateWithError($this->p->t('vertrag', 'error_addOrUpdateLehrauftraege'), self::ERROR_TYPE_GENERAL); } } - } - $this->db->trans_complete(); $this->terminateWithSuccess(true); @@ -361,15 +405,14 @@ class Vertraege extends FHCAPI_Controller ]); $this->getDataOrTerminateWithError($result); - } - } $result = $this->VertragvertragsstatusModel->load([ 'vertrag_id' => $vertrag_id ]); + //TODO(Manu) check if there are exceptions for deletions (status abgerechnet?) if(hasData($result)){ $data = getData($result); foreach ($data as $item) { diff --git a/application/models/accounting/Vertrag_model.php b/application/models/accounting/Vertrag_model.php index a9f514666..048dbb085 100644 --- a/application/models/accounting/Vertrag_model.php +++ b/application/models/accounting/Vertrag_model.php @@ -346,7 +346,16 @@ class Vertrag_model extends DB_Model TO_CHAR(tbl_vertrag.vertragsdatum::timestamp, 'DD.MM.YYYY') AS format_vertragsdatum, (SELECT bezeichnung FROM lehre.tbl_vertragsstatus JOIN lehre.tbl_vertrag_vertragsstatus USING(vertragsstatus_kurzbz) - WHERE vertrag_id=tbl_vertrag.vertrag_id ORDER BY datum desc limit 1) as status, anmerkung + WHERE vertrag_id=tbl_vertrag.vertrag_id ORDER BY datum desc limit 1) as status, anmerkung, + CASE + WHEN EXISTS ( + SELECT 1 + FROM lehre.tbl_vertrag_vertragsstatus + WHERE vertrag_id = tbl_vertrag.vertrag_id + AND vertragsstatus_kurzbz = 'abgerechnet' + ) THEN true + ELSE false + END AS isAbgerechnet FROM lehre.tbl_vertrag LEFT JOIN lehre.tbl_vertragstyp USING(vertragstyp_kurzbz) diff --git a/public/js/components/Vertraege/List/Details.js b/public/js/components/Vertraege/List/Details.js index 67c8de397..f11a50d12 100644 --- a/public/js/components/Vertraege/List/Details.js +++ b/public/js/components/Vertraege/List/Details.js @@ -34,11 +34,6 @@ export default { }; }, ajaxResponse: (url, params, response) => response.data, - //Version with saving Data in tableData Object -/* ajaxResponse: (url, params, response) => { - this.tableData = response.data; - return response.data; - },*/ columns: [ {title: "Typ", field: "type"}, {title: "Betrag", field: "betrag"}, @@ -103,29 +98,19 @@ export default { selectable: true, }, clickedRows: [], -/* table: null, - tableData: []*/ } }, watch: { -/* 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() { - 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, @@ -149,18 +134,7 @@ export default {
-
- - - +

Vertragdetails

- parent: - {{childData}} - + +
+ + +
+ 'core', + 'category' => 'vertrag', + 'phrase' => 'filter_offeneVertraege', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Nur offene Verträge anzeigen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Show only open contracts', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'vertrag', + 'phrase' => 'error_addOrUpdateLehrauftraege', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Fehler beim Hinzufügen bzw. Aktualisieren von Lehraufträgen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Error while adding or updating teaching assignments', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'vertrag', + 'phrase' => 'error_insertOrUpdateStatusVertrag', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Fehler beim Hinzufügen bzw. Aktualisieren des Vertragsstatus', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Error while adding or updating the contract status', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), );