diff --git a/public/js/components/Vertraege/List/Details.js b/public/js/components/Vertraege/List/Details.js index 8df6a6985..c43f8c893 100644 --- a/public/js/components/Vertraege/List/Details.js +++ b/public/js/components/Vertraege/List/Details.js @@ -41,8 +41,8 @@ export default { ), ajaxResponse: (url, params, response) => response.data, columns: [ - {title: "Typ", field: "type"}, - {title: "Betrag", field: "betrag", + {title: "Typ", field: "type", headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}}, + {title: "Betrag", field: "betrag", headerFilter: true, formatter: function(cell) { let value = cell.getValue(); if (value == null) { @@ -51,14 +51,14 @@ export default { return parseFloat(value).toFixed(2); } }, - {title: "Bezeichnung", field: "bezeichnung"}, - {title: "Studiensemester", field: "studiensemester_kurzbz"}, - {title: "Pruefung_id", field: "pruefung_id", visible: false}, - {title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false}, - {title: "projektarbeit_id", field: "projektarbeit_id", visible: false}, - {title: "lehreinheit_id", field: "lehreinheit_id", visible: true}, - {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false}, - {title: "vertrag_id", field: "vertrag_id", visible: false}, //just for testing + {title: "Bezeichnung", field: "bezeichnung", headerFilter: true}, + {title: "Studiensemester", field: "studiensemester_kurzbz", headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}}, + {title: "Pruefung_id", field: "pruefung_id", visible: false, headerFilter: true}, + {title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false, headerFilter: true}, + {title: "projektarbeit_id", field: "projektarbeit_id", visible: false, headerFilter: true}, + {title: "lehreinheit_id", field: "lehreinheit_id", visible: true, headerFilter: true}, + {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false, headerFilter: true}, + {title: "vertrag_id", field: "vertrag_id", visible: false, headerFilter: true}, //just for testing { title: 'Aktionen', field: 'actions', minWidth: 50, @@ -110,10 +110,10 @@ export default { ], layout: 'fitColumns', layoutColumnsOnNewData: false, - height: '200', + height: '250', selectableRowsRangeMode: 'click', selectableRows: true, - persistenceID: 'core-contracts-details-2026021701' + persistenceID: 'core-contracts-details-2026050501' }, tabulatorEvents: [ { @@ -137,7 +137,7 @@ export default { setHeader('type', this.$p.t('global', 'typ')); setHeader('bezeichnung', this.$p.t('ui', 'bezeichnung')); - setHeader('lehreinheit_id', this.$p.t('ui', 'lehreinheit_id')); + setHeader('lehreinheit_id', this.$p.t('lehre', 'lehreinheit_id')); setHeader('betrag', this.$p.t('ui', 'betrag')); setHeader('studiensemester_kurzbz', this.$p.t('lehre', 'studiensemester')); setHeader('mitarbeiter_uid', this.$p.t('ui', 'mitarbeiter_uid')); diff --git a/public/js/components/Vertraege/List/Status.js b/public/js/components/Vertraege/List/Status.js index 531b2f553..53af7bc40 100644 --- a/public/js/components/Vertraege/List/Status.js +++ b/public/js/components/Vertraege/List/Status.js @@ -47,12 +47,13 @@ export default { this.endpoint.getStatiOfContract(this.person_id, this.vertrag_id) ), ajaxResponse: (url, params, response) => response.data, - persistenceID: 'core-contracts-status-2026021701', + persistenceID: 'core-contracts-status-2026050501', columns: [ - {title: "Status", field: "bezeichnung"}, + {title: "Status", field: "bezeichnung", headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}}, { title: "Datum", field: "datum", + headerFilter: true, formatter: function (cell) { const dateStr = cell.getValue(); const date = new Date(dateStr); // Convert to Date object @@ -66,14 +67,15 @@ export default { }); } }, - {title: "vertrag_id", field: "vertrag_id", visible: false}, - {title: "Vertragsstatus", field: "vertragsstatus_kurzbz", visible: false}, - {title: "User", field: "mitarbeiter_uid", visible: false}, - {title: "insertvon", field: "insertvon", visible: false}, + {title: "vertrag_id", field: "vertrag_id", visible: false, headerFilter: true}, + {title: "Vertragsstatus", field: "vertragsstatus_kurzbz", visible: false, headerFilter: true}, + {title: "User", field: "mitarbeiter_uid", visible: false, headerFilter: true}, + {title: "insertvon", field: "insertvon", visible: false, headerFilter: true}, { title: "insertamum", field: "insertamum", visible: false, + headerFilter: true, formatter: function (cell) { const dateStr = cell.getValue(); const date = new Date(dateStr); @@ -87,11 +89,12 @@ export default { }); } }, - {title: "updatevon", field: "updatevon", visible: false}, + {title: "updatevon", field: "updatevon", visible: false, headerFilter: true}, { title: "updateamum", field: "updateamum", visible: false, + headerFilter: true, formatter: function (cell) { const dateStr = cell.getValue(); const date = new Date(dateStr); @@ -148,7 +151,7 @@ export default { ], layout: 'fitColumns', layoutColumnsOnNewData: false, - height: '200', + height: '250', selectableRowsRangeMode: 'click', selectableRows: true, }, diff --git a/public/js/components/Vertraege/List/Unassigned.js b/public/js/components/Vertraege/List/Unassigned.js index 655a2b078..1b4b728e7 100644 --- a/public/js/components/Vertraege/List/Unassigned.js +++ b/public/js/components/Vertraege/List/Unassigned.js @@ -30,10 +30,11 @@ export default { ), ajaxResponse: (url, params, response) => response.data, columns: [ - {title: "Typ", field: "type", width: 100}, + {title: "Typ", field: "type", width: 100, headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}}, { title: "Betrag", field: "betrag1", + headerFilter: true, formatter: function(cell) { let value = cell.getValue(); if (value == null) { @@ -41,28 +42,29 @@ export default { } return parseFloat(value).toFixed(2); }}, - {title: "Bezeichnung", field: "bezeichnung", width: 150}, - {title: "Studiensemester", field: "studiensemester_kurzbz", width: 160}, - {title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false}, - {title: "projektarbeit_id", field: "projektarbeit_id", visible: false}, - {title: "lehreinheit_id", field: "lehreinheit_id", visible: true}, - {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false}, - {title: "Vertragsstunden", field: "vertragsstunden", visible: false}, - {title: "vertrag_id", field: "vertrag_id", visible: false}, //just for testing + {title: "Bezeichnung", field: "bezeichnung", width: 150, headerFilter: true}, + {title: "Studiensemester", field: "studiensemester_kurzbz", width: 160, headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}}, + {title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false, headerFilter: true}, + {title: "projektarbeit_id", field: "projektarbeit_id", visible: false, headerFilter: true}, + {title: "lehreinheit_id", field: "lehreinheit_id", visible: true, headerFilter: true}, + {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false, headerFilter: true}, + {title: "Vertragsstunden", field: "vertragsstunden", visible: false, headerFilter: true}, + {title: "vertrag_id", field: "vertrag_id", visible: false, headerFilter: true}, //just for testing { title: "VertragsstundenStudiensemester", field: "vertragsstunden_studiensemester_kurzbz", - visible: false + visible: false, + headerFilter: true }, ], layout: 'fitColumns', layoutColumnsOnNewData: false, - height: 150, + height: 250, selectableRowsRangeMode: 'click', selectableRows: true, selectableRowsRollingSelection: false, //only allow multiselect with STRG index: "lehreinheit_id", - persistenceID: 'core-contracts-unassigned-2026021701' + persistenceID: 'core-contracts-unassigned-2026050501' }, tabulatorEvents: [ { @@ -100,7 +102,7 @@ export default { setHeader('type', this.$p.t('global', 'typ')); setHeader('bezeichnung', this.$p.t('ui', 'bezeichnung')); - setHeader('lehreinheit_id', this.$p.t('ui', 'lehreinheit_id')); + setHeader('lehreinheit_id', this.$p.t('lehre', 'lehreinheit_id')); setHeader('betrag1', this.$p.t('ui', 'betrag')); setHeader('studiensemester_kurzbz', this.$p.t('lehre', 'studiensemester')); setHeader('mitarbeiter_uid', this.$p.t('ui', 'mitarbeiter_uid')); diff --git a/public/js/components/Vertraege/Vertraege.js b/public/js/components/Vertraege/Vertraege.js index d4d65e428..b166e71ba 100644 --- a/public/js/components/Vertraege/Vertraege.js +++ b/public/js/components/Vertraege/Vertraege.js @@ -20,9 +20,6 @@ export default { ContractStati }, inject: { -/* cisRoot: { - from: 'cisRoot' - },*/ hasSchreibrechte: { from: 'hasSchreibrechte', default: false @@ -54,9 +51,9 @@ export default { ), ajaxResponse: (url, params, response) => response.data, columns: [ - {title: "Bezeichnung", field: "bezeichnung", width: 300}, + {title: "Bezeichnung", field: "bezeichnung", width: 300, headerFilter: true}, { - title: "Betrag", field: "betrag", width: 100, + title: "Betrag", field: "betrag", width: 100, headerFilter: true, formatter: function (cell) { let value = cell.getValue(); @@ -66,12 +63,13 @@ export default { return parseFloat(value).toFixed(2); } }, - {title: "Vertragstyp", field: "vertragstyp_bezeichnung", width: 125}, - {title: "Status", field: "status", width: 100}, + {title: "Vertragstyp", field: "vertragstyp_bezeichnung", width: 125, headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}}, + {title: "Status", field: "status", width: 100, headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}}, { title: "Vertragsdatum", field: "vertragsdatum", width: 128, + headerFilter: true, formatter: function (cell) { const dateStr = cell.getValue(); const date = new Date(dateStr); @@ -82,11 +80,11 @@ export default { }); } }, - {title: "VertragId", field: "vertrag_id", visible: false}, - {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: "VertragId", field: "vertrag_id", visible: false, headerFilter: true}, + {title: "Vertragsstunden", field: "vertragsstunden", visible: false, headerFilter: true}, + {title: "VertragsstundenStudiensemester", field: "vertragsstunden_studiensemester_kurzbz", visible: false, headerFilter: true}, + {title: "Anmerkung", field: "anmerkung", visible: false, headerFilter: true}, + {title: "isAbgerechnet", field: "isabgerechnet", visible: false, headerFilter: true}, { title: 'Aktionen', field: 'actions', minWidth: 150, @@ -140,11 +138,13 @@ export default { columns: true, filter: false //to avoids js errors }, - persistenceID: 'core-contracts-2026021701', + persistenceID: 'core-contracts-2026050501', }; return options; }, tabulatorEvents() { + const vm = this; + const events = [ { event: 'tableBuilt', @@ -177,28 +177,11 @@ export default { setHeader('actions', this.$p.t('global', 'aktionen')); } }, -/* { - //is just enabled for ADDON Injection KU: MultiprintHonorarvertrag - //(maybe enable also for ADDON FH Burgenland: MultiAccept later) - event: 'rowClick', - handler: (e, row) => { - if (this.dataPrintHonorar != null && this.dataPrintHonorar.multiselect != null) { - const selectedContract = row.getData().vertrag_id; - const status = row.getData().status; - const bezeichnung = row.getData().bezeichnung; - - this.toggleRowClick(selectedContract, status, bezeichnung); - } - } - },*/ { event: 'rowClick', - handler: (e, row) => { - if (!this.dataPrintHonorar?.multiselect) return; - + handler: function (e, row) { const { vertrag_id, status, bezeichnung, vertragstyp_bezeichnung } = row.getData(); - - this.toggleRowClick(e, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung); + vm.toggleRowClick(e, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung); } }, { @@ -242,8 +225,6 @@ export default { person_id() { this.$refs.table.reloadTable(); this.arraySelectedContracts = []; -/* if(this.dataPrintHonorar?.multiselect) - this.dataPrintHonorar.multiselect = [];*/ }, }, methods: { @@ -270,7 +251,6 @@ export default { ) .then(result => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); - //window.scrollTo(0, 0); this.reload(); this.contractSelected.vertrag_id = null; }) @@ -518,19 +498,9 @@ export default { 'content/pdfExport.php?xml=' + this.dataPrintHonorar.xml + '&xsl=' + this.dataPrintHonorar.xsl + '&mitarbeiter_uid=' + this.mitarbeiter_uid + vertragString + '&output=pdf&uid=' + this.mitarbeiter_uid; window.open(linkToPdf, '_blank'); }, -/* toggleRowClick(contractId, status, bezeichnung) { - const index = this.arraySelectedContracts.findIndex( - ([id]) => id === contractId - ); - if (index !== -1) { - this.arraySelectedContracts.splice(index, 1); - } else { - this.arraySelectedContracts.push([contractId, status, bezeichnung]); - } - },*/ toggleRowClick(event, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung) { - if (!this.dataPrintHonorar?.multiselect) return; + const isMulti = this.dataPrintHonorar?.multiselect === true; const isCtrl = event.ctrlKey || event.metaKey; const entry = { @@ -540,28 +510,29 @@ export default { vertragstyp_bezeichnung }; - // Single click - if (!isCtrl) { + // allow MultiSelect just in case event multiActionPrintHonorarvertrag + const allowMultiClick = isMulti && isCtrl; + + if (!allowMultiClick) { this.arraySelectedContracts = [entry]; + + //just mark last selected row as selected + this.$refs.table.tabulator.deselectRow(); + this.$refs.table.tabulator.selectRow(vertrag_id); return; } - // CTRL / CMD → toggle const index = this.arraySelectedContracts.findIndex( e => e.vertrag_id === vertrag_id ); if (index === -1) { this.arraySelectedContracts.push(entry); - //this.arraySelectedContracts.push([entry.vertrag_id, entry.status, entry.bezeichnung, entry.vertragstyp_bezeichnung]); } else { this.arraySelectedContracts.splice(index, 1); } - }, -/* clearSelection(){ - this.arraySelectedContracts = []; - this.$refs.table.tabulator.deselectRow(); - }*/ + + } }, created() { Promise.all([ @@ -587,88 +558,6 @@ export default { }); this.getFormattedDate(); }, - /* - TODO(Manu) delete after check - -
- - -
- -
- - -
-
- - - - -
-
- - -
-
- - -
-
- - -
-
- - -
- */ template: `