feat(web): el selector de artículo de una línea admite varios (el primero completa la línea, los demás se insertan debajo)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1528f7cb96
commit
45c0ca536e
5 files changed
+37
-1
No files matched your search
@@ -218,11 +218,34 @@ describe('LinesGrid', () => {
|
||||
await tick();
|
||||
(q('.dlg tbody tr') as HTMLElement).click();
|
||||
await tick();
|
||||
(q('.dlg footer .btn.main') as HTMLElement).click();
|
||||
await tick();
|
||||
expect(lines()[0]).toMatchObject({ ItemCode: 'I00002', ItemDescription: 'DVD+R Disc 50-Pack', Quantity: 2, Price: 50, LineTotal: 100 });
|
||||
expect(el.querySelector('.dlg')).toBeNull();
|
||||
expect(document.activeElement).toBe(cell(0, 0));
|
||||
});
|
||||
|
||||
it('varios artículos: el primero completa la línea y los demás se insertan debajo', async () => {
|
||||
fixture.componentInstance.lines.set([line('A', 2, 50), line('Z', 1, 10)]);
|
||||
await tick();
|
||||
(qa('.pick button')[0] as HTMLButtonElement).click();
|
||||
await tick();
|
||||
ctrl.expectOne((r) => r.url === '/api/sl/Items').flush({
|
||||
value: [
|
||||
{ ItemCode: 'I1', ItemName: 'Uno' },
|
||||
{ ItemCode: 'I2', ItemName: 'Dos' },
|
||||
],
|
||||
'odata.count': '2',
|
||||
});
|
||||
await tick();
|
||||
qa('.dlg tbody tr').forEach((r) => (r as HTMLElement).click());
|
||||
await tick();
|
||||
(q('.dlg footer .btn.main') as HTMLElement).click();
|
||||
await tick();
|
||||
expect(lines().map((l) => l['ItemCode'])).toEqual(['I1', 'I2', 'Z']);
|
||||
expect(lines()[0]).toMatchObject({ Quantity: 2, Price: 50 });
|
||||
});
|
||||
|
||||
it('F4 abre la lista de la celda; una celda sin lista no', async () => {
|
||||
await key(0, 3, 'F4'); // almacén
|
||||
ctrl.expectOne((r) => r.url === '/api/sl/Warehouses').flush({ value: [], 'odata.count': '0' });
|
||||
|
||||
Reference in new issue
Block a user