From edec670ee02bbc726ea242fd1c4eea51cecef043 Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Thu, 23 Apr 2026 21:06:44 +0200 Subject: [PATCH] =?UTF-8?q?Eingangsbelege=20um=20offenen=20Betrag=20erg?= =?UTF-8?q?=C3=A4nzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/pages/incomingInvoices/index.vue | 26 ++++++++++++++++++++--- frontend/stores/data.js | 4 ++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/frontend/pages/incomingInvoices/index.vue b/frontend/pages/incomingInvoices/index.vue index 6b25fff..c56b146 100644 --- a/frontend/pages/incomingInvoices/index.vue +++ b/frontend/pages/incomingInvoices/index.vue @@ -58,6 +58,7 @@ const isPreparing = ref(false) const type = "incominginvoices" const dataType = dataStore.dataTypes[type] +const openAmountColumnKey = "openAmount" const setupPage = async () => { items.value = await useEntities(type).select("*, vendor(id,name), statementallocations(id,amount)",sort.value.column,sort.value.direction === "asc") @@ -93,7 +94,13 @@ const prepareInvoices = async () => { setupPage() -const selectedColumns = ref(tempStore.columns[type] ? tempStore.columns[type] : dataType.templateColumns.filter(i => !i.disabledInTable)) +const selectedColumns = ref(tempStore.columns[type] ? [...tempStore.columns[type]] : dataType.templateColumns.filter(i => !i.disabledInTable)) +if (!selectedColumns.value.find((column) => column.key === openAmountColumnKey)) { + const openAmountColumn = dataType.templateColumns.find((column) => column.key === openAmountColumnKey) + if (openAmountColumn) { + selectedColumns.value.splice(5, 0, openAmountColumn) + } +} const columns = computed(() => dataType.templateColumns.filter((column) => !column.disabledInTable && selectedColumns.value.find(i => i.key === column.key))) const selectableFilters = ref(dataType.filters.map(i => i.name)) @@ -142,10 +149,18 @@ const getInvoiceSum = (invoice) => { return sum.toFixed(2) } -const isPaid = (item) => { +const getPaidAmount = (item) => { let amountPaid = 0 item.statementallocations.forEach(allocation => amountPaid += allocation.amount) - return Math.abs(amountPaid) === Math.abs(Number(getInvoiceSum(item))) + return Number(Math.abs(amountPaid).toFixed(2)) +} + +const isPaid = (item) => { + return getPaidAmount(item) >= Number(Math.abs(Number(getInvoiceSum(item))).toFixed(2)) +} + +const getOpenAmount = (item) => { + return Number(Math.max(0, Number(getInvoiceSum(item)) - getPaidAmount(item)).toFixed(2)) } const unwrapInvoiceRow = (invoiceLike) => invoiceLike?.original || invoiceLike @@ -283,6 +298,11 @@ const selectIncomingInvoice = (invoiceLike) => { + diff --git a/frontend/stores/data.js b/frontend/stores/data.js index 81838fa..341e4ab 100644 --- a/frontend/stores/data.js +++ b/frontend/stores/data.js @@ -2200,6 +2200,10 @@ export const useDataStore = defineStore('data', () => { key: "amount", label: "Betrag", }, + { + key: "openAmount", + label: "Offener Betrag", + }, { key: "dueDate", label: "Fälligkeitsdatum",