From 3c0ab51f874512107774af3fe62c3c19b0f2e45e Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Mon, 8 Dec 2025 17:49:24 +0200 Subject: [PATCH] fix: Improve bank/cash register display and exports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Truncate explicatia field to 100 characters in table, Excel, and PDF exports - Fix summary stats to separate opening balance from transactions: - Show Sold Precedent (from rows with null date) - Show Încasări and Plăți (only from actual transactions) - Show Sold Final (calculated correctly) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- reports-app/frontend/src/utils/exportUtils.js | 9 +- .../src/views/BankCashRegisterView.vue | 85 ++++++++++++++----- 2 files changed, 70 insertions(+), 24 deletions(-) diff --git a/reports-app/frontend/src/utils/exportUtils.js b/reports-app/frontend/src/utils/exportUtils.js index e32480b..b4641a2 100644 --- a/reports-app/frontend/src/utils/exportUtils.js +++ b/reports-app/frontend/src/utils/exportUtils.js @@ -477,6 +477,13 @@ export const exportBankCashRegisterPDF = (data, header, filename) => { .replace(/[ț]/gi, (m) => (m === m.toLowerCase() ? "t" : "T")); }; + // Truncate text helper (limit explicatia to 100 chars) + const truncateText = (text, maxLength = 100) => { + if (!text) return ""; + if (text.length <= maxLength) return text; + return text.substring(0, maxLength) + "..."; + }; + // Group data by bank account (bancasa) const groupedByBank = {}; const initialBalances = {}; @@ -696,7 +703,7 @@ export const exportBankCashRegisterPDF = (data, header, filename) => { tableRows.push([ dateFormatted, row.nract || "", - removeDiacritics(row.explicatia || row.nume || ""), + truncateText(removeDiacritics(row.explicatia || row.nume || ""), 100), formatNumberForPDF(incasari), formatNumberForPDF(plati), formatNumberForPDF(row.sold), diff --git a/reports-app/frontend/src/views/BankCashRegisterView.vue b/reports-app/frontend/src/views/BankCashRegisterView.vue index 571efb6..75a24a8 100644 --- a/reports-app/frontend/src/views/BankCashRegisterView.vue +++ b/reports-app/frontend/src/views/BankCashRegisterView.vue @@ -141,23 +141,31 @@
- Total Încasări: - {{ - formatCurrency(treasuryStore.totals.total_incasari) - }} -
-
- Total Plăți: - {{ - formatCurrency(treasuryStore.totals.total_plati) - }} -
-
- Total Sold: + Sold Precedent: {{ formatCurrency(totalSold) }}{{ formatCurrency(computedTotals.soldPrecedent) }} +
+
+ Încasări: + {{ + formatCurrency(computedTotals.incasari) + }} +
+
+ Plăți: + {{ + formatCurrency(computedTotals.plati) + }} +
+
+ Sold Final: + {{ formatCurrency(computedTotals.soldFinal) }}
@@ -262,7 +270,11 @@ field="explicatia" header="Explicație" class="col-explicatie" - /> + > + + @@ -330,12 +342,39 @@ const formatDate = (dateString) => { return format(new Date(dateString), "dd.MM.yyyy"); }; -// Computed total sold (incasari - plati) -const totalSold = computed(() => { - return ( - (treasuryStore.totals.total_incasari || 0) - - (treasuryStore.totals.total_plati || 0) - ); +// Truncate text to maxLength characters +const truncateText = (text, maxLength = 100) => { + if (!text) return ""; + if (text.length <= maxLength) return text; + return text.substring(0, maxLength) + "..."; +}; + +// Computed totals - separate sold precedent from actual transactions +// Rows with dataact = null are opening balances (sold precedent) +const computedTotals = computed(() => { + let soldPrecedent = 0; + let incasari = 0; + let plati = 0; + + treasuryStore.registers.forEach((row) => { + if (row.dataact === null || row.dataact === undefined) { + // Opening balance row - the sold value is the opening balance + soldPrecedent += parseFloat(row.sold) || 0; + } else { + // Transaction row + incasari += parseFloat(row.incasari) || 0; + plati += parseFloat(row.plati) || 0; + } + }); + + const soldFinal = soldPrecedent + incasari - plati; + + return { + soldPrecedent, + incasari, + plati, + soldFinal, + }; }); // Check if current filter is a VALUTA type (to show Valuta column) @@ -623,7 +662,7 @@ const exportExcel = async () => { baseData["Încasări"] = parseFloat(row.incasari) || 0; baseData["Plăți"] = parseFloat(row.plati) || 0; baseData["Sold Cumulat"] = parseFloat(row.sold) || 0; - baseData["Explicație"] = row.explicatia || ""; + baseData["Explicație"] = truncateText(row.explicatia, 100); return baseData; });