@asteby/metacore-runtime-react 49.1.0 → 49.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/action-modal-dispatcher.d.ts +1 -0
- package/dist/action-modal-dispatcher.d.ts.map +1 -1
- package/dist/action-modal-dispatcher.js +34 -5
- package/dist/business/document-editor-model.d.ts +6 -1
- package/dist/business/document-editor-model.d.ts.map +1 -1
- package/dist/business/document-editor-model.js +48 -7
- package/dist/business/document-editor-panels.d.ts +18 -0
- package/dist/business/document-editor-panels.d.ts.map +1 -1
- package/dist/business/document-editor-panels.js +9 -0
- package/dist/business/document-editor.d.ts +7 -1
- package/dist/business/document-editor.d.ts.map +1 -1
- package/dist/business/document-editor.js +69 -24
- package/dist/document-form-dialog.d.ts.map +1 -1
- package/dist/document-form-dialog.js +8 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/record-mutation-events.d.ts +12 -0
- package/dist/record-mutation-events.d.ts.map +1 -1
- package/dist/record-mutation-events.js +18 -0
- package/package.json +1 -1
- package/src/__tests__/document-editor-model.test.ts +27 -0
- package/src/__tests__/document-editor.test.tsx +60 -0
- package/src/__tests__/invoice-document-editor.test.tsx +267 -0
- package/src/__tests__/r5-self-label-settled.test.ts +57 -0
- package/src/action-modal-dispatcher.tsx +34 -5
- package/src/business/document-editor-model.ts +50 -7
- package/src/business/document-editor-panels.tsx +49 -0
- package/src/business/document-editor.tsx +246 -164
- package/src/document-form-dialog.tsx +13 -4
- package/src/index.ts +2 -0
- package/src/record-mutation-events.ts +23 -0
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -37,7 +37,7 @@ export { todayInZone, isTodayToken } from './calendar-date';
|
|
|
37
37
|
export { setFederatedActionLoader } from './federated-action-loader';
|
|
38
38
|
export { ModelActionToolbar, useModelActions, } from './model-action-toolbar';
|
|
39
39
|
export { resolveListPrimaryAction, actionReplacesCreate, } from './list-primary-action';
|
|
40
|
-
export { emitRecordMutation, subscribeRecordMutations, RECORD_MUTATION_EVENT, } from './record-mutation-events';
|
|
40
|
+
export { emitRecordMutation, emitRecordMutationSettled, subscribeRecordMutations, RECORD_MUTATION_EVENT, RECORD_MUTATION_SETTLE_DELAYS, } from './record-mutation-events';
|
|
41
41
|
export { DocumentFormDialog, resolveDocumentForms, scopeDocumentFormsToFilter, delegatedCreate, withoutDelegatedTypes, } from './document-form-dialog';
|
|
42
42
|
export { modelFromNavUrl, capabilityForNavItem, isNavItemAllowed, useNavItemVisible, } from './nav-permissions';
|
|
43
43
|
export { CfdiStampPanel, CfdiStampResultDialog, extractStampResult, } from './cfdi-stamp-panel';
|
|
@@ -7,6 +7,18 @@ export interface RecordMutationDetail {
|
|
|
7
7
|
}
|
|
8
8
|
/** Announce a successful mutation. Safe to call outside a browser (no-op). */
|
|
9
9
|
export declare function emitRecordMutation(model: string | undefined | null, kind: RecordMutationKind): void;
|
|
10
|
+
/**
|
|
11
|
+
* Delays (ms) at which a mutation is announced again. The backend's event
|
|
12
|
+
* subscribers write AFTER the action answered (stamping → the invoice's state,
|
|
13
|
+
* a payment → its auto-stamped REP), so a list or tab that reloaded at once kept
|
|
14
|
+
* showing the previous state until a manual reload (retest Pitsline r5).
|
|
15
|
+
*/
|
|
16
|
+
export declare const RECORD_MUTATION_SETTLE_DELAYS: readonly number[];
|
|
17
|
+
/**
|
|
18
|
+
* Announce a mutation now and again after `delays`, so what the server derives
|
|
19
|
+
* asynchronously from it reaches mounted lists too. Returns a cancel function.
|
|
20
|
+
*/
|
|
21
|
+
export declare function emitRecordMutationSettled(model: string | undefined | null, kind: RecordMutationKind, delays?: readonly number[]): () => void;
|
|
10
22
|
/**
|
|
11
23
|
* Listen for mutations of `model` (case-insensitive). Returns an unsubscribe.
|
|
12
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-mutation-events.d.ts","sourceRoot":"","sources":["../src/record-mutation-events.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE/D,eAAO,MAAM,qBAAqB,4BAA4B,CAAA;AAE9D,MAAM,WAAW,oBAAoB;IACjC,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,kBAAkB,CAAA;CAC3B;AAID,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CASnG;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACpC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAChC,EAAE,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,GAC3C,MAAM,IAAI,CAUZ"}
|
|
1
|
+
{"version":3,"file":"record-mutation-events.d.ts","sourceRoot":"","sources":["../src/record-mutation-events.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE/D,eAAO,MAAM,qBAAqB,4BAA4B,CAAA;AAE9D,MAAM,WAAW,oBAAoB;IACjC,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,kBAAkB,CAAA;CAC3B;AAID,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CASnG;AAED;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAAiB,CAAA;AAE5E;;;GAGG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAChC,IAAI,EAAE,kBAAkB,EACxB,MAAM,GAAE,SAAS,MAAM,EAAkC,GAC1D,MAAM,IAAI,CAKZ;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACpC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAChC,EAAE,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,GAC3C,MAAM,IAAI,CAUZ"}
|
|
@@ -19,6 +19,24 @@ export function emitRecordMutation(model, kind) {
|
|
|
19
19
|
/* a listener must never break the save flow */
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Delays (ms) at which a mutation is announced again. The backend's event
|
|
24
|
+
* subscribers write AFTER the action answered (stamping → the invoice's state,
|
|
25
|
+
* a payment → its auto-stamped REP), so a list or tab that reloaded at once kept
|
|
26
|
+
* showing the previous state until a manual reload (retest Pitsline r5).
|
|
27
|
+
*/
|
|
28
|
+
export const RECORD_MUTATION_SETTLE_DELAYS = [1500, 5000];
|
|
29
|
+
/**
|
|
30
|
+
* Announce a mutation now and again after `delays`, so what the server derives
|
|
31
|
+
* asynchronously from it reaches mounted lists too. Returns a cancel function.
|
|
32
|
+
*/
|
|
33
|
+
export function emitRecordMutationSettled(model, kind, delays = RECORD_MUTATION_SETTLE_DELAYS) {
|
|
34
|
+
emitRecordMutation(model, kind);
|
|
35
|
+
if (!model || typeof window === 'undefined')
|
|
36
|
+
return () => { };
|
|
37
|
+
const timers = delays.map((ms) => window.setTimeout(() => emitRecordMutation(model, kind), ms));
|
|
38
|
+
return () => timers.forEach((t) => window.clearTimeout(t));
|
|
39
|
+
}
|
|
22
40
|
/**
|
|
23
41
|
* Listen for mutations of `model` (case-insensitive). Returns an unsubscribe.
|
|
24
42
|
*/
|
package/package.json
CHANGED
|
@@ -106,7 +106,34 @@ describe('linesFromSource', () => {
|
|
|
106
106
|
})
|
|
107
107
|
})
|
|
108
108
|
|
|
109
|
+
describe('linesFromSource — renglón de origen sin descripción (retest Pitsline r5)', () => {
|
|
110
|
+
it('InvoiceItem solo trae el producto: se nombra con su etiqueta y conserva el id', () => {
|
|
111
|
+
const [l] = linesFromSource(
|
|
112
|
+
[{ id: 'it-1', product_id: { value: 'p1', label: 'EVERLAND 205/55R16' }, quantity: 1, unit_price: 710, subtotal: 710, tax_amount: 113.6 }],
|
|
113
|
+
{},
|
|
114
|
+
{ kind: 'credit' },
|
|
115
|
+
)
|
|
116
|
+
expect(l.product_id).toBe('p1')
|
|
117
|
+
expect(l.description).toBe('EVERLAND 205/55R16')
|
|
118
|
+
expect(l.quantity).toBe(1)
|
|
119
|
+
expect(l.max_quantity).toBe(1)
|
|
120
|
+
expect(l.tax_rate).toBe(0.16)
|
|
121
|
+
expect(l.source_line_id).toBe('it-1')
|
|
122
|
+
})
|
|
123
|
+
it('con la relación resuelta como objeto hermano `product`', () => {
|
|
124
|
+
const [l] = linesFromSource([{ id: 'it-1', product_id: 'p1', product: { id: 'p1', name: 'Balanceo' }, quantity: 2, unit_price: 100 }])
|
|
125
|
+
expect(l.product_id).toBe('p1')
|
|
126
|
+
expect(l.description).toBe('Balanceo')
|
|
127
|
+
})
|
|
128
|
+
})
|
|
129
|
+
|
|
109
130
|
describe('localIssues', () => {
|
|
131
|
+
it('un renglón con producto y sin texto no bloquea el guardado; uno libre sin texto sí', () => {
|
|
132
|
+
expect(localIssues([makeLine({ product_id: 'p1', description: '', unit_price: 10 })]).filter((i) => i.severity === 'error')).toEqual([])
|
|
133
|
+
expect(localIssues([makeLine({ description: '', unit_price: 10 })])).toEqual([
|
|
134
|
+
expect.objectContaining({ severity: 'error', message: 'Renglón 1: elige un producto o escribe la descripción.' }),
|
|
135
|
+
])
|
|
136
|
+
})
|
|
110
137
|
it('sin renglones es error; precio en cero es aviso; sin ruido por renglón libre', () => {
|
|
111
138
|
expect(localIssues([]).some((i) => i.severity === 'error')).toBe(true)
|
|
112
139
|
const w = localIssues([makeLine({ description: 'Servicio' })])
|
|
@@ -313,6 +313,21 @@ describe('DocumentEditor — «crear desde» con lo pendiente del servidor', ()
|
|
|
313
313
|
await screen.findByDisplayValue('Llanta 205/55R16')
|
|
314
314
|
})
|
|
315
315
|
|
|
316
|
+
it('si la ruta source-lines contesta 400/500 (host sin la ruta) también cae a la relación', async () => {
|
|
317
|
+
for (const status of [400, 500]) {
|
|
318
|
+
const api = makeApi({
|
|
319
|
+
'/dynamic/customers.Invoice/source-lines': () => {
|
|
320
|
+
throw { response: { status } }
|
|
321
|
+
},
|
|
322
|
+
'/metadata/table/customers.SalesOrder': { data: { relations: [{ name: 'items', kind: 'one_to_many', through: 'customers.SalesOrderItem', foreign_key: 'sales_order_id' }] } },
|
|
323
|
+
'/data/customers.SalesOrderItem': { data: [{ id: 'soi-1', product_id: 'p1', product_name: 'Llanta 205/55R16', quantity: 4, unit_price: 1500, tax_rate: 0.16 }] },
|
|
324
|
+
})
|
|
325
|
+
renderEditor(tracked, api, { initialSource: { key: 'sales_order', id: 'so-1' } })
|
|
326
|
+
await screen.findByDisplayValue('Llanta 205/55R16')
|
|
327
|
+
cleanup()
|
|
328
|
+
}
|
|
329
|
+
})
|
|
330
|
+
|
|
316
331
|
it('el rechazo del servidor por exceso se muestra con su mensaje en español', async () => {
|
|
317
332
|
const post = vi.fn().mockRejectedValue({
|
|
318
333
|
response: {
|
|
@@ -338,3 +353,48 @@ describe('DocumentEditor — «crear desde» con lo pendiente del servidor', ()
|
|
|
338
353
|
expect(await screen.findByText(/excede lo pendiente de «Venta»/)).toBeTruthy()
|
|
339
354
|
})
|
|
340
355
|
})
|
|
356
|
+
|
|
357
|
+
describe('DocumentEditor — nota de crédito desde la factura (retest Pitsline r5)', () => {
|
|
358
|
+
const creditNote: DocumentFormType = {
|
|
359
|
+
key: 'credit_note',
|
|
360
|
+
label: 'Nota de crédito',
|
|
361
|
+
layout: 'editor',
|
|
362
|
+
submit_action: 'create_credit_note',
|
|
363
|
+
fields: [
|
|
364
|
+
{ key: 'invoice_id', label: 'Factura', type: 'text', required: true },
|
|
365
|
+
{ key: 'reason', label: 'Motivo', type: 'text' },
|
|
366
|
+
],
|
|
367
|
+
lines: { kind: 'credit', columns: ['tax'], required: false, title: 'Renglones a acreditar' },
|
|
368
|
+
sources: [
|
|
369
|
+
{ key: 'invoice', label: 'Factura', model: 'customers.Invoice', lines: 'items', link_field: 'invoice_id', line_link_field: 'invoice_item_id', exclude_states: ['cancelled'] },
|
|
370
|
+
],
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
it('una sola tabla editable con el producto nombrado y lo restante por acreditar', async () => {
|
|
374
|
+
const api = makeApi({
|
|
375
|
+
'/dynamic/fiscal_mexico.CreditNote/source-lines': {
|
|
376
|
+
data: [
|
|
377
|
+
// InvoiceItem: sin descripción; el host resuelve product {value,label}.
|
|
378
|
+
{ id: 'it-1', source_line_id: 'it-1', product_id: 'p1', product: { value: 'p1', label: 'EVERLAND 205/55R16' }, quantity: 2, remaining_quantity: 1, unit_price: 710, tax_amount: 227.2, subtotal: 1420 },
|
|
379
|
+
],
|
|
380
|
+
},
|
|
381
|
+
})
|
|
382
|
+
render(
|
|
383
|
+
<ApiProvider client={api.client}>
|
|
384
|
+
<DocumentEditor
|
|
385
|
+
model="fiscal_mexico.CreditNote"
|
|
386
|
+
forms={{ lines_field: 'lines', types: [creditNote] }}
|
|
387
|
+
type={creditNote}
|
|
388
|
+
initialSource={{ key: 'invoice', id: 'inv-15' }}
|
|
389
|
+
onCancel={() => {}}
|
|
390
|
+
onSaved={() => {}}
|
|
391
|
+
currency="MXN"
|
|
392
|
+
/>
|
|
393
|
+
</ApiProvider>,
|
|
394
|
+
)
|
|
395
|
+
await screen.findByDisplayValue('EVERLAND 205/55R16')
|
|
396
|
+
expect(screen.getAllByRole('table')).toHaveLength(1)
|
|
397
|
+
expect(screen.getByDisplayValue('1')).toBeTruthy()
|
|
398
|
+
expect(screen.queryByDisplayValue('0')).toBeNull()
|
|
399
|
+
})
|
|
400
|
+
})
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
// Facturas → Crear (P0 UX Acxel, 2026-10-06): el tipo factura con
|
|
3
|
+
// `layout: "editor"` abre el DocumentEditor a pantalla completa, no el wizard
|
|
4
|
+
// «Datos → Siguiente». A la vista solo cliente (con su tarjeta fiscal), método
|
|
5
|
+
// y forma de pago, renglones y totales; lo demás en «Opciones fiscales»
|
|
6
|
+
// plegada, una sola acción primaria y la vista previa plegada. «Cargar desde»
|
|
7
|
+
// OT de taller y cotización precarga lo que queda por facturar.
|
|
8
|
+
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
9
|
+
import { cleanup, fireEvent, render, screen, waitFor, within } from '@testing-library/react'
|
|
10
|
+
|
|
11
|
+
vi.mock('@tanstack/react-router', () => ({ useNavigate: () => () => {} }))
|
|
12
|
+
vi.mock('react-i18next', () => {
|
|
13
|
+
const i18n = { language: 'es' }
|
|
14
|
+
const dict: Record<string, string> = { 'customers.field.tax_id': 'RFC' }
|
|
15
|
+
const t = (k: string, o?: Record<string, any>) => {
|
|
16
|
+
let s: string = dict[k] ?? o?.defaultValue ?? k
|
|
17
|
+
for (const [key, v] of Object.entries(o ?? {})) s = s.replace(`{{${key}}}`, String(v))
|
|
18
|
+
return s
|
|
19
|
+
}
|
|
20
|
+
const value = { t, i18n }
|
|
21
|
+
return { useTranslation: () => value }
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
import { DocumentFormDialog } from '../document-form-dialog'
|
|
25
|
+
import { ApiProvider, type ApiClient } from '../api-context'
|
|
26
|
+
import { TaxRateContext } from '../org-runtime-context'
|
|
27
|
+
import { linesFromSource, splitEditorFields } from '../business/document-editor-model'
|
|
28
|
+
import type { DocumentFormsManifest, DocumentFormType } from '../types'
|
|
29
|
+
|
|
30
|
+
afterEach(cleanup)
|
|
31
|
+
|
|
32
|
+
// Espejo del tipo `invoice` de customers.Invoice (addons, manifest.json).
|
|
33
|
+
const invoice: DocumentFormType = {
|
|
34
|
+
key: 'invoice',
|
|
35
|
+
label: 'Factura',
|
|
36
|
+
value: 'I',
|
|
37
|
+
layout: 'editor',
|
|
38
|
+
party: {
|
|
39
|
+
field: 'customer_id',
|
|
40
|
+
model: 'customers.Customer',
|
|
41
|
+
summary: ['tax_id', 'fiscal_data.regimen_receptor', 'fiscal_data.codigo_postal', 'fiscal_data.uso_cfdi'],
|
|
42
|
+
credit: { limit: 'credit_limit', balance: 'balance_due', overdue: 'overdue_amount', hold_reason: 'credit_hold_reason' },
|
|
43
|
+
},
|
|
44
|
+
fields: [
|
|
45
|
+
{ key: 'customer_id', label: 'Cliente', type: 'text', required: true },
|
|
46
|
+
{ key: 'invoice_date', label: 'Fecha de emisión', type: 'date', required: true, defaultValue: '$today' },
|
|
47
|
+
{ key: 'due_date', label: 'Vencimiento', type: 'date' },
|
|
48
|
+
{ key: 'currency_code', label: 'Moneda', type: 'select', defaultValue: 'MXN', options: [{ value: 'MXN', label: 'Peso mexicano · MXN' }, { value: 'USD', label: 'Dólar · USD' }] },
|
|
49
|
+
{ key: 'fiscal_data.metodo_pago', label: 'Método de pago', type: 'select', required: true, defaultValue: 'PUE', options: [{ value: 'PUE', label: 'Pago en una sola exhibición · PUE' }, { value: 'PPD', label: 'Pago en parcialidades o diferido · PPD' }] },
|
|
50
|
+
{ key: 'fiscal_data.forma_pago', label: 'Forma de pago', type: 'select', required: true, defaultValue: '01', options: [{ value: '01', label: 'Efectivo · 01' }, { value: '03', label: 'Transferencia electrónica · 03' }] },
|
|
51
|
+
{ key: 'notes', label: 'Notas', type: 'textarea' },
|
|
52
|
+
],
|
|
53
|
+
lines: { columns: ['discount', 'tax'], discount_mode: 'amount', title: 'Renglones' },
|
|
54
|
+
sources: [
|
|
55
|
+
{ key: 'sales_order', label: 'Venta', model: 'customers.SalesOrder', lines: 'items', map: { description: 'product_name' }, header: { customer_id: 'customer_id' }, link_field: 'sales_order_id', line_link_field: 'sales_order_item_id', exclude_states: ['cancelled', 'void'] },
|
|
56
|
+
{ key: 'work_order', label: 'Orden de trabajo', model: 'workshop.WorkOrder', lines: 'items', header: { customer_id: 'customer_id' }, link_field: 'work_order_id', line_link_field: 'work_order_item_id', exclude_states: ['cancelled', 'void'] },
|
|
57
|
+
{ key: 'quote', label: 'Cotización', model: 'quotes.Quote', lines: 'items', map: { discount: 'discount_amount' }, header: { customer_id: 'customer_id', currency_code: 'currency_code' }, link_field: 'quote_id', line_link_field: 'quote_item_id', exclude_states: ['cancelled', 'void'] },
|
|
58
|
+
],
|
|
59
|
+
submit_label: 'Crear factura',
|
|
60
|
+
}
|
|
61
|
+
const forms: DocumentFormsManifest = { lines_field: 'items', types: [invoice] }
|
|
62
|
+
|
|
63
|
+
const customer = {
|
|
64
|
+
id: 'c-1',
|
|
65
|
+
name: 'Transportes del Bajío',
|
|
66
|
+
tax_id: 'TBA850312KJ9',
|
|
67
|
+
credit_limit: 100000,
|
|
68
|
+
balance_due: 15750,
|
|
69
|
+
fiscal_data: { regimen_receptor: '601', codigo_postal: '37000', uso_cfdi: 'G03' },
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Lo pendiente lo sirve el runtime (kernel source-lines): cantidad − lo ya facturado.
|
|
73
|
+
const workOrderLines = {
|
|
74
|
+
data: [
|
|
75
|
+
{ id: 'woi-1', source_line_id: 'woi-1', kind: 'labor', description: 'Alineación eje direccional', quantity: 1, remaining_quantity: 1, unit_price: 650 },
|
|
76
|
+
{ id: 'woi-2', source_line_id: 'woi-2', kind: 'part', product_id: 'p-valv', description: 'Válvula de alta presión', quantity: 6, remaining_quantity: 2, unit_price: 95 },
|
|
77
|
+
{ id: 'woi-3', source_line_id: 'woi-3', kind: 'labor', description: 'Montaje y balanceo', quantity: 6, remaining_quantity: 0, unit_price: 180 },
|
|
78
|
+
],
|
|
79
|
+
}
|
|
80
|
+
const quoteLines = {
|
|
81
|
+
data: [
|
|
82
|
+
{ id: 'qi-1', source_line_id: 'qi-1', product_id: 'p-llanta', description: 'Llanta 295/80R22.5', quantity: 6, remaining_quantity: 4, unit_price: 5890, discount_amount: 1200, tax_rate: 0.16, tax_amount: 5462.4, subtotal: 34140 },
|
|
83
|
+
],
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function makeApi(sourceLines: Record<string, unknown> = {}, post = vi.fn().mockResolvedValue({ data: { success: true, data: { id: 'inv-1' } } })) {
|
|
87
|
+
const get = vi.fn(async (url: string, cfg?: { params?: Record<string, any> }) => {
|
|
88
|
+
if (url === '/metadata/modal/customers.Customer') {
|
|
89
|
+
return { data: { data: { fields: [{ key: 'tax_id', label: 'customers.field.tax_id' }, { key: 'fiscal_data.regimen_receptor', label: 'Régimen fiscal' }, { key: 'fiscal_data.codigo_postal', label: 'CP fiscal' }, { key: 'fiscal_data.uso_cfdi', label: 'Uso CFDI' }] } } }
|
|
90
|
+
}
|
|
91
|
+
if (url === '/data/customers.Customer') return { data: { data: [customer] } }
|
|
92
|
+
if (url.endsWith('/source-lines')) return { data: sourceLines[cfg?.params?.source] ?? { data: [] } }
|
|
93
|
+
if (url === '/data/workshop.WorkOrder') return { data: { data: [{ id: 'wo-1', customer_id: 'c-1' }] } }
|
|
94
|
+
if (url === '/data/quotes.Quote') return { data: { data: [{ id: 'q-1', customer_id: 'c-1', currency_code: 'MXN' }] } }
|
|
95
|
+
return { data: { data: [] } }
|
|
96
|
+
})
|
|
97
|
+
const client = { get, post, put: vi.fn().mockResolvedValue({ data: { success: true, data: { id: 'inv-1' } } }), delete: vi.fn() }
|
|
98
|
+
return { client: client as unknown as ApiClient, get, post }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function renderInvoice(api: ReturnType<typeof makeApi>, initialSource?: { key: string; id: string }) {
|
|
102
|
+
return render(
|
|
103
|
+
<ApiProvider client={api.client}>
|
|
104
|
+
<TaxRateContext.Provider value={0.16}>
|
|
105
|
+
<DocumentFormDialog
|
|
106
|
+
open
|
|
107
|
+
onOpenChange={() => {}}
|
|
108
|
+
model="customers.Invoice"
|
|
109
|
+
forms={forms}
|
|
110
|
+
initialType={initialSource ? 'invoice' : undefined}
|
|
111
|
+
initialSource={initialSource}
|
|
112
|
+
currency="MXN"
|
|
113
|
+
/>
|
|
114
|
+
</TaxRateContext.Provider>
|
|
115
|
+
</ApiProvider>,
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const slot = (name: string) => document.querySelector(`[data-slot="${name}"]`) as HTMLElement
|
|
120
|
+
|
|
121
|
+
describe('Factura con layout editor — pantalla única', () => {
|
|
122
|
+
it('abre el DocumentEditor a pantalla completa, no el wizard', () => {
|
|
123
|
+
renderInvoice(makeApi())
|
|
124
|
+
const dialog = slot('document-editor-dialog')
|
|
125
|
+
expect(dialog.getAttribute('data-fullscreen')).toBe('true')
|
|
126
|
+
expect(dialog.style.height).toBe('calc(100dvh - 2rem)')
|
|
127
|
+
expect(slot('document-editor').getAttribute('data-layout')).toBe('fullscreen')
|
|
128
|
+
expect(screen.queryByRole('button', { name: 'Siguiente' })).toBeNull()
|
|
129
|
+
expect(document.querySelector('[data-slot="document-form-dialog"]')).toBeNull()
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
it('secciones: lo esencial a la vista, «Opciones fiscales» plegada, totales y vista previa al lado', () => {
|
|
133
|
+
renderInvoice(makeApi())
|
|
134
|
+
const main = slot('editor-main')
|
|
135
|
+
const essentials = within(slot('editor-essentials'))
|
|
136
|
+
for (const label of ['Cliente', 'Fecha de emisión', 'Vencimiento', 'Método de pago', 'Forma de pago']) {
|
|
137
|
+
expect(essentials.getByText(label)).toBeTruthy()
|
|
138
|
+
}
|
|
139
|
+
// Etiqueta clara con el código SAT como dato secundario.
|
|
140
|
+
expect(screen.getAllByText('Pago en una sola exhibición · PUE').length).toBeGreaterThan(0)
|
|
141
|
+
expect(within(main).getByText('Cargar desde…')).toBeTruthy()
|
|
142
|
+
expect(within(main).getByText('Renglones')).toBeTruthy()
|
|
143
|
+
|
|
144
|
+
const toggle = screen.getByRole('button', { name: /Opciones fiscales/ })
|
|
145
|
+
expect(toggle.getAttribute('aria-expanded')).toBe('false')
|
|
146
|
+
const panel = document.getElementById(toggle.getAttribute('aria-controls')!)!
|
|
147
|
+
expect(panel.hidden).toBe(true)
|
|
148
|
+
expect(within(panel).getByText('Moneda')).toBeTruthy()
|
|
149
|
+
expect(essentials.queryByText('Moneda')).toBeNull()
|
|
150
|
+
|
|
151
|
+
const aside = within(slot('editor-aside'))
|
|
152
|
+
const totals = slot('editor-aside').querySelector(':scope > div > [data-slot="totals"]') as HTMLElement
|
|
153
|
+
expect(within(totals).getByText('Total')).toBeTruthy()
|
|
154
|
+
const preview = aside.getByRole('button', { name: /Vista previa/ })
|
|
155
|
+
expect(preview.getAttribute('aria-expanded')).toBe('false')
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
it('una sola acción primaria: «Crear factura»', () => {
|
|
159
|
+
renderInvoice(makeApi())
|
|
160
|
+
const primaries = document.querySelectorAll('[data-slot="document-editor"] [data-primary="true"]')
|
|
161
|
+
expect(primaries.length).toBe(1)
|
|
162
|
+
expect(primaries[0].textContent).toBe('Crear factura')
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
it('«Cargar desde» ofrece venta, OT y cotización como opciones', () => {
|
|
166
|
+
renderInvoice(makeApi())
|
|
167
|
+
const group = screen.getByRole('radiogroup', { name: 'Tipo de documento origen' })
|
|
168
|
+
expect(within(group).getAllByRole('radio').map((r) => r.textContent)).toEqual(['Venta', 'Orden de trabajo', 'Cotización'])
|
|
169
|
+
fireEvent.click(within(group).getByRole('radio', { name: 'Orden de trabajo' }))
|
|
170
|
+
expect(within(group).getByRole('radio', { name: 'Orden de trabajo' }).getAttribute('aria-checked')).toBe('true')
|
|
171
|
+
expect(document.querySelector('[data-source="work_order"]')).toBeTruthy()
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
describe('Factura — «Cargar desde» OT y cotización con lo restante', () => {
|
|
176
|
+
it('OT: cliente, renglones con lo pendiente (omite lo ya facturado), IVA de la org y vínculos', async () => {
|
|
177
|
+
const api = makeApi({ work_order: workOrderLines })
|
|
178
|
+
renderInvoice(api, { key: 'work_order', id: 'wo-1' })
|
|
179
|
+
await screen.findByDisplayValue('Válvula de alta presión')
|
|
180
|
+
expect(screen.getByDisplayValue('Alineación eje direccional')).toBeTruthy()
|
|
181
|
+
expect(screen.queryByDisplayValue('Montaje y balanceo')).toBeNull()
|
|
182
|
+
expect(api.get).toHaveBeenCalledWith('/dynamic/customers.Invoice/source-lines', { params: { source: 'work_order', id: 'wo-1' } })
|
|
183
|
+
expect(await screen.findByText('2 renglones con lo pendiente · 1 ya cubiertos se omitieron')).toBeTruthy()
|
|
184
|
+
|
|
185
|
+
// La tarjeta del cliente: datos fiscales con etiquetas del modelo.
|
|
186
|
+
await waitFor(() => expect(slot('party-card')).toBeTruthy())
|
|
187
|
+
const card = slot('party-card')
|
|
188
|
+
expect(within(card).getByText('Transportes del Bajío')).toBeTruthy()
|
|
189
|
+
expect(within(card).getByText('RFC')).toBeTruthy()
|
|
190
|
+
expect(within(card).getByText('TBA850312KJ9')).toBeTruthy()
|
|
191
|
+
expect(within(card).getByText('Uso CFDI')).toBeTruthy()
|
|
192
|
+
expect(within(card).getByText('G03')).toBeTruthy()
|
|
193
|
+
|
|
194
|
+
fireEvent.click(screen.getByRole('button', { name: 'Crear factura' }))
|
|
195
|
+
await waitFor(() => expect(api.post).toHaveBeenCalled())
|
|
196
|
+
const [url, body] = api.post.mock.calls[0] as [string, any]
|
|
197
|
+
expect(url).toBe('/dynamic/customers.Invoice')
|
|
198
|
+
expect(body.customer_id).toBe('c-1')
|
|
199
|
+
expect(body.work_order_id).toBe('wo-1')
|
|
200
|
+
expect(body['fiscal_data.metodo_pago']).toBe('PUE')
|
|
201
|
+
expect(body['fiscal_data.forma_pago']).toBe('01')
|
|
202
|
+
expect(body.items).toEqual([
|
|
203
|
+
expect.objectContaining({ description: 'Alineación eje direccional', quantity: 1, unit_price: 650, tax_rate: 0.16, work_order_item_id: 'woi-1' }),
|
|
204
|
+
expect.objectContaining({ product_id: 'p-valv', quantity: 2, unit_price: 95, tax_rate: 0.16, work_order_item_id: 'woi-2' }),
|
|
205
|
+
])
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
it('cotización: lo pendiente, su IVA y descuento, moneda y vínculo', async () => {
|
|
209
|
+
const api = makeApi({ quote: quoteLines })
|
|
210
|
+
renderInvoice(api, { key: 'quote', id: 'q-1' })
|
|
211
|
+
await screen.findByDisplayValue('Llanta 295/80R22.5')
|
|
212
|
+
fireEvent.click(screen.getByRole('button', { name: 'Crear factura' }))
|
|
213
|
+
await waitFor(() => expect(api.post).toHaveBeenCalled())
|
|
214
|
+
const [, body] = api.post.mock.calls[0] as [string, any]
|
|
215
|
+
expect(body.quote_id).toBe('q-1')
|
|
216
|
+
expect(body.currency_code).toBe('MXN')
|
|
217
|
+
expect(body.items).toEqual([
|
|
218
|
+
expect.objectContaining({ product_id: 'p-llanta', quantity: 4, unit_price: 5890, discount: 1200, tax_rate: 0.16, quote_item_id: 'qi-1' }),
|
|
219
|
+
])
|
|
220
|
+
expect(body.items[0]).not.toHaveProperty('work_order_item_id')
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
it('exceso: la cantidad no pasa de lo pendiente y el rechazo del servidor se muestra inline', async () => {
|
|
224
|
+
const post = vi.fn().mockRejectedValue({
|
|
225
|
+
response: {
|
|
226
|
+
status: 422,
|
|
227
|
+
data: {
|
|
228
|
+
success: false,
|
|
229
|
+
message: 'validation failed',
|
|
230
|
+
errors: { 'items.1.quantity': [{ code: 'exceeds_remaining', message: 'Renglón 2: la cantidad 2 excede lo pendiente de «Orden de trabajo» (1). Ajusta la cantidad; lo demás ya está registrado en otro documento.' }] },
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
})
|
|
234
|
+
const api = makeApi({ work_order: workOrderLines }, post)
|
|
235
|
+
renderInvoice(api, { key: 'work_order', id: 'wo-1' })
|
|
236
|
+
await screen.findByDisplayValue('Válvula de alta presión')
|
|
237
|
+
// El editor topa la cantidad en lo pendiente (2 de 6).
|
|
238
|
+
const qty = screen.getAllByLabelText('Cant.').filter((el) => el.tagName === 'INPUT')[1] as HTMLInputElement
|
|
239
|
+
fireEvent.change(qty, { target: { value: '5' } })
|
|
240
|
+
expect(qty.value).toBe('2')
|
|
241
|
+
// Si otro documento consumió lo pendiente mientras tanto, el servidor rechaza.
|
|
242
|
+
fireEvent.click(screen.getByRole('button', { name: 'Crear factura' }))
|
|
243
|
+
await waitFor(() => expect(post).toHaveBeenCalled())
|
|
244
|
+
expect(await screen.findByText(/excede lo pendiente de «Orden de trabajo»/)).toBeTruthy()
|
|
245
|
+
expect(slot('document-editor-dialog')).toBeTruthy()
|
|
246
|
+
})
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
describe('reglas puras del editor de factura', () => {
|
|
250
|
+
it('lo obligatorio que el tipo declara queda a la vista aunque sea fiscal_data.*; las extensiones del metadata se pliegan', () => {
|
|
251
|
+
const g = splitEditorFields(invoice.fields, {
|
|
252
|
+
partyField: 'customer_id',
|
|
253
|
+
extensionFields: [{ key: 'fiscal_data.uso_cfdi', label: 'Uso CFDI', type: 'select', required: true, options: [{ value: 'G03', label: 'G03' }] }],
|
|
254
|
+
})
|
|
255
|
+
expect(g.party?.key).toBe('customer_id')
|
|
256
|
+
expect(g.essential.map((f) => f.key)).toEqual(['invoice_date', 'due_date', 'fiscal_data.metodo_pago', 'fiscal_data.forma_pago'])
|
|
257
|
+
expect(g.advanced.map((f) => f.key)).toEqual(['currency_code', 'fiscal_data.uso_cfdi'])
|
|
258
|
+
expect(g.notes.map((f) => f.key)).toEqual(['notes'])
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
it('un origen sin dato de impuesto toma la tasa de la org; uno con impuesto conserva el suyo', () => {
|
|
262
|
+
const [wo] = linesFromSource([{ id: 'a', description: 'Mano de obra', quantity: 1, unit_price: 100 }], {}, { defaultTaxRate: 0.16 })
|
|
263
|
+
expect(wo.tax_rate).toBe(0.16)
|
|
264
|
+
const [exempt] = linesFromSource([{ id: 'b', description: 'Exento', quantity: 1, unit_price: 100, subtotal: 100, tax_amount: 0 }], {}, { defaultTaxRate: 0.16 })
|
|
265
|
+
expect(exempt.tax_rate).toBe(0)
|
|
266
|
+
})
|
|
267
|
+
})
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
// Retest Pitsline r5: «Registrar pago» desde la factura mostraba el UUID en
|
|
3
|
+
// «Factura a abonar», y la lista / la pestaña REP no se refrescaban con lo que
|
|
4
|
+
// el servidor escribe después de la acción (estado tras timbrar, REP tras pagar).
|
|
5
|
+
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
6
|
+
import { seedOptionFromRecord } from '../action-modal-dispatcher'
|
|
7
|
+
import { emitRecordMutationSettled, subscribeRecordMutations, RECORD_MUTATION_SETTLE_DELAYS } from '../record-mutation-events'
|
|
8
|
+
import type { ActionFieldDef } from '../types'
|
|
9
|
+
|
|
10
|
+
const invoiceField = {
|
|
11
|
+
key: 'invoice_id',
|
|
12
|
+
type: 'dynamic_select',
|
|
13
|
+
ref: 'Invoice',
|
|
14
|
+
options: { source: 'Invoice', value: 'id', label: 'number' },
|
|
15
|
+
} as unknown as ActionFieldDef
|
|
16
|
+
|
|
17
|
+
describe('seedOptionFromRecord — la propia fila', () => {
|
|
18
|
+
it('un selector sembrado con el id de la fila muestra su folio, no el UUID', () => {
|
|
19
|
+
const record = { id: '68a02222-855e-4af9-b086-31526f0dceb5', number: 'FAC-00015', total: 823.6 }
|
|
20
|
+
expect(seedOptionFromRecord(invoiceField, record.id, record)).toEqual(
|
|
21
|
+
expect.objectContaining({ id: record.id, value: record.id, label: 'FAC-00015' }),
|
|
22
|
+
)
|
|
23
|
+
})
|
|
24
|
+
it('sin options.label usa la primera columna de nombre', () => {
|
|
25
|
+
const field = { key: 'invoice_id', type: 'dynamic_select', ref: 'Invoice' } as unknown as ActionFieldDef
|
|
26
|
+
expect(seedOptionFromRecord(field, 'i1', { id: 'i1', folio: 'A-7' })?.label).toBe('A-7')
|
|
27
|
+
})
|
|
28
|
+
it('otro valor (no la propia fila) sigue resolviendo por el objeto hermano', () => {
|
|
29
|
+
const record = { id: 'pay-1', invoice: { value: 'i9', label: 'FAC-00009' } }
|
|
30
|
+
expect(seedOptionFromRecord(invoiceField, 'i9', record)?.label).toBe('FAC-00009')
|
|
31
|
+
expect(seedOptionFromRecord(invoiceField, 'i8', { id: 'pay-1' })).toBeUndefined()
|
|
32
|
+
})
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
describe('emitRecordMutationSettled', () => {
|
|
36
|
+
afterEach(() => vi.useRealTimers())
|
|
37
|
+
it('anuncia ahora y otra vez cuando el servidor ya escribió lo derivado', () => {
|
|
38
|
+
vi.useFakeTimers()
|
|
39
|
+
const seen = vi.fn()
|
|
40
|
+
const off = subscribeRecordMutations('invoices', seen)
|
|
41
|
+
emitRecordMutationSettled('invoices', 'update')
|
|
42
|
+
expect(seen).toHaveBeenCalledTimes(1)
|
|
43
|
+
vi.advanceTimersByTime(RECORD_MUTATION_SETTLE_DELAYS[RECORD_MUTATION_SETTLE_DELAYS.length - 1])
|
|
44
|
+
expect(seen).toHaveBeenCalledTimes(1 + RECORD_MUTATION_SETTLE_DELAYS.length)
|
|
45
|
+
off()
|
|
46
|
+
})
|
|
47
|
+
it('se puede cancelar', () => {
|
|
48
|
+
vi.useFakeTimers()
|
|
49
|
+
const seen = vi.fn()
|
|
50
|
+
const off = subscribeRecordMutations('invoices', seen)
|
|
51
|
+
const cancel = emitRecordMutationSettled('invoices', 'update')
|
|
52
|
+
cancel()
|
|
53
|
+
vi.advanceTimersByTime(10_000)
|
|
54
|
+
expect(seen).toHaveBeenCalledTimes(1)
|
|
55
|
+
off()
|
|
56
|
+
})
|
|
57
|
+
})
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
//
|
|
15
15
|
// The host injects its axios-like client via <ApiProvider>; we no longer
|
|
16
16
|
// depend on a bundler alias to `@/lib/api`.
|
|
17
|
-
import {
|
|
17
|
+
import { emitRecordMutationSettled } from './record-mutation-events'
|
|
18
18
|
import { Suspense, useState, useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from 'react'
|
|
19
19
|
import { useTranslation } from 'react-i18next'
|
|
20
20
|
import {
|
|
@@ -415,9 +415,11 @@ export function ActionModalDispatcher({
|
|
|
415
415
|
}: ActionModalProps) {
|
|
416
416
|
// Every successful action may have created/updated/deleted a record of
|
|
417
417
|
// `model` (federated component, wizard, generic form or confirmation), so
|
|
418
|
-
// announce it: mounted lists of the model reload on their own (#1020)
|
|
418
|
+
// announce it: mounted lists of the model reload on their own (#1020) —
|
|
419
|
+
// and again once the server's event subscribers had time to write what the
|
|
420
|
+
// action triggers (estado tras timbrar, REP tras un pago).
|
|
419
421
|
const onSuccess = useCallback(() => {
|
|
420
|
-
|
|
422
|
+
emitRecordMutationSettled(model, 'update')
|
|
421
423
|
onSuccessProp?.()
|
|
422
424
|
}, [model, onSuccessProp])
|
|
423
425
|
// Reactive read: a federated remote usually registers AFTER the first
|
|
@@ -1640,12 +1642,39 @@ function WizardActionModal({ open, onOpenChange, action, model, record, endpoint
|
|
|
1640
1642
|
)
|
|
1641
1643
|
}
|
|
1642
1644
|
|
|
1643
|
-
|
|
1645
|
+
/** Columnas con las que se nombra una fila cuando el selector no declara `options.label`. */
|
|
1646
|
+
const RECORD_LABEL_COLUMNS = ['number', 'folio', 'name', 'title', 'code', 'label']
|
|
1647
|
+
|
|
1648
|
+
/**
|
|
1649
|
+
* La etiqueta de la PROPIA fila cuando el campo se sembró con su id
|
|
1650
|
+
* («Factura a abonar» al registrar un pago desde la factura): la columna que el
|
|
1651
|
+
* selector usa de etiqueta (`options.label`) o la primera de nombre que tenga.
|
|
1652
|
+
* Sin esto el selector mostraba el UUID crudo (retest Pitsline r5).
|
|
1653
|
+
*/
|
|
1654
|
+
function selfLabel(field: ActionFieldDef, record: Record<string, any>): string {
|
|
1655
|
+
const opts = (field as { options?: unknown }).options
|
|
1656
|
+
const declared =
|
|
1657
|
+
opts && !Array.isArray(opts) && typeof opts === 'object' ? (opts as { label?: unknown }).label : undefined
|
|
1658
|
+
const cols = typeof declared === 'string' && declared ? [declared, ...RECORD_LABEL_COLUMNS] : RECORD_LABEL_COLUMNS
|
|
1659
|
+
for (const c of cols) {
|
|
1660
|
+
const v = unwrapRecordScalar(record[c])
|
|
1661
|
+
if ((typeof v === 'string' && v.trim()) || typeof v === 'number') return String(v)
|
|
1662
|
+
}
|
|
1663
|
+
return ''
|
|
1664
|
+
}
|
|
1665
|
+
|
|
1666
|
+
export function seedOptionFromRecord(
|
|
1644
1667
|
field: ActionFieldDef,
|
|
1645
1668
|
value: any,
|
|
1646
1669
|
record?: Record<string, any>,
|
|
1647
1670
|
): import('./use-options-resolver').ResolvedOption | undefined {
|
|
1648
|
-
if (!record
|
|
1671
|
+
if (!record) return undefined
|
|
1672
|
+
const selfId = unwrapRecordScalar(record.id)
|
|
1673
|
+
if (value != null && value !== '' && selfId != null && String(selfId) === String(value)) {
|
|
1674
|
+
const label = selfLabel(field, record)
|
|
1675
|
+
if (label) return { id: String(value), value: String(value), label, name: label }
|
|
1676
|
+
}
|
|
1677
|
+
if (!field.key.endsWith('_id')) return undefined
|
|
1649
1678
|
const siblingKey = field.key.replace(/_id$/, '')
|
|
1650
1679
|
const sib = record[siblingKey]
|
|
1651
1680
|
if (!sib || typeof sib !== 'object') return undefined
|