
- 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>
49 lines
1.4 KiB
Python
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}") |