add and update Lehrauftraege, logic sumup beträge

This commit is contained in:
ma0068
2024-11-08 13:29:19 +01:00
parent 9fd9c4e94d
commit 2d0285e31d
8 changed files with 618 additions and 112 deletions
@@ -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)));
}
}
@@ -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)
+29 -4
View File
@@ -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('/'));
}
}
+73 -12
View File
@@ -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 = '<i class="fa fa-xmark"></i>';
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: `
<!--TODO(Manu) check css, design -->
<!--TODO(Manu) nicht anzeigen, wenn keine vorhanden ? check css, design -->
<div class="core-vertraege h-50 d-flex flex-column w-100">
person_id: {{person_id}}
<br>
vertrag_id: {{vertrag_id}}
<div>
<!-- Tabulator-Container -->
<div ref="table"></div>
@@ -106,7 +166,8 @@ export default {
ref="table"
:tabulator-options="tabulatorOptions"
table-only
:side-menu="false"
:side-menu="false"
reload
>
</core-filter-cmpt>
</div>`
@@ -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},
{
@@ -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 {
<!--TODO(Manu) check css, design .. mybe list.js-->
<div class="core-vertraege h-50 d-flex flex-column w-100">
{{clickedRows}}
<!-- {{clickedRows}} <hr> sum: {{sumBetragLehrauftraege}}-->
<!--TODO(Manu) nicht anzeigen wenn keine vertraege vorhanden, "KEINE DATEN vorhanden"-->
<p>Die folgenden Lehraufträge sind noch keinem Vertrag zugeordnet. Markieren Sie die Lehraufträge um diese dem Vertrag zuzuordnen:</p>
<core-filter-cmpt
ref="table"
:tabulator-options="tabulatorOptions"
table-only
:side-menu="false"
:side-menu="false"
>
</core-filter-cmpt>
</core-filter-cmpt>
<p v-if="clickedRows.length > 0" >Folgende Lehraufträge werden hinzugefügt:</p>
<div v-for="item in clickedRows" :key="item.lehreinheit_id" class="row">
<div class="col-md-6">
<input
class="form-control"
type="text"
:value="item.type + ' | ' + item.studiensemester_kurzbz + ' | ' + item.bezeichnung + ' ( lehreinheit_id: ' + item.lehreinheit_id + ')'"
aria-label="readonly input example"
readonly
>
</div>
</div>
</div>`
}
+133 -28
View File
@@ -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: `
<div class="core-vertraege h-100 d-flex flex-column">
parent:
{{childData}}
<core-filter-cmpt
ref="table"
:tabulator-options="tabulatorOptions"
@@ -317,22 +404,28 @@ export default {
<div class="col-sm-6">
<!-- ContractDetails -->
<div class="md-4" v-if="contractSelected.vertrag_id !=null">
<contract-details :person_id="person_id" :vertrag_id="contractSelected.vertrag_id"></contract-details>
<contract-details
:person_id="person_id"
:vertrag_id="contractSelected.vertrag_id"
@deleteLehrauftrag="deleteLehrauftrag"
@deleteBetreuung="deleteBetreuung"
ref="contractdetails"
></contract-details>
</div>
</div>
<div class="col-sm-6">
<!-- ContractStati -->
<div class="md-4" v-if="contractSelected.vertrag_id !=null">
<contract-stati
:vertrag_id="contractSelected.vertrag_id"
:listContractStati="listContractStati"
:formDataParent="contractFormData"
@setContractStatus="addNewContractStatus"
@deleteContractStatus="deleteContractStatus"
@updateContractStatus="updateContractStatus"
@loadContractStatus="loadContractStatus"
ref="contractstati"
:vertrag_id="contractSelected.vertrag_id"
:listContractStati="listContractStati"
:formDataParent="contractFormData"
@setContractStatus="addNewContractStatus"
@deleteContractStatus="deleteContractStatus"
@updateContractStatus="updateContractStatus"
@loadContractStatus="loadContractStatus"
ref="contractstati"
></contract-stati>
</div>
</div>
@@ -342,18 +435,30 @@ export default {
<!--Modal: contractModal-->
<bs-modal ref="contractModal" dialog-class="modal-xl">
<template #title>
<p v-if="statusNew" class="fw-bold mt-3">{{$p.t('ui', 'add_contract')}}</p>
<p v-else class="fw-bold mt-3">{{$p.t('ui', 'edit_contract')}}</p>
<p v-if="statusNew" class="fw-bold mt-3">{{$p.t('vertrag', 'addVertrag')}}</p>
<p v-else class="fw-bold mt-3">{{$p.t('vertrag', 'editVertrag')}}</p>
</template>
<core-form class="row g-3" ref="unassignedData">
<list-unassigned :endpoint="$fhcApi.factory.vertraege.person" :person_id="person_id"></list-unassigned>
{{formData}}
<!--TODO(Manu) wenn einer gelöscht wird, wird er auch nicht sofort angezeigt
Auswirkung von Vertragdetails of UnassignedList-->
<list-unassigned
:endpoint="$fhcApi.factory.vertraege.person"
:person_id="person_id"
ref="unassignedLehrauftraege"
@saveClickedRows="saveClickedRows"
@sum-updated="updateBetrag"
></list-unassigned>
<hr>
<div class="row mb-3">
<form-input
type="DatePicker"
:label="$p.t('ui/vertragsdatum')"
:label="$p.t('vertrag/datum_vertrag')"
name="vertragsdatum"
v-model="formData.vertragsdatum"
auto-apply
@@ -405,7 +510,7 @@ export default {
<div class="row mb-3" v-if="!statusNew">
<form-input
type="text"
:label="$p.t('ui/Stunden (Vertrags-Urfassung')"
:label="$p.t('ui/stunden') + ' (' + $p.t('vertrag/vertrag_urfassung')+ ')'"
name="vertragsstunden"
v-model="formData.vertragsstunden"
disabled
@@ -416,7 +521,7 @@ export default {
<div class="row mb-3" v-if="!statusNew">
<form-input
type="text"
:label="$p.t('ui/Studiensemester (Vertrags-Urfassung')"
:label="$p.t('lehre/studiensemester') + ' (' + $p.t('vertrag/vertrag_urfassung')+ ')'"
name="vertragsstunden_studiensemester_kurzbz"
v-model="formData.vertragsstunden_studiensemester_kurzbz"
disabled
+82 -1
View File
@@ -31165,7 +31165,88 @@ array(
'insertvon' => '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'
)
)
),
);