Repository navigation
fix: [TESIS-158] let a webhook order be saved without city nor province - #72
Conversation
…vince The edit form required city and province, but orders that come by webhook never carry them: the channel payload has no such keys and the API accepts them empty. The form opened invalid, the onChange mode showed no error until a field was touched, and Save stayed disabled even to just mark the order as paid. Sending those fields empty would not have worked either: the API refuses an empty province. The address now counts only when the operator touched it: untouched, it is neither required to save nor sent in the PUT. Once touched, the whole address is validated at once, so a city or province that was already missing shows its error instead of silently disabling Save. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Revisado. Lo veo bien para implementar. Esto ya te está pegando. Las órdenes que entran por webhook no traen ciudad ni provincia — Lo que verifiqué
|
TomasMartin2004
left a comment
There was a problem hiding this comment.
Revisión del diff completo. El código es idéntico al que leí cuando los PRs estaban en draft —ningún commit nuevo—, así que lo que sigue es el veredicto formal.
✅ Aprobado
Esto ya está pegando en producción local. Las órdenes que entran por webhook no traen ciudad ni provincia —Orders::TranslateWebhookPayload no tiene esas claves y la API las acepta vacías— pero el formulario de modificación las exige. Con el modo onChange de React Hook Form, que no marca nada hasta que se toca cada campo, el resultado es «Guardar cambios» apagado y ningún campo en rojo: el operador no tiene forma de saber qué falta.
La orden de Shopify que entró con TESIS-138 cae exactamente en este caso, así que es un defecto alcanzable hoy en el entorno desplegado.
Lo que verifiqué
- El domicilio viaja sólo si el operador lo tocó. Fui a chequear el lado de Rails:
ORDER_FIELDSpermite esas claves pero no las exige, así que una clave ausente deja el valor como estaba. El cambio es seguro y no borra el domicilio de las órdenes que sí lo tienen. - El
default = truedel parámetro nuevo mantiene a los llamadores existentes sin tocar. - El
useEffectque disparatrigger()cuando el domicilio se ensucia resuelve la otra mitad: en cuanto se toca un campo se validan todos, en vez de descubrirlo campo por campo. Hay test dedicado. - Los tres casos están cubiertos: se puede marcar como pagada, no se manda el domicilio que no se tocó, y tocarlo pide todo lo que falta.
…ce (#72) The edit form required city and province, but orders that come by webhook never carry them: the channel payload has no such keys and the API accepts them empty. The form opened invalid, the onChange mode showed no error until a field was touched, and Save stayed disabled even to just mark the order as paid. Sending those fields empty would not have worked either: the API refuses an empty province. The address now counts only when the operator touched it: untouched, it is neither required to save nor sent in the PUT. Once touched, the whole address is validated at once, so a city or province that was already missing shows its error instead of silently disabling Save. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Ticket de Jira
https://proyectofinalfrlp.atlassian.net/browse/TESIS-158
Descripción
El formulario de modificación de una orden (S09) exige ciudad y provincia (
destinationSchema), pero las órdenes que entran por webhook nunca las traen:Orders::TranslateWebhookPayloadno tiene esas claves y la API las acepta vacías (TESIS-128). El formulario abría inválido, el modoonChangede React Hook Form no marca nada hasta que se toca cada campo, y «Guardar cambios» quedaba apagado sin ningún campo en rojo, aunque el operador sólo quisiera pasar la orden a «Pagada».Mandar los campos vacíos tampoco habría servido: la API valida
customer_provincecontra la lista de provincias conallow_nil, así que una provincia vacía es un 422.Decisiones que conviene mirar:
El domicilio cuenta sólo si se tocó.
canSaveexige el domicilio válido únicamente cuando estádirty, ytoUpdatePayloadno manda sus cuatro campos si no cambiaron (UpdateOrdersólo actualiza lo que recibe). Así, cambiar el estado o las líneas de una orden de webhook funciona, y el domicilio queda como vino del canal.Si se toca, se valida entero. Al empezar a editar el domicilio se dispara la validación de todos sus campos: una ciudad o una provincia que ya faltaban se marcan en rojo, en lugar de apagar el guardado sin explicación.
OrderEditForm:canSavecon el domicilio condicionado adestinationDirty,triggerdel domicilio cuando se ensucia, ytoUpdatePayload(..., destinationDirty).toUpdatePayloadaceptaincludeDestination(por defectotrue, como antes).UpdateOrderPayloaddeclara opcionales los cuatro campos del domicilio.Evidencia visual
Pendiente de captura.
Cómo probar
masterel botón queda apagado.Verificación:
npm run test(680 tests, 0 fallas),npm run lint,npm run format:checkynpm run buildlimpios.Impacto y consideraciones
¿Introduce breaking changes?
No. Una orden con domicilio completo se guarda igual que antes.
¿Requiere nuevas variables de entorno?
No
¿Afecta la arquitectura o genera un nuevo patrón?
No
🤖 Generated with Claude Code