## 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