Repository navigation
feat: [TESIS-999003] move stock between warehouses from the product detail - #61
Closed
LauAubert wants to merge 1 commit into
Conversation
…etail The stock transfers API (TESIS-103) had no screen: units could only be moved from the console or the backoffice. The product detail now lists the transfers in flight of the product and lets the operator create one, receive it or cancel it. The transfer modal only offers warehouses holding units as origin, leaves the origin out of the destinations and caps the quantity at what the origin holds. A 422 (the units were moved meanwhile) or a 409 (another operation holds the stock) is explained inside the modal. Receiving and cancelling ask first, and a 409 on them refreshes the list because someone else already settled it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 2, 2026
Contributor
|
Revisado. No lo mergearía para esta entrega. El trabajo está bien y la carencia que describe es cierta: la API de transferencias existe desde TESIS-103 y mover unidades entre depósitos sólo se podía desde la consola o desde Avo. Lo dejo afuera por dos razones:
Para el backlog, sin problema. Antes de la entrega, no. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ticket de Jira
https://proyectofinalfrlp.atlassian.net/browse/TESIS-999003
Descripción
La API de transferencias entre depósitos existe desde TESIS-103 (
POST /stock-transfers,GET /stock-transfers,/receive,/cancel) y el catálogo ya muestra «+N en tránsito», pero no había ninguna pantalla para mover unidades: sólo se podía desde la consola o el backoffice. Este PR suma al detalle de producto la tarjeta «Transferencias en curso», con el alta, la recepción y la cancelación.PR apilado sobre proyecto-web#60 (card 002): usa el
stockStatuspor fila y la distribución con entrantes que arma esa rama. Se revisa y mergea después de #60, que a su vez espera a proyecto-api#99.Decisiones que conviene mirar:
Sin maqueta. S12 no tiene esta tarjeta. Sigue la forma de la «Distribución por depósito» (misma cabecera y separadores) y usa
ModalFrameyConfirmDialogdel DS. Va debajo de la grilla para no tocar la maqueta existente.Qué ofrece el modal. El origen sólo lista depósitos con unidades del producto: transferir desde uno vacío siempre termina en 422. El destino lista cualquier otro depósito de la empresa, tenga o no stock del producto. El tope de cantidad sale del origen elegido y vive en el schema de Zod (
transferStockSchemase arma con las unidades de cada origen), así que el error aparece en el campo antes de llegar a la API.Errores de la API, traducidos. 422 (el origen ya no tiene esas unidades porque alguien las movió con el modal abierto) y 409 (otra operación tiene tomado el stock del producto,
WithStockLock) se explican dentro del modal, que queda abierto con lo cargado. Al recibir o cancelar, un 409 quiere decir que la transferencia ya se liquidó en otro lado: el hook invalida también al fallar, así que la lista se actualiza, y el aviso dice por qué desapareció.Confirmación. Recibir pide confirmación con tono normal; cancelar, con tono destructivo («no se puede deshacer»): devuelve las unidades al origen y la transferencia queda cerrada.
fetchTransfers,createTransferysettleTransferenapi.ts, con su traducción aStockTransfer.useProductTransfers,useCreateTransferyuseSettleTransfer; las mutaciones invalidan todo el dominioinventory(cambiantotal_stock, el en tránsito y la distribución).TransferStockModal(presentacional, RHF + Zod) yProductTransfers(lista + acciones + diálogos) y los monta enProductDetailPage.inventoryKeys.transfers(productId), colgada deallpara que las invalidaciones existentes la alcancen.docs/guidelines/architecture.md.Evidencia visual
Pendiente de captura con la API levantada. El comportamiento está cubierto por los tests de
TransferStockModalyProductTransfers.Cómo probar
Precondición: API con proyecto-api#99,
bin/rails db:seed, login con un usuario de Norte.NOR-003→ tarjeta «Transferencias en curso» vacía.Verificación:
npm run test(693 tests, 0 fallas),npm run lint,npm run format:checkynpm run buildlimpios.Impacto y consideraciones
¿Introduce breaking changes?
No
¿Requiere nuevas variables de entorno?
No
¿Afecta la arquitectura o genera un nuevo patrón?
No. Mismo patrón que los modales de producto (presentacional + hooks de React Query en quien lo monta).
🤖 Generated with Claude Code