
- Cambiar view_mode de 'tree' a 'list' en menus.xml para action_lims_test - Cambiar mode='tree' a 'list' en lims_test_views.xml para campo result_ids - Corregir script create_demo_data.py: * Comentar campo inexistente 'lab_request_priority' * Cambiar 'observations' por 'note' (campo estándar) * Cambiar 'lab_sample_ids' por 'generated_sample_ids' * Ajustar índices de pacientes para usar María González (femenina) para embarazo - Mejorar validación en lims_result.py: * Considerar False y 0.0 como equivalentes para campos numéricos * Solo requerir valores cuando la prueba no esté en estado 'draft' Resuelve el error "View types not defined tree found in act_window action 457" y permite confirmar órdenes con pruebas de selección correctamente. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
96 lines
3.6 KiB
Python
96 lines
3.6 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Script para encontrar y corregir resultados problemáticos
|
|
"""
|
|
|
|
import odoo
|
|
|
|
def find_problematic_results(cr):
|
|
"""Encontrar resultados con múltiples valores"""
|
|
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
|
|
|
|
print("🔍 Buscando resultados problemáticos...")
|
|
|
|
# Buscar todos los resultados de tipo selección
|
|
results = env['lims.result'].search([
|
|
('parameter_value_type', '=', 'selection')
|
|
])
|
|
|
|
print(f"\n Total de resultados de selección: {len(results)}")
|
|
|
|
problematic_count = 0
|
|
for result in results:
|
|
# Contar cuántos campos de valor están establecidos
|
|
values_set = []
|
|
|
|
if result.value_numeric not in [False, 0.0]:
|
|
values_set.append(f"numeric={result.value_numeric}")
|
|
if result.value_text:
|
|
values_set.append(f"text='{result.value_text}'")
|
|
if result.value_selection:
|
|
values_set.append(f"selection='{result.value_selection}'")
|
|
if result.value_boolean:
|
|
values_set.append(f"boolean={result.value_boolean}")
|
|
|
|
if len(values_set) > 1 or (len(values_set) == 1 and 'selection' not in values_set[0]):
|
|
problematic_count += 1
|
|
print(f"\n ❌ Resultado problemático ID {result.id}:")
|
|
print(f" Prueba: {result.test_id.name}")
|
|
print(f" Parámetro: {result.parameter_id.name}")
|
|
print(f" Valores establecidos: {', '.join(values_set)}")
|
|
|
|
# Corregir: limpiar todos los valores excepto selection
|
|
print(" 🔧 Corrigiendo...")
|
|
result.with_context(skip_validation=True).write({
|
|
'value_numeric': False,
|
|
'value_text': False,
|
|
'value_boolean': False,
|
|
# No tocar value_selection por ahora
|
|
})
|
|
print(" ✓ Corregido")
|
|
|
|
if problematic_count == 0:
|
|
print("\n✅ No se encontraron resultados problemáticos")
|
|
else:
|
|
print(f"\n📊 Resumen: {problematic_count} resultados corregidos")
|
|
|
|
# Buscar la orden S00029 para verificar su estado
|
|
print("\n🔍 Verificando orden S00029...")
|
|
order = env['sale.order'].search([('name', '=', 'S00029')], limit=1)
|
|
if order:
|
|
print(f" Estado actual: {order.state}")
|
|
|
|
if order.state == 'draft':
|
|
print("\n🔄 Intentando confirmar S00029...")
|
|
try:
|
|
order.action_confirm()
|
|
print("✅ ¡Orden confirmada exitosamente!")
|
|
print(f" Nuevo estado: {order.state}")
|
|
|
|
# Buscar las pruebas generadas
|
|
tests = env['lims.test'].search([
|
|
('sale_order_line_id.order_id', '=', order.id)
|
|
])
|
|
print(f" Pruebas generadas: {len(tests)}")
|
|
for test in tests:
|
|
print(f" - {test.name}: {test.product_id.name}")
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error al confirmar: {str(e)}")
|
|
else:
|
|
print(" La orden ya está confirmada")
|
|
|
|
if __name__ == '__main__':
|
|
db_name = 'lims_demo'
|
|
try:
|
|
registry = odoo.modules.registry.Registry(db_name)
|
|
with registry.cursor() as cr:
|
|
find_problematic_results(cr)
|
|
# Hacer commit manual si todo salió bien
|
|
cr.commit()
|
|
print("\n✅ Cambios guardados exitosamente")
|
|
except Exception as e:
|
|
print(f"\n❌ Error: {e}")
|
|
import traceback
|
|
traceback.print_exc() |