diff --git a/public/js/components/Vertraege/List/Unassigned.js b/public/js/components/Vertraege/List/Unassigned.js index 1ea7d9b3b..d0ed49f49 100644 --- a/public/js/components/Vertraege/List/Unassigned.js +++ b/public/js/components/Vertraege/List/Unassigned.js @@ -57,9 +57,11 @@ export default { ], layout: 'fitColumns', layoutColumnsOnNewData: false, - height: '200', + height: 200, selectableRowsRangeMode: 'click', selectableRows: true, + selectableRowsRollingSelection: false, //only allow multiselect with STRG + index: "lehreinheit_id", persistenceID: 'core-contracts-unassigned' }, tabulatorEvents: [ @@ -67,7 +69,9 @@ export default { event: 'rowClick', handler: (e, row) => { const data = row.getData(); - this.toggleRowClick(data); + + //this.toggleRowClick(e, data); + this.toggleSelect(e, data); } }, { @@ -125,18 +129,18 @@ export default { } }, watch: { - //TODO(Manu) check if still working + //TODO(Manu) check person_id() { this.$refs.table.reloadTable(); //this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + this.person_id); }, - clickedRows() { +/* clickedRows() { this.$refs.table.reloadTable(); //this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + this.person_id); - }, + },*/ }, methods: { - toggleRowClick(rowData){ +/* toggleRowClick(rowData){ // check row const exists = this.clickedRows.some(row => JSON.stringify(row) === JSON.stringify(rowData)); @@ -147,10 +151,48 @@ export default { } else { this.clickedRows.push(rowData); this.sumBetragLehrauftraege += Number(rowData.betrag1); - //console.log(rowData.betrag1); this.handleSumUp(); } + },*/ + toggleSelect(event, rowData) { + + const isCtrlPressed = event.ctrlKey; + + if (!isCtrlPressed) { + + const isSameSingleSelection = + this.clickedRows.length === 1 && + this.clickedRows[0].lehreinheit_id === rowData.lehreinheit_id; + + if (isSameSingleSelection) { + this.clickedRows = []; + this.sumBetragLehrauftraege = 0; + } else { + this.clickedRows = [rowData]; + this.sumBetragLehrauftraege = Number(rowData.betrag1); + } + } + + // Multiselect + else { + + const exists = this.clickedRows.some( + row => row.lehreinheit_id === rowData.lehreinheit_id + ); + + if (exists) { + this.clickedRows = this.clickedRows.filter( + row => row.lehreinheit_id !== rowData.lehreinheit_id + ); + this.sumBetragLehrauftraege -= Number(rowData.betrag1); + } else { + this.clickedRows.push(rowData); + this.sumBetragLehrauftraege += Number(rowData.betrag1); + } + } + + this.handleSumUp(); }, emitSaveEvent() { this.$emit('saveClickedRows', this.clickedRows); @@ -164,6 +206,21 @@ export default { this.$emit("sum-updated", this.sumBetragLehrauftraege); }, }, + /* +

{{$p.t('vertrag', 'text_addLehrauftrag')}}

+ +
+
+ +
+
+ */ template: `

{{$p.t('vertrag', 'text_explainLehrauftrag')}}

@@ -176,18 +233,5 @@ export default { > -

{{$p.t('vertrag', 'text_addLehrauftrag')}}

- -
-
- -
-
` } \ No newline at end of file diff --git a/public/js/components/Vertraege/Vertraege.js b/public/js/components/Vertraege/Vertraege.js index f980d8117..1f891ae8a 100644 --- a/public/js/components/Vertraege/Vertraege.js +++ b/public/js/components/Vertraege/Vertraege.js @@ -132,6 +132,7 @@ export default { height: '250', selectableRowsRangeMode: 'click', selectableRows: true, + selectableRowsRollingSelection: false, //only allow multiselect with STRG index: "vertrag_id", persistence: { sort: true, @@ -179,7 +180,7 @@ export default { });*/ } }, - { +/* { //is just enabled for ADDON Injection KU: MultiprintHonorarvertrag //(maybe enable also for ADDON FH Burgenland: MultiAccept later) event: 'rowClick', @@ -192,6 +193,16 @@ export default { this.toggleRowClick(selectedContract, status, bezeichnung); } } + },*/ + { + event: 'rowClick', + handler: (e, row) => { + if (!this.dataPrintHonorar?.multiselect) return; + + const { vertrag_id, status, bezeichnung, vertragstyp_bezeichnung } = row.getData(); + + this.toggleRowClick(e, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung); + } }, { event: "dataProcessed", @@ -234,6 +245,8 @@ export default { person_id() { this.$refs.table.reloadTable(); this.arraySelectedContracts = []; +/* if(this.dataPrintHonorar?.multiselect) + this.dataPrintHonorar.multiselect = [];*/ }, }, methods: { @@ -350,11 +363,12 @@ export default { return this.$refs.contractstati.$refs.statusData .call(this.endpoint.insertContractStatus(params)) .then(response => { - //this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.$refs.contractstati.closeModal(); this.$refs.contractstati.reload(); - //this.reload(); //focus get lost with reload + this.pendingSelectId = params.vertrag_id; + this.reload(); }) .catch(this.$fhcAlert.handleSystemError); }, @@ -395,7 +409,8 @@ export default { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.$refs.contractstati.closeModal(); this.$refs.contractstati.reload(); - //this.reload(); //focus gets lost with reload + this.pendingSelectId = params.vertrag_id; + this.reload(); }) .catch(this.$fhcAlert.handleSystemError); }, @@ -489,7 +504,7 @@ export default { } //check if status=="Genehmigt" - const statusNotGenehmigtExists = this.arraySelectedContracts.some(([_, status]) => status !== 'Genehmigt'); + const statusNotGenehmigtExists = this.arraySelectedContracts.some(v => v.status !== 'Genehmigt'); if(statusNotGenehmigtExists) { this.$fhcAlert.alertError(this.$p.t('vertrag', 'alertOnlyApprovedContracts')); return; @@ -499,14 +514,14 @@ export default { let vertragString = ''; this.arraySelectedContracts.forEach(element => { - vertragString += '&vertrag_id[]=' + element[0].toString(); + vertragString += '&vertrag_id[]=' + element.vertrag_id.toString(); }); let linkToPdf = this.dataPrintHonorar.link + '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) { +/* toggleRowClick(contractId, status, bezeichnung) { const index = this.arraySelectedContracts.findIndex( ([id]) => id === contractId ); @@ -515,10 +530,41 @@ export default { } else { this.arraySelectedContracts.push([contractId, status, bezeichnung]); } + },*/ + toggleRowClick(event, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung) { + if (!this.dataPrintHonorar?.multiselect) return; + + const isCtrl = event.ctrlKey || event.metaKey; + + const entry = { + vertrag_id, + status, + bezeichnung, + vertragstyp_bezeichnung + }; + + // Single click + if (!isCtrl) { + this.arraySelectedContracts = [entry]; + 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(){ +/* clearSelection(){ this.arraySelectedContracts = []; - } + this.$refs.table.tabulator.deselectRow(); + }*/ }, created() { Promise.all([ @@ -544,33 +590,28 @@ export default { }); this.getFormattedDate(); }, - template: ` -
+ /* +