Skip to content

Añadir validación de estado del documento en PurchasesController y SalesController#1966

Closed
EstebanSM85 wants to merge 2 commits into
NeoRazorX:masterfrom
EstebanSM85:Tarea-4673-bug-bug-factura
Closed

Añadir validación de estado del documento en PurchasesController y SalesController#1966
EstebanSM85 wants to merge 2 commits into
NeoRazorX:masterfrom
EstebanSM85:Tarea-4673-bug-bug-factura

Conversation

@EstebanSM85

Copy link
Copy Markdown
Contributor

https://facturascripts.com/roadmap/4673
Se ha modificado la lógica de validación en los métodos de guardado de documentos en
PurchasesController y SalesController tanto para facturas emitidas, como recibidas. Ahora se verifica el estado del documento
antes de permitir la acción de guardado, asegurando que solo se guarden documentos editables con el estado correcto.

  • Se agregó un campo oculto para el estado del documento en CommonSalesPurchases.php.
  • Se implementó la validación del estado del documento en PurchasesController.php y SalesController.php.
  • Se añadió un mensaje de advertencia en caso de que el estado del documento cambie.

Esto ayuda a prevenir la pérdida de datos al intentar guardar cambios en un documento cuyo estado ha cambiado.

  • Modificado PurchasesController.php
  • Modificado SalesController.php

…lesController

- Se agregó un campo oculto para el estado del documento en CommonSalesPurchases.php.
- Se implementó la validación del estado del documento en PurchasesController.php y SalesController.php.
- Se añadió un mensaje de advertencia en caso de que el estado del documento cambie.

Esto ayuda a prevenir la pérdida de datos al intentar guardar cambios en un documento cuyo estado ha cambiado.
…lesController

Se ha modificado la lógica de validación en los métodos de guardado de documentos en
PurchasesController y SalesController. Ahora se verifica el estado del documento
antes de permitir la acción de guardado, asegurando que solo se guarden documentos
editables con el estado correcto.

- Modificado PurchasesController.php
- Modificado SalesController.php
@NeoRazorX

Copy link
Copy Markdown
Owner

Gracias por el trabajo, @EstebanSM85 🙌

La idea de fondo es la correcta —bloqueo optimista comparando el idestado del formulario con el de la base de datos para evitar la pérdida de líneas cuando dos usuarios editan a la vez—, pero voy a cerrar este PR porque el planteamiento tiene un par de puntos que prefiero resolver de otra forma:

  • En saveStatusAction, el guard && $formIdestado === $currentModel->idestado hace cortocircuito justo en el caso concurrente: no llega a llamar a saveDocAction, no muestra el aviso y aplica igualmente el nuevo estado, perdiendo en silencio las ediciones. Es el escenario que queríamos proteger.
  • La traducción solo se añadió a es_ES.json; faltaría en en_EN.json (idioma base) y el resto.

Voy a implementar una versión centralizando la comprobación en el único punto donde se guardan/borran líneas, para que sea consistente y no haga falta tocar saveStatusAction. Te menciono en el commit. ¡Gracias de nuevo por levantar el problema y por el análisis!

@NeoRazorX NeoRazorX closed this Jun 29, 2026
NeoRazorX added a commit that referenced this pull request Jun 29, 2026
… 4673)

Bloqueo optimista centralizado en saveDocAction (ventas y compras): si el
idestado del formulario no coincide con el del modelo en BD, se rechaza el
guardado con un aviso antes de tocar las lineas. Asi savePaidAction y
saveStatusAction lo heredan sin duplicar la comprobacion.

El campo oculto idestado se renderiza en todas las ramas de documento
existente (incluida la de estados generadoc). Traduccion document-state-changed
añadida a en_EN y es_ES.

Solucion alternativa al PR #1966 de @EstebanSM85, que planteo el problema.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants