33 lines
1.7 KiB
Markdown
33 lines
1.7 KiB
Markdown
# POS-FIX-9: Implementer Evidence
|
||
|
||
## Problema
|
||
1. El panel de ventas pendientes hacía polling cada 10 segundos causando flicker constante.
|
||
2. Al recuperar un ticket con artículos en el cashier, se hacía merge automático sin preguntar.
|
||
|
||
## Cambios realizados
|
||
|
||
### Frontend
|
||
**`project/apps/pos/src/app/(terminal)/page.tsx`**
|
||
- **Eliminado polling de 10s** — solo refresh manual via botón
|
||
- **Nueva función `doRecoverSale(sale)`** — recuperación real (reutilizada por parkAndRecover y merge)
|
||
- **Nueva función `parkAndRecover()`** — aparca ticket actual y recupera venta seleccionada
|
||
- **Nueva función `mergeRecoveredItems()`** — añade items recuperados al ticket actual
|
||
- **Modificada `recoverSale(sale)`** — si cart tiene items, abre merge dialog en vez de auto-merge
|
||
- **Nuevo estado `mergePendingSale`** — almacena la venta a recuperar para el diálogo
|
||
- **Diálogo de merge** con 3 opciones:
|
||
- 💾 "Dejar actual pendiente y recuperar" — parkAndRecover()
|
||
- ➕ "Añadir al ticket actual" — mergeRecoveredItems()
|
||
- "Cancelar" — cierra diálogo sin acción
|
||
|
||
## Bug corregido
|
||
Los botones del diálogo no funcionaban porque `recoverSale()` seteaba `recoveringSaleId` al abrir el diálogo, lo que habilitaba `disabled={recoveringSaleId !== null}` en los botones del diálogo.
|
||
- **Fix**: ya no se setea `recoveringSaleId` al abrir el diálogo (solo se setea durante la carga real)
|
||
- **Fix**: los handlers de los botones ahora usan `.catch()` para mostrar errores
|
||
|
||
## Verificación
|
||
- [x] TypeScript compila sin errores
|
||
- [x] Polling 10s eliminado del panel de ventas pendientes
|
||
- [x] Diálogo de merge visible al recuperar con cart items
|
||
- [x] Tres opciones funcionando correctamente
|
||
- [x] Botones no deshabilitados al abrir diálogo
|