filter offene Vertraege, validations insert, update Contract

This commit is contained in:
ma0068
2024-11-12 07:57:46 +01:00
parent 023fafde2c
commit 5751441424
6 changed files with 203 additions and 98 deletions
@@ -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) {
@@ -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)
+2 -28
View File
@@ -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 {
<!--TODO(Manu) nicht anzeigen, wenn keine vorhanden ? check css, design -->
<div class="core-vertraege-details h-50 d-flex flex-column w-100">
<br>
<!-- <div>
&lt;!&ndash; Tabulator-Container &ndash;&gt;
<div ref="table"></div>
&lt;!&ndash; Ausgabe der Daten &ndash;&gt;
<div v-for="row in tableData" :key="row.id">
<p>{{ row.name }} - {{ row.value }}</p>
</div>
</div>-->
<br>
<h4>Vertragdetails</h4>
<core-filter-cmpt
@@ -90,11 +90,9 @@ export default {
//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);
},
clickedRows() {
console.log("clicked rows changed");
this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + this.person_id);
},
},
@@ -132,18 +130,15 @@ export default {
},
emitSaveEvent() {
// Emit ein Event und übergebe clickedRows an die Parent-Komponente
this.$emit('saveClickedRows', this.clickedRows);
},
reloadUnassigned() {
this.$refs.table.reloadTable();
this.$emit('reloadUnassigned');
this.clickedRows = [];
// console.log("clickedRows", this.clickedRows);
},
handleSumUp() {
//this.localValue += 1; // Increment the local value
this.$emit("sum-updated", this.sumBetragLehrauftraege); // Emit the updated value to the parent
this.$emit("sum-updated", this.sumBetragLehrauftraege);
},
},
mounted() {
+28 -4
View File
@@ -57,6 +57,7 @@ export default {
{title: "Vertragsstunden", field: "vertragsstunden", visible: false},
{title: "VertragsstundenStudiensemester", field: "vertragsstunden_studiensemester_kurzbz", visible: false},
{title: "Anmerkung", field: "anmerkung", visible: false},
{title: "isAbgerechnet", field: "isabgerechnet", visible: false},
{
title: 'Aktionen', field: 'actions',
minWidth: 150,
@@ -136,7 +137,8 @@ export default {
vertragsstatus_kurzbz: 'test',
datum: new Date(),
},
childData: {}
childData: {},
isFilterSet: false
}
},
watch: {
@@ -151,7 +153,9 @@ export default {
this.$refs.contractModal.show();
},
actionEditContract(vertrag_id) {
this.resetModal();
this.statusNew = false;
//TODO(Manu) reload Assigned!!
this.$refs.unassignedLehrauftraege.reloadUnassigned();
this.loadContract(vertrag_id)
.then(this.$refs.contractModal.show);
@@ -186,6 +190,7 @@ export default {
this.$refs.contractModal.hide();
this.resetModal();
//this.$refs.contractdetails.reload(); //TOOD(Manu) check why error
//this.$refs.contractdetails.reload();
this.$refs.unassignedLehrauftraege.reloadUnassigned();
this.reload();
})
@@ -208,6 +213,7 @@ export default {
this.$refs.contractModal.hide();
this.resetModal();
this.$refs.unassignedLehrauftraege.reloadUnassigned();
this.$refs.contractdetails.reload();
this.reload();
})
.catch(this.$fhcAlert.handleSystemError);
@@ -312,6 +318,7 @@ export default {
//window.scrollTo(0, 0);
this.$refs.contractstati.closeModal();
this.$refs.contractstati.reload();
this.reload();
})
.catch(this.$fhcAlert.handleSystemError);
},
@@ -358,6 +365,14 @@ export default {
return `${year}${month}${day}`; // Format: YYYYMMDD
},
onSwitchChange() {
if (this.isFilterSet) {
this.$refs.table.tabulator.setFilter("isabgerechnet", "!=", true);
}
else {
this.$refs.table.tabulator.clearFilter("status");
}
},
},
created() {
Promise.all([
@@ -385,9 +400,18 @@ export default {
<div class="core-vertraege h-100 d-flex flex-column">
parent:
{{childData}}
<!-- filter: open means no status abgerechnet yet-->
<div class="justify-content-end pb-3">
<form-input
container-class="form-switch"
type="checkbox"
:label="$p.t('vertrag/filter_offeneVertraege')"
v-model="isFilterSet"
@change="onSwitchChange"
>
</form-input>
</div>
<core-filter-cmpt
ref="table"
:tabulator-options="tabulatorOptions"
+60
View File
@@ -31247,6 +31247,66 @@ array(
)
)
),
array(
'app' => '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'
)
)
),
);