feat(web): grilla de líneas editable y página de componentes de desarrollo
- sbo-lines-grid: columnas declarativas (texto / número con decimales / solo lectura / calculadas), celdas con lista de valores (botón "..." y F4) cuyo apply rellena la línea, añadir y quitar línea, y "Elegir artículos..." para agregar varias líneas a la vez. - Teclado: Enter confirma y baja a la misma columna (crea línea en la última fila), flechas arriba/abajo cambian de fila. Las celdas se confirman al salir de ellas; un número inválido conserva el anterior. - Documento cerrado: grilla de solo lectura, sin botones ni listas. - Columnas estándar de línea de SAP (artículo, descripción, cantidad, almacén, precio, % dto., impuesto, total) con TaxCode / SalesTaxCodes, verificado en el Service Layer real; recalcLine (cantidad x precio x (1 - dto)). - Corrige el foco al crear una línea con Enter: se pedía antes de que la fila existiera en el DOM (ahora espera al render). - /dev/componentes: página de componentes solo para desarrollo (canMatch isDevMode), sin entrada en el menú y sin escribir en SAP. - Verificado en Chrome contra SAP real: artículo elegido de la lista, 5 x 10,000 con 10 % = 45,000.00, Enter/flechas, varios artículos a la vez, quitar línea y subtotal del pie. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
26f0649da9
commit
0a7bfb850a
11 files changed
+1150
No files matched your search
@@ -31,6 +31,13 @@ describe('rutas', () => {
|
||||
expect(route.loadComponent).toBeDefined();
|
||||
});
|
||||
|
||||
it('la página de componentes está restringida a desarrollo y no está en el menú', () => {
|
||||
const route = children.find((r) => r.path === 'dev/componentes');
|
||||
expect(route?.loadComponent).toBeDefined();
|
||||
expect(route?.canMatch).toHaveLength(1); // solo coincide en desarrollo
|
||||
expect(MENU.flatMap((m) => m.items).some((i) => i.path.startsWith('/dev/'))).toBe(false);
|
||||
});
|
||||
|
||||
it('las rutas desconocidas vuelven al inicio', () => {
|
||||
expect(routes.at(-1)).toMatchObject({ path: '**', redirectTo: '' });
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user