import { formatCurrency } from "@erp/core"; import { Description, FieldGroup, Fieldset, Legend } from "@repo/rdx-ui/components"; import { Separator } from "@repo/shadcn-ui/components"; import { ReceiptIcon } from "lucide-react"; import { ComponentProps } from "react"; import { useFormContext, useWatch } from "react-hook-form"; import { useInvoiceContext } from "../../context"; import { useTranslation } from "../../i18n"; import { InvoiceFormData } from "../../schemas"; import { PercentageInputField } from "./items/percentage-input-field"; export const InvoiceTotals = (props: ComponentProps<"fieldset">) => { const { t } = useTranslation(); const { control, getValues } = useFormContext(); const { currency_code, language_code, readOnly, taxCatalog } = useInvoiceContext(); const displayTaxes = useWatch({ control, name: "taxes", defaultValue: [], }); return (
{t("form_groups.totals.title")} {t("form_groups.totals.description")} {/* Sección: Subtotal y Descuentos */}
Subtotal {formatCurrency(getValues('subtotal_amount'), 2, currency_code, language_code)}

Descuento global

Descuento global
-{formatCurrency(getValues("discount_amount"), 2, currency_code, language_code)}
{/* Sección: Base Imponible */}
Base imponible {formatCurrency(getValues('taxable_amount'), 2, currency_code, language_code)}
{/* Sección: Impuestos */}

Impuestos y retenciones

{taxCatalog.groups().map((group) => { // Filtra impuestos de ese grupo const taxesInGroup = displayTaxes?.filter((item) => { const tax = taxCatalog.findByCode(item.tax_code).match( (t) => t, () => undefined ); return tax?.group === group; }); // Si el grupo no tiene impuestos, no renderiza nada if (taxesInGroup?.length === 0) return null; return (
{taxesInGroup?.map((item) => { const tax = taxCatalog.findByCode(item.tax_code).match( (t) => t, () => undefined ); return (
{tax?.name} {formatCurrency( item.taxes_amount, 2, currency_code, language_code )}
); })}
); })}
Total de impuestos {formatCurrency(getValues('taxes_amount'), 2, currency_code, language_code)}
Total de la factura {formatCurrency(getValues('total_amount'), 2, currency_code, language_code)}
); };