From 6e7e7d713031e5b86917aa0f8bb4d6338f99cedc Mon Sep 17 00:00:00 2001 From: Krao Hasanee Date: Thu, 14 May 2026 19:40:50 -0400 Subject: [PATCH] Include paid sub invoices in expenses/profit/year totals --- src/pages/team/Invoices.jsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/pages/team/Invoices.jsx b/src/pages/team/Invoices.jsx index b865e43..808b546 100644 --- a/src/pages/team/Invoices.jsx +++ b/src/pages/team/Invoices.jsx @@ -429,19 +429,25 @@ export default function Invoices() { const paidSubcontractorPOs = subcontractorPOs.filter(po => po.status === 'paid'); const payableSubcontractorPOs = subcontractorPOs.filter(po => ['approved', 'ready_to_pay'].includes(po.status)); const selectedSubcontractorPO = subcontractorPOs.find(po => po.id === selectedSubcontractorPOId); - const totalPaidSubcontractors = paidSubcontractorPOs.reduce((s, po) => s + Number(po.amount), 0); + const subInvoiceItemTotal = (inv) => (inv.items || []).reduce((a, x) => a + Number(x.unit_price || 0) * Number(x.quantity || 1), 0); + const paidSubInvoices = subInvoices.filter(i => i.status === 'paid'); + const totalPaidSubInvoices = paidSubInvoices.reduce((s, i) => s + subInvoiceItemTotal(i), 0); + const totalPaidSubcontractors = paidSubcontractorPOs.reduce((s, po) => s + Number(po.amount), 0) + totalPaidSubInvoices; const totalPayableSubcontractorPOs = payableSubcontractorPOs.reduce((s, po) => s + Number(po.amount), 0); - const totalPayableSubInvoices = subInvoices.filter(i => i.status === 'submitted').reduce((s, i) => s + (i.items || []).reduce((a, x) => a + Number(x.unit_price || 0) * Number(x.quantity || 1), 0), 0); + const totalPayableSubInvoices = subInvoices.filter(i => i.status === 'submitted').reduce((s, i) => s + subInvoiceItemTotal(i), 0); const totalPayableSubcontractors = totalPayableSubcontractorPOs + totalPayableSubInvoices; const payableSubcontractorCount = payableSubcontractorPOs.length + subInvoices.filter(i => i.status === 'submitted').length; const totalExpenses = filteredExpenses.reduce((s, e) => s + Number(e.amount), 0); const currentYear = new Date().getFullYear(); const yearExpenses = expenses.filter(e => new Date(e.date).getFullYear() === currentYear); const currentYearExpenseTotal = yearExpenses.reduce((s, e) => s + Number(e.amount), 0); - const currentYearPaidSubcontractors = paidSubcontractorPOs + const currentYearPaidSubcontractorPOs = paidSubcontractorPOs .filter(po => new Date(po.paid_at || po.date).getFullYear() === currentYear) .reduce((s, po) => s + Number(po.amount), 0); - const currentYearTotalExpenses = currentYearExpenseTotal + currentYearPaidSubcontractors; + const currentYearPaidSubInvoices = paidSubInvoices + .filter(i => new Date(i.paid_at).getFullYear() === currentYear) + .reduce((s, i) => s + subInvoiceItemTotal(i), 0); + const currentYearTotalExpenses = currentYearExpenseTotal + currentYearPaidSubcontractorPOs + currentYearPaidSubInvoices; const revenue = totals.paid; const profit = totals.netReceived - expenses.reduce((s, e) => s + Number(e.amount), 0) - totalPaidSubcontractors;