FactuGES_ERP/modules/customers/src/web/pages/create/utils.ts

42 lines
1.4 KiB
TypeScript

import type { InvoiceItem } from "@/types/invoice";
export function calculateItemTotal(quantity: number, unitPrice: number, discount = 0): number {
const subtotal = quantity * unitPrice;
const discountAmount = (subtotal * discount) / 100;
return subtotal - discountAmount;
}
export function calculateInvoiceTotals(items: InvoiceItem[], taxRate = 21) {
const subtotal = items.reduce((sum, item) => {
return (
sum + (item.quantity.amount * item.unit_price.amount) / Math.pow(10, item.unit_price.scale)
);
}, 0);
const totalDiscount = items.reduce((sum, item) => {
const itemSubtotal =
(item.quantity.amount * item.unit_price.amount) / Math.pow(10, item.unit_price.scale);
return sum + (itemSubtotal * item.discount.amount) / Math.pow(10, item.discount.scale) / 100;
}, 0);
const beforeTax = subtotal - totalDiscount;
const taxAmount = (beforeTax * taxRate) / 100;
const total = beforeTax + taxAmount;
return {
subtotal: Math.round(subtotal * 100),
totalDiscount: Math.round(totalDiscount * 100),
beforeTax: Math.round(beforeTax * 100),
taxAmount: Math.round(taxAmount * 100),
total: Math.round(total * 100),
};
}
export function formatCurrency(amount: number, scale = 2, currency = "EUR"): string {
const value = amount / Math.pow(10, scale);
return new Intl.NumberFormat("es-ES", {
style: "currency",
currency: currency,
}).format(value);
}