Files
mini-erp/mini-frontend/src/views/compras/PurchaseInvoicesList.tsx
T
GeorgeandClaude Sonnet 5 ab3c613165 Initial commit: mini-erp (backend FastAPI + frontend React/Vite)
Base para el flujo de ramas por cliente.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 10:34:12 -05:00

174 lines
3.9 KiB
TypeScript

import ListViewTemplate from "../../components/ui/ListViewTemplate";
import type { Column } from "../../types/table";
import type { FilterConfig } from "../../types/filters";
import { DEFAULT_CURRENCY } from "../../utils/constants";
import { DOCUMENT_STATUS } from "../../utils/enums";
import StatusBadge from "../../components/ui/StatusBadge";
import { getStatusColors } from "../../utils/statusColors";
const filters: FilterConfig[] = [
{
key: "DocumentStatus",
label: "Estado",
type: "select",
options: DOCUMENT_STATUS,
defaultValue: "bost_Open",
},
{
key: "Indicator",
label: "Indicador",
type: "multi-select",
endpoint: "FactoringIndicators",
valueField: "IndicatorCode",
labelField: "IndicatorName",
valueType: "string",
},
{
key: "DocCurrency",
label: "Moneda",
type: "multi-select",
endpoint: "Currencies",
valueField: "Code",
labelField: "Name",
},
{
key: "FolioPrefixString",
label: "Serie",
type: "text",
},
{
key: "FolioNumber",
label: "Número",
type: "text",
},
{
key: "DocDate",
label: "Fecha Contab.",
type: "date",
},
{
key: "DocDueDate",
label: "Fecha Venc.",
type: "date",
},
{
key: "TaxDate",
label: "Fecha Emisión",
type: "date",
},
];
export default function PurchaseInvoicesList() {
const columns: Column[] = [
{
key: "DocNum",
title: "Número",
width: "100px",
isMono: true,
},
{
key: "SerieNumero",
title: "Serie-Número",
width: "130px",
isMono: true,
render: (row) =>
[row.Indicator, row.FolioPrefixString, row.FolioNumber]
.filter(Boolean)
.join("-"),
},
{
key: "DocumentStatus",
title: "Estado",
width: "100px",
render: (row: any) => {
const val = row.DocumentStatus;
const label =
DOCUMENT_STATUS[val as keyof typeof DOCUMENT_STATUS] || val;
const colors = getStatusColors("DOCUMENT_STATUS", val);
return colors ? <StatusBadge label={label} {...colors} /> : label;
},
},
{
key: "CardCode",
title: "Proveedor",
width: "120px",
},
{
key: "CardName",
title: "Razón Social",
},
{
key: "DocDate",
title: "Fecha Contab.",
type: "date",
width: "60px",
},
{
key: "DocDueDate",
title: "Fecha Venc.",
type: "date",
width: "60px",
},
{
key: "TaxDate",
title: "Fecha Emisión",
type: "date",
width: "60px",
},
{
key: "DocTotal",
title: "Total",
width: "100px",
align: "right",
render: (row) => {
const total =
row.DocCurrency === DEFAULT_CURRENCY ? row.DocTotal : row.DocTotalFc;
return total != null
? `${row.DocCurrency} ${Number(total).toLocaleString("en-US", { minimumFractionDigits: 2 })}`
: "";
},
},
{
key: "DocEntry",
title: "Documento",
width: "100px",
},
];
return (
<ListViewTemplate
title="Facturas de compra"
description="Listado de facturas de compra"
endpoint="PurchaseInvoices"
fields={[
"DocEntry",
"DocNum",
"CardCode",
"CardName",
"NumAtCard",
"DocType",
"DocCurrency",
"DocDate",
"DocTotal",
"DocTotalFc",
"DocDueDate",
"TaxDate",
"DocumentStatus",
"FolioPrefixString",
"FolioNumber",
"Indicator",
]}
baseFilter="DocumentSubType eq 'bod_None'"
columns={columns}
editPathPrefix="/compras/facturas/mantenimiento"
editIdField="DocEntry"
newButtonLabel="+ Nueva Factura"
newButtonPath="/compras/facturas/mantenimiento"
orderby="DocEntry desc"
errorMessage="Error al obtener el listado de facturas de compra"
rowKey="DocEntry"
filters={filters}
/>
);
}