clinical_laboratory/pr_body_54.txt
Luis Ernesto Portillo Zaldivar 58e1648493 feat(#9): Implementar flujo de validación y seguridad
- Ajustar permisos base: recepcionistas solo lectura, técnicos sin eliminar
- Crear reglas de registro para control granular por estado
- Implementar verificación de permisos en todas las transiciones
- Agregar mail.thread a stock.lot para trazabilidad completa
- Validar transiciones de estado y muestras asociadas
- Actualizar vistas con restricciones según grupos de usuario
- Mejorar mensajes del chatter con más contexto

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 19:19:51 -06:00

74 lines
2.5 KiB
Plaintext

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