From e9d2b30603681586c7875cc0a71ee6e748e707c5 Mon Sep 17 00:00:00 2001 From: Jaanus Sellin Date: Fri, 17 Oct 2025 09:49:09 +0300 Subject: [PATCH] feat: add taxes to invoices (#10821) --- .../BillingInvoice/BillingInvoice.tsx | 17 ++++++++--- .../BillingInvoiceFooter.tsx | 29 ++++++++++--------- .../BillingInvoiceMainRow.tsx | 9 ++++-- .../BillingInvoiceUsageRow.tsx | 21 ++++++++++---- 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoice.tsx b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoice.tsx index 9a6133aa24..75c8d5b396 100644 --- a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoice.tsx +++ b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoice.tsx @@ -109,13 +109,14 @@ export const BillingInvoice = ({ invoicePDF, invoiceURL, totalAmount, + subtotal, + taxAmount, + currency, mainLines, usageLines, monthText, defaultExpanded, }: BillingInvoiceProps) => { - const currency = mainLines?.[0]?.currency || usageLines?.[0]?.currency; - const formattedTitle = invoiceDate ? new Date(invoiceDate).toLocaleDateString(undefined, { month: 'long', @@ -181,7 +182,10 @@ export const BillingInvoice = ({ {mainLines.map((line) => ( - + ))} @@ -201,7 +205,10 @@ export const BillingInvoice = ({ {usageLines.map((line) => ( - + ))} @@ -210,6 +217,8 @@ export const BillingInvoice = ({ )} diff --git a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceFooter/BillingInvoiceFooter.tsx b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceFooter/BillingInvoiceFooter.tsx index 5e9e88d5ae..241b322eb5 100644 --- a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceFooter/BillingInvoiceFooter.tsx +++ b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceFooter/BillingInvoiceFooter.tsx @@ -29,7 +29,10 @@ const StyledTableFooterCell = styled('div', { ...(colSpan ? { gridColumn: `span ${colSpan}` } : {}), })); -const TaxRow: FC<{ value?: number }> = ({ value }) => { +const TaxRow: FC<{ value?: number; currency?: string }> = ({ + value, + currency, +}) => { if (value === undefined) { return ( @@ -42,7 +45,9 @@ const TaxRow: FC<{ value?: number }> = ({ value }) => { <> Tax - {formatCurrency(value)} + + {formatCurrency(value, currency)} + ); @@ -63,18 +68,16 @@ export const BillingInvoiceFooter = ({ }: BillingInvoiceFooterProps) => { return ( - {subTotal || !taxAmount ? ( - - Sub total - - - {formatCurrency(subTotal || totalAmount, currency)} - - - - ) : null} - + Sub total + + + {formatCurrency(subTotal || 0, currency)} + + + + + Total diff --git a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceMainRow/BillingInvoiceMainRow.tsx b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceMainRow/BillingInvoiceMainRow.tsx index 9ee578759f..e100a68d3e 100644 --- a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceMainRow/BillingInvoiceMainRow.tsx +++ b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceMainRow/BillingInvoiceMainRow.tsx @@ -12,6 +12,10 @@ const StyledSubText = styled(Typography)(({ theme }) => ({ fontSize: theme.typography.caption.fontSize, })); +type BillingInvoiceMainRowProps = DetailedInvoicesLineSchema & { + invoiceCurrency?: string; +}; + export const BillingInvoiceMainRow = ({ quantity, description, @@ -19,7 +23,8 @@ export const BillingInvoiceMainRow = ({ totalAmount, startDate, endDate, -}: DetailedInvoicesLineSchema) => { + invoiceCurrency, +}: BillingInvoiceMainRowProps) => { const formattedStart = startDate ? new Date(startDate).toLocaleDateString(undefined, { month: 'short', @@ -45,7 +50,7 @@ export const BillingInvoiceMainRow = ({
{quantity ? formatLargeNumbers(quantity) : '–'}
- {formatCurrency(totalAmount || 0, currency)} + {formatCurrency(totalAmount || 0, invoiceCurrency)} ); diff --git a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceUsageRow/BillingInvoiceUsageRow.tsx b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceUsageRow/BillingInvoiceUsageRow.tsx index 4eed74fb5a..59a1039511 100644 --- a/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceUsageRow/BillingInvoiceUsageRow.tsx +++ b/frontend/src/component/admin/billing/BillingInvoices/BillingInvoice/BillingInvoiceUsageRow/BillingInvoiceUsageRow.tsx @@ -15,6 +15,10 @@ const StyledCellWithIndicator = styled('div')(({ theme }) => ({ maxHeight: theme.spacing(2.5), })); +type BillingInvoiceUsageRowProps = DetailedInvoicesLineSchema & { + invoiceCurrency?: string; +}; + export const BillingInvoiceUsageRow = ({ quantity, consumption, @@ -22,12 +26,15 @@ export const BillingInvoiceUsageRow = ({ description, currency, totalAmount, -}: DetailedInvoicesLineSchema) => { + invoiceCurrency, +}: BillingInvoiceUsageRowProps) => { const percentage = limit && limit > 0 ? Math.min(100, Math.round(((consumption || 0) / limit) * 100)) : undefined; + const hasAmount = totalAmount && totalAmount > 0; + return ( <> {description} @@ -43,10 +50,14 @@ export const BillingInvoiceUsageRow = ({ : '–'} -
{quantity ? formatLargeNumbers(quantity) : '–'}
- - {formatCurrency(totalAmount || 0, currency)} - +
{quantity ? formatLargeNumbers(quantity) : ''}
+ {hasAmount ? ( + + {formatCurrency(totalAmount, invoiceCurrency)} + + ) : ( +
+ )} ); };