feat(#54): Cancelar automáticamente muestras y pruebas al cancelar orden #55

Merged
luis_portillo merged 1 commits from feature/54-auto-cancel-samples into dev 2025-07-16 00:59:08 +00:00

Descripción

Implementación de la funcionalidad para cancelar automáticamente muestras y pruebas cuando se cancela una orden de laboratorio, evitando que queden elementos "huérfanos" en el sistema.

🎯 Objetivo

Resolver el issue #54: Las muestras y pruebas asociadas a una orden de laboratorio deben cancelarse automáticamente cuando se cancela la orden.

🔧 Cambios implementados

1. Modelo stock.lot (Muestras)

  • Agregado nuevo estado 'cancelled' a la selección de estados
  • Implementado método action_cancel() para cambiar el estado a cancelado

2. Modelo sale.order (Órdenes)

  • Override del método action_cancel() que:
    • Llama primero al método padre para mantener el comportamiento estándar
    • Si es una orden de laboratorio (is_lab_request = True):
      • Cancela muestras en estados: pending_collection, collected, received, in_process
      • Cancela pruebas asociadas que no estén en estado validated o cancelled
      • Registra mensajes en el chatter de cada elemento cancelado
      • Muestra un resumen en la orden con la cantidad de elementos cancelados

3. Tests unitarios

  • Creado test_order_cancel_cascade.py con 6 tests que verifican:
    • Cancelación correcta de muestras
    • Cancelación correcta de pruebas
    • No cancelación de muestras en estados finales (analyzed, stored, disposed)
    • No cancelación de pruebas validadas
    • Generación de mensajes en chatter
    • Órdenes normales (no laboratorio) no afectadas

🧪 Pruebas realizadas

Test manual exitoso:

📦 Muestras generadas:
  - 0000012: Contenedor de Heces (Estado: pending_collection)

🔬 Pruebas generadas:
  - LAB-2025-00014: Coprocultivo (Estado: draft)

❌ Cancelando la orden de laboratorio...

📦 Estado final de las muestras:
  - 0000012: cancelled ✓

🔬 Estado final de las pruebas:
  - LAB-2025-00014: cancelled ✓

✅ Mensajes de cancelación registrados en todos los elementos

📋 Checklist

  • Código implementado y probado
  • Tests unitarios creados
  • Pruebas manuales exitosas
  • Mensajes en chatter funcionando
  • Sin errores o warnings
  • Documentación en código

🔍 Cómo probar

  1. Crear una orden de laboratorio con análisis
  2. Confirmar la orden (se generan muestras y pruebas)
  3. Opcionalmente iniciar proceso en alguna prueba
  4. Cancelar la orden
  5. Verificar que:
    • Las muestras cambiaron a estado "Cancelada"
    • Las pruebas cambiaron a estado "Cancelado"
    • Hay mensajes en el chatter explicando la cancelación

Resuelve #54

## Descripción Implementación de la funcionalidad para cancelar automáticamente muestras y pruebas cuando se cancela una orden de laboratorio, evitando que queden elementos "huérfanos" en el sistema. ## 🎯 Objetivo Resolver el issue #54: Las muestras y pruebas asociadas a una orden de laboratorio deben cancelarse automáticamente cuando se cancela la orden. ## 🔧 Cambios implementados ### 1. Modelo `stock.lot` (Muestras) - Agregado nuevo estado `'cancelled'` a la selección de estados - Implementado método `action_cancel()` para cambiar el estado a cancelado ### 2. Modelo `sale.order` (Órdenes) - Override del método `action_cancel()` que: - Llama primero al método padre para mantener el comportamiento estándar - Si es una orden de laboratorio (`is_lab_request = True`): - Cancela muestras en estados: `pending_collection`, `collected`, `received`, `in_process` - Cancela pruebas asociadas que no estén en estado `validated` o `cancelled` - Registra mensajes en el chatter de cada elemento cancelado - Muestra un resumen en la orden con la cantidad de elementos cancelados ### 3. Tests unitarios - Creado `test_order_cancel_cascade.py` con 6 tests que verifican: - ✅ Cancelación correcta de muestras - ✅ Cancelación correcta de pruebas - ✅ No cancelación de muestras en estados finales (analyzed, stored, disposed) - ✅ No cancelación de pruebas validadas - ✅ Generación de mensajes en chatter - ✅ Órdenes normales (no laboratorio) no afectadas ## 🧪 Pruebas realizadas ### Test manual exitoso: ``` 📦 Muestras generadas: - 0000012: Contenedor de Heces (Estado: pending_collection) 🔬 Pruebas generadas: - LAB-2025-00014: Coprocultivo (Estado: draft) ❌ Cancelando la orden de laboratorio... 📦 Estado final de las muestras: - 0000012: cancelled ✓ 🔬 Estado final de las pruebas: - LAB-2025-00014: cancelled ✓ ✅ Mensajes de cancelación registrados en todos los elementos ``` ## 📋 Checklist - [x] Código implementado y probado - [x] Tests unitarios creados - [x] Pruebas manuales exitosas - [x] Mensajes en chatter funcionando - [x] Sin errores o warnings - [x] Documentación en código ## 🔍 Cómo probar 1. Crear una orden de laboratorio con análisis 2. Confirmar la orden (se generan muestras y pruebas) 3. Opcionalmente iniciar proceso en alguna prueba 4. Cancelar la orden 5. Verificar que: - Las muestras cambiaron a estado "Cancelada" - Las pruebas cambiaron a estado "Cancelado" - Hay mensajes en el chatter explicando la cancelación Resuelve #54
luis_portillo added 1 commit 2025-07-16 00:55:00 +00:00
- Agregar estado 'cancelled' a stock.lot para muestras
- Implementar método action_cancel() en stock.lot
- Override action_cancel() en sale.order para:
  * Cancelar muestras en estados: pending_collection, collected, received, in_process
  * Cancelar pruebas asociadas que no estén validadas
  * Registrar mensajes en el chatter de cada elemento cancelado
  * Mostrar resumen de elementos cancelados en la orden
- Agregar tests unitarios completos para verificar:
  * Cancelación correcta de muestras y pruebas
  * No cancelación de elementos en estados finales
  * Generación de mensajes en chatter
  * Órdenes normales no afectadas

La funcionalidad asegura que no queden muestras o pruebas "huérfanas"
cuando se cancela una orden de laboratorio.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
luis_portillo merged commit 4d3206f3a1 into dev 2025-07-16 00:59:08 +00:00
Sign in to join this conversation.
No reviewers
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Grupo-Consiti/clinical_laboratory#55
No description provided.