#!/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()