fix(web): ventas y compras envían la unidad de medida del artículo (UoMEntry)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-14 16:05:25 -05:00
1 parent 0d5a3074c8
commit d3ab97cd2e
7 files changed
+71 -20

No files matched your search

@@ -88,14 +88,22 @@ export const commentsOnly: FieldColumns = { left: [FIELDS.comments], right: [] }
const [baseItemColumn, descriptionColumn, quantityColumn, warehouseColumn, priceColumn] = DOCUMENT_LINE_COLUMNS;
export { descriptionColumn, priceColumn, quantityColumn, warehouseColumn };
/** Artículo que además completa la unidad de medida de la línea (`UoMEntry`). */
export const itemColumn: GridColumn = {
...baseItemColumn,
lookup: {
...baseItemColumn.lookup!,
apply: (item, line) => ({ ...baseItemColumn.lookup!.apply(item, line), UoMEntry: uomEntryOf(item) ?? line['UoMEntry'] }),
},
};
/**
* Columna de artículo que además completa la unidad de medida de la línea (`UoMEntry`): sin ella SAP
* rechaza el documento si el artículo no tiene unidad por defecto. Al cambiar de artículo se reemplaza
* (un artículo de unidad manual no lleva).
*/
export function itemColumnWithUom(item: GridColumn, side: 'purchase' | 'sales'): GridColumn {
return {
...item,
lookup: {
...item.lookup!,
apply: (picked, line) => ({ ...item.lookup!.apply(picked, line), UoMEntry: uomEntryOf(picked, side) }),
},
};
}
export const itemColumn: GridColumn = itemColumnWithUom(baseItemColumn, 'purchase');
/** Lista de almacenes de la cabecera (la misma de las líneas). */
export const WAREHOUSE_LOOKUP: VhLookup = warehouseColumn.lookup!.config;
@@ -160,10 +168,14 @@ export function marketingLayout(opts: {
lineColumns?: readonly GridColumn[];
/** Columnas de las listas de valores (cliente, artículo, almacén, impuesto) de este documento. */
lookups?: LookupColumns;
/** Unidad de medida que se toma del artículo: la de venta o la de compra. */
uom: 'sales' | 'purchase';
}): DocumentLayout {
const columns = lineColumnsFor(opts.taxResource, opts.lineColumns);
const columns = lineColumnsFor(opts.taxResource, opts.lineColumns).map((c) =>
c.key === 'ItemCode' && c.lookup ? itemColumnWithUom(c, opts.uom) : c,
);
const layout: DocumentLayout = {
lines: { key: 'DocumentLines', fields: lineFieldsOf(columns), base: true },
lines: { key: 'DocumentLines', fields: [...lineFieldsOf(columns), 'UoMEntry'], base: true },
header: opts.header ?? {
left: [
{ type: 'partner', key: 'CardCode', label: opts.partnerLabel, required: true, missing: `el ${opts.partnerLabel.toLowerCase()}` },