clinical_laboratory/test/verify_order_state.py
Luis Ernesto Portillo Zaldivar 39318f9073 feat(#54): Cancelar automáticamente muestras y pruebas al cancelar orden
- 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>
2025-07-15 18:53:19 -06:00

49 lines
1.4 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Verificar estado de orden después de cancelar
"""
import odoo
def verify_order_state(cr):
"""Verificar que el estado de la orden cambia correctamente"""
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
# Buscar datos necesarios
patient = env['res.partner'].search([('is_patient', '=', True)], limit=1)
analysis = env['product.product'].search([('is_analysis', '=', True)], limit=1)
# Crear orden simple
order = env['sale.order'].create({
'partner_id': patient.id,
'is_lab_request': True,
'order_line': [(0, 0, {
'product_id': analysis.id,
'product_uom_qty': 1.0
})]
})
print(f"Orden creada: {order.name}")
print(f"Estado inicial: {order.state}")
# Confirmar
order.action_confirm()
print(f"Estado después de confirmar: {order.state}")
# Cancelar
order.action_cancel()
print(f"Estado después de cancelar: {order.state}")
# Verificar nuevamente
order_check = env['sale.order'].browse(order.id)
print(f"Estado verificado nuevamente: {order_check.state}")
if __name__ == '__main__':
db_name = 'lims_demo'
try:
registry = odoo.modules.registry.Registry(db_name)
with registry.cursor() as cr:
verify_order_state(cr)
except Exception as e:
print(f"Error: {e}")