Changes Vertragsverwaltung

- refactor from Tabulator 5 to Tabulator 6
- not reloading contract list after changes of Status or Detail to keep row selection
- Start reselection of current row
This commit is contained in:
ma0068
2026-02-06 10:38:29 +01:00
parent 0bf9d8fa8a
commit 1cd332115b
8 changed files with 78 additions and 49 deletions
@@ -238,7 +238,7 @@ class Vertraege extends FHCAPI_Controller
}
}
$this->db->trans_complete();
$this->terminateWithSuccess(true);
$this->terminateWithSuccess($vertrag_id);
}
public function updateContract()
@@ -355,7 +355,7 @@ class Vertraege extends FHCAPI_Controller
}
$this->db->trans_complete();
$this->terminateWithSuccess(true);
$this->terminateWithSuccess($vertrag_id);
}
public function loadContract($vertrag_id)
+1 -1
View File
@@ -8,7 +8,7 @@ $includesArray = array(
'primevue3' => true,
'filtercomponent' => true,
'navigationcomponent' => true,
'tabulator5' => true,
'tabulator6' => true,
'tinymce5' => true,
'phrases' => array(
'global',
@@ -111,8 +111,8 @@ export default {
layout: 'fitColumns',
layoutColumnsOnNewData: false,
height: '200',
selectableRangeMode: 'click',
selectable: true,
selectableRowsRangeMode: 'click',
selectableRows: true,
persistenceID: 'core-contracts-details'
},
tabulatorEvents: [
@@ -47,6 +47,7 @@ export default {
this.endpoint.getStatiOfContract(this.person_id, this.vertrag_id)
),
ajaxResponse: (url, params, response) => response.data,
persistenceID: 'core-contracts-status',
columns: [
{title: "Status", field: "bezeichnung"},
{
@@ -148,9 +149,8 @@ export default {
layout: 'fitColumns',
layoutColumnsOnNewData: false,
height: '200',
selectableRangeMode: 'click',
selectable: true,
persistenceID: 'core-contracts-status'
selectableRowsRangeMode: 'click',
selectableRows: true,
},
tabulatorEvents: [
{
@@ -58,8 +58,8 @@ export default {
layout: 'fitColumns',
layoutColumnsOnNewData: false,
height: '200',
selectableRangeMode: 'click',
selectable: true,
selectableRowsRangeMode: 'click',
selectableRows: true,
persistenceID: 'core-contracts-unassigned'
},
tabulatorEvents: [
@@ -65,8 +65,8 @@ export default {
layout: 'fitColumns',
persistenceID: 'core-mitarbeiter_20250901-2',
footerElement: '<div>&sum; <span id="search_count"></span> / <span id="total_count"></span></div>',
selectableRangeMode: 'click',
selectable: true,
selectableRowsRangeMode: 'click',
selectableRows: true,
},
tabulatorEvents: [
{
+65 -36
View File
@@ -132,8 +132,9 @@ export default {
layout: 'fitColumns',
layoutColumnsOnNewData: false,
height: '250',
selectableRangeMode: 'click',
selectable: true,
selectableRowsRangeMode: 'click',
selectableRows: true,
index: "vertrag_id",
persistence: {
sort: true,
page: true,
@@ -149,38 +150,30 @@ export default {
await this.$p.loadCategory(['ui', 'global', 'vertrag']);
let cm = this.$refs.table.tabulator.columnManager;
const setHeader = (field, text) => {
const col = this.$refs.table.tabulator.getColumn(field);
if (!col) return;
cm.getColumnByField('bezeichnung').component.updateDefinition({
title: this.$p.t('ui', 'bezeichnung')
});
cm.getColumnByField('betrag').component.updateDefinition({
title: this.$p.t('ui', 'betrag')
});
cm.getColumnByField('status').component.updateDefinition({
title: this.$p.t('global', 'status')
});
cm.getColumnByField('vertragstyp_bezeichnung').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragstyp')
});
cm.getColumnByField('vertragsdatum').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragsdatum')
});
cm.getColumnByField('vertragsstunden').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragsstunden')
});
cm.getColumnByField('vertragsstunden_studiensemester_kurzbz').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragsstunden_studiensemester')
});
cm.getColumnByField('vertrag_id').component.updateDefinition({
title: this.$p.t('ui', 'vertrag_id')
});
cm.getColumnByField('anmerkung').component.updateDefinition({
title: this.$p.t('global', 'anmerkung')
});
cm.getColumnByField('isabgerechnet').component.updateDefinition({
title: this.$p.t('vertrag', 'abgerechnet')
});
const el = col.getElement();
if (!el || !el.querySelector) return;
const titleEl = el.querySelector('.tabulator-col-title');
if (titleEl) {
titleEl.textContent = text;
}
};
setHeader('bezeichnung', this.$p.t('ui', 'bezeichnung'));
setHeader('betrag', this.$p.t('ui', 'betrag'));
setHeader('status', this.$p.t('global', 'status'));
setHeader('vertragstyp_bezeichnung', this.$p.t('vertrag', 'vertragstyp'));
setHeader('vertragsdatum', this.$p.t('vertrag', 'vertragsdatum'));
setHeader('vertragsstunden', this.$p.t('vertrag', 'vertragsstunden'));
setHeader('vertragsstunden_studiensemester_kurzbz', this.$p.t('vertrag', 'vertragsstunden_studiensemester'));
setHeader('vertrag_id', this.$p.t('ui', 'vertrag_id'));
setHeader('anmerkung', this.$p.t('global', 'anmerkung'));
setHeader('isabgerechnet', this.$p.t('vertrag', 'abgerechnet'));
setHeader('actions', this.$p.t('global', 'aktionen'));
/* cm.getColumnByField('actions').component.updateDefinition({
title: this.$p.t('global', 'aktionen')
});*/
@@ -265,15 +258,42 @@ export default {
return this.$refs.contractData
.call(this.endpoint.addNewContract(dataToSend))
.then(response => {
//get new ID of request to focus the new entry
let vertrag_id = response.data;
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.$refs.contractModal.hide();
this.resetModal();
//this.$refs.contractdetails.reload();
this.$refs.contractdetails.reload();
this.$refs.unassignedLehrauftraege.reloadUnassigned();
this.reload();
//TODO(Manu) Finish Selection of current dataset
/* this.reload().then(() => {
this.selectRow(vertrag_id);
})*/
})
.catch(this.$fhcAlert.handleSystemError);
},
/* async selectRow(vertrag_id){
console.log("in selectRow " + vertrag_id);
//if (!this.table) return;
if (!this.$refs.table) return;
//this.table.selectRow(this.$refs.table.tabulator.getRows()[0]);
this.$refs.table.tabulator.selectRow(vertrag_id);
// this.$refs.table.tabulator.selectRow("visible");
console.log("Vertrag_id" + vertrag_id);
//console.log(this.$refs.table.tabulator.getRow(vertrag_id));
//this.table.selectRow(vertrag_id);
// this.$refs.table.selectRow(vertrag_id);
},*/
updateContract(vertrag_id) {
this.$refs.unassignedLehrauftraege.emitSaveEvent();
@@ -287,11 +307,20 @@ export default {
.call(this.endpoint.updateContract(dataToSend))
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
//TODO(Manu) get Id from dataToSend
let vertrag_id = response.data;
console.log(vertrag_id);
this.$refs.contractModal.hide();
this.resetModal();
this.$refs.unassignedLehrauftraege.reloadUnassigned();
this.$refs.contractdetails.reload();
this.reload();
//TODO(Manu) Finish Selection of current dataset
/* this.reload().then(() => {
this.selectRow(vertrag_id);
})*/
//this.selectRow(vertrag_id);
})
.catch(this.$fhcAlert.handleSystemError);
},
@@ -331,7 +360,7 @@ export default {
this.$refs.contractstati.closeModal();
this.$refs.contractstati.reload();
this.reload();
//this.reload(); //focus get lost with reload
})
.catch(this.$fhcAlert.handleSystemError);
},
@@ -372,7 +401,7 @@ export default {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.$refs.contractstati.closeModal();
this.$refs.contractstati.reload();
this.reload();
//this.reload(); //focus gets lost with reload
})
.catch(this.$fhcAlert.handleSystemError);
},
@@ -65,7 +65,7 @@ export default {
@redirectToLeitung="handleSelection"
>
<template #uid>{{mitarbeiter_uid}}</template>
<template #titleAlphaTile>pID</template>
<template #titleAlphaTile>persID</template>
<template #valueAlphaTile>{{person_id}}</template>
</fhc-header>
<vertraege-mitarbeiter