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