feat: facturas y boletas de reserva (ReserveInvoice); las facturas y boletas normales excluyen las de reserva

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-15 17:32:32 -05:00
1 parent 1834c64f6f
commit 52dc1957b7
12 files changed
+70 -27

No files matched your search

@@ -1,5 +1,11 @@
import { TAX_DOCUMENT, type DocumentScreen, invoiceColumns, marketing, referenceColumns } from '../screen-kit';
/** Filtros que separan las cuatro pantallas de `Invoices`. */
const RESERVE = `ReserveInvoice eq 'tYES'`;
const NOT_RESERVE = `ReserveInvoice eq 'tNO'`;
const BILL = `DocumentSubType eq 'bod_Bill'`;
const NOT_BILL = `DocumentSubType ne 'bod_Bill'`;
/** Ventas: ofertas, órdenes, entregas, facturas, devoluciones y notas de crédito de cliente. */
export const VENTAS_SCREENS: readonly DocumentScreen[] = [
] = [
@@ -7,19 +13,32 @@ export const VENTAS_SCREENS: readonly DocumentScreen[] = [
marketing('/ventas/ofertas', 'Quotations', 'Nueva oferta', 'Cliente', { columns: referenceColumns }),
marketing('/ventas/ordenes', 'Orders', 'Nueva orden', 'Cliente', { columns: referenceColumns }),
marketing('/ventas/entrega', 'DeliveryNotes', 'Nueva entrega', 'Cliente', TAX_DOCUMENT),
// Facturas y boletas son el mismo recurso (`Invoices`): la boleta es la de subtipo `bod_Bill`. La factura
// excluye solo las boletas (no filtra por `bod_None`, para no perder notas de débito u otros subtipos).
// Facturas, boletas y sus reservas son el mismo recurso (`Invoices`); se separan por dos campos:
// `DocumentSubType` (`bod_Bill` = boleta) y `ReserveInvoice` (`tYES` = de reserva). La factura excluye
// solo las boletas (`ne`, no `eq bod_None`, para no perder notas de débito u otros subtipos).
marketing('/ventas/facturas', 'Invoices', 'Nueva factura', 'Cliente', {
...TAX_DOCUMENT,
columns: invoiceColumns,
baseFilter: `DocumentSubType ne 'bod_Bill'`,
baseFilter: `${NOT_RESERVE} and ${NOT_BILL}`,
}),
marketing('/ventas/boletas', 'Invoices', 'Nueva boleta', 'Cliente', {
...TAX_DOCUMENT,
columns: invoiceColumns,
baseFilter: `DocumentSubType eq 'bod_Bill'`,
baseFilter: `${NOT_RESERVE} and ${BILL}`,
fixed: { DocumentSubType: 'bod_Bill' },
}),
marketing('/ventas/facturas-reserva', 'Invoices', 'Nueva factura de reserva', 'Cliente', {
...TAX_DOCUMENT,
columns: invoiceColumns,
baseFilter: `${RESERVE} and ${NOT_BILL}`,
fixed: { ReserveInvoice: 'tYES' },
}),
marketing('/ventas/boletas-reserva', 'Invoices', 'Nueva boleta de reserva', 'Cliente', {
...TAX_DOCUMENT,
columns: invoiceColumns,
baseFilter: `${RESERVE} and ${BILL}`,
fixed: { ReserveInvoice: 'tYES', DocumentSubType: 'bod_Bill' },
}),
marketing('/ventas/devoluciones', 'Returns', 'Nueva devolución', 'Cliente'),
marketing('/ventas/notas-credito', 'CreditNotes', 'Nueva nota de crédito', 'Cliente', TAX_DOCUMENT),
];