
- 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>
74 lines
2.5 KiB
Plaintext
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 |