Commit fafa9f3
committed
fix(precios): nada se guarda solo -- cambios pendientes y un unico guardado
Reescritura de la edicion de la rejilla. Julio, en produccion: «antes salio un
guardar, ahora no, y si te sales de la celda no lo guarda. Es muy irregular».
EL MODELO
Editar acumula CAMBIOS PENDIENTES. Escribir ocurre en un solo sitio: el boton
Guardar de la barra de abajo, que esta SIEMPRE ahi (con 0 cambios sigue puesto,
apagado). Guardar abre la previsualizacion y escribe UNA operacion con las N
entradas, reversible entera.
Las teclas, sin excepciones: Enter acepta y baja · Tab acepta y va a la derecha ·
salir de la celda acepta tambien · Esc descarta esa edicion y no toca las demas ·
campo vacio acepta «volver a heredado». Salvo Esc, todo lo tecleado se queda
pendiente: nunca se pierde y nunca se escribe sin pasar por Guardar.
La operacion en lote alimenta LA MISMA lista de pendientes en vez de tener su
propio guardado. Dos caminos de guardado era justo lo que producia «a veces sale
un guardar y a veces no».
DOS COSAS QUE HABRIAN ROTO LA PANTALLA, ENCONTRADAS AL IMPLEMENTAR
1. useBlocker de react-router LANZA fuera de un data router, y esta app monta
<BrowserRouter>. Usarlo para el aviso de salida habria matado la pantalla en
el primer render con un cambio pendiente. Sustituido por un escuchador en
fase de captura sobre los enlaces + beforeunload, sin tocar el armazon.
Queda un hueco declarado: el boton Atras del navegador y el Atras fisico de
Android no pasan por ahi.
2. Aceptar al salir de la celda no puede leer el estado de React: va un render
por detras. Ahora onBlur lee el DOM, y Esc devuelve al campo el valor con el
que se abrio, con lo que el onBlur del desmontaje se vuelve inocuo. Sin
indicadores de «estoy escapando» que consultar.
EL AMBITO (§3)
Investigado: el guardado lee UN solo `locationId`, y el `location_id` escrito y
el `ambito` del scope salen de esa misma variable, asi que no pueden discrepar
entre si. El cliente tenia ambito cuenta de verdad; no he encontrado ningun
camino por el que el selector se lea mal. Lo que faltaba era que la pantalla lo
DIJERA donde se mira antes de escribir: ahora el ambito aparece por su nombre en
la barra de guardado, en el titulo de la previsualizacion y en el propio boton
(«Guardar en Foodint Alcala»). Ademas el scope guarda `ambito_location_id`.
Y cambiar de marca o de ambito con pendientes pide confirmacion en vez de
tirarlos en silencio, que es como se perdia el trabajo al intentar corregirlo.
De paso: la consulta de locales ya no se traga su error. Si fallaba, el
desplegable se quedaba con «toda la cuenta» como unica opcion y era imposible
escribir en un local sin que nadie entendiera por que.
FORMATO (§4)
Se usan fmtMoney y fmtNumEs de src/lib/format.ts, que existian para esto: dos
decimales y simbolo al mostrar, coma sin simbolo al sembrar el campo. Antes se
sembraba con String(precio) y salia «15,9» al lado de «15,90 €». El comentario
de fmtNumEs describe ese fallo literalmente; no haberla usado fue el error.
VERIFICADO
- Build (npm run build), lint y las 18 pruebas puras en verde.
- En el laboratorio, una operacion de 2 entradas con ambito local: UNA fila en
price_operation con entries_count=2, DOS en el historial con el MISMO
operation_id, y los dos overrides con location_id = Alcala, no NULL. Revertida
despues; el laboratorio queda sin overrides de local.
- Cero trafico a HubRise y Last.
Lo que necesita abrir la pantalla (gestos, barra, aviso de salida) queda para
la verificacion de Julio: es la leccion de la entrega anterior.
VENTANA: esto dispara OTA y la de hoy se cerro a las 12:15. Va en la rama, SIN
mergear a main. El workflow solo construye en push a main, asi que aqui no
despliega nada. Mergear despues de las 23:45 o manana antes de las 12:15.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vy4yW6xBAtXcaSGgKybquB1 parent 03c5dbd commit fafa9f3
2 files changed
Lines changed: 571 additions & 539 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
0 commit comments