#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Script para agregar resultados a las pruebas ya validadas """ import odoo import logging import random _logger = logging.getLogger(__name__) def add_results_to_validated_tests(env): """Agregar resultados a pruebas ya validadas""" # Buscar las órdenes S00029 y S00030 orders = env['sale.order'].search([('name', 'in', ['S00029', 'S00030'])], order='name') if not orders: print("No se encontraron las órdenes S00029 o S00030") return for order in orders: print(f"\n=== Procesando orden {order.name} ===") for test in order.lab_test_ids: print(f"\nPrueba: {test.product_id.name}") # Cambiar temporalmente a estado draft para poder modificar test.sudo().write({'state': 'draft'}) # Generar resultados si no existen if not test.result_ids: test.sudo()._generate_test_results() print(f" Generados {len(test.result_ids)} resultados") # Asignar valores a los resultados for result in test.result_ids: parameter = result.parameter_id vals = {} if parameter.value_type == 'numeric': # Valores específicos por código if parameter.code == 'HGB': # Hemoglobina vals['value_numeric'] = random.uniform(12.0, 16.0) elif parameter.code == 'HCT': # Hematocrito vals['value_numeric'] = random.uniform(36.0, 46.0) elif parameter.code == 'WBC': # Leucocitos vals['value_numeric'] = random.uniform(4.5, 10.0) elif parameter.code == 'PLT': # Plaquetas vals['value_numeric'] = random.uniform(150, 400) elif parameter.code == 'RBC': # Eritrocitos vals['value_numeric'] = random.uniform(4.0, 5.5) elif parameter.code == 'GLU': # Glucosa vals['value_numeric'] = random.uniform(70, 110) elif parameter.code == 'CHOL': # Colesterol vals['value_numeric'] = random.uniform(160, 220) elif parameter.code == 'TRIG': # Triglicéridos vals['value_numeric'] = random.uniform(50, 150) elif parameter.code == 'HDL': # HDL vals['value_numeric'] = random.uniform(40, 60) elif parameter.code == 'LDL': # LDL vals['value_numeric'] = random.uniform(80, 130) else: # Valor genérico vals['value_numeric'] = random.uniform(10, 100) print(f" - {parameter.name}: {vals['value_numeric']:.2f}") elif parameter.value_type == 'text': vals['value_text'] = "Normal" elif parameter.value_type == 'selection': vals['value_selection'] = "normal" elif parameter.value_type == 'boolean': vals['value_boolean'] = False # Escribir con sudo para evitar restricciones result.sudo().write(vals) # Volver a estado validated test.sudo().write({ 'state': 'validated', 'validator_id': env.ref('base.user_admin').id, 'validation_date': fields.Datetime.now() }) # Agregar notas a algunas pruebas if 'Hemograma' in test.product_id.name: test.sudo().write({'notes': 'Todos los parámetros dentro de rangos normales.'}) elif 'Lipídico' in test.product_id.name: test.sudo().write({'notes': 'Perfil lipídico normal. Se recomienda mantener dieta balanceada.'}) print("\n✅ Resultados agregados exitosamente a todas las pruebas") return orders if __name__ == '__main__': # Importar fields después de configurar Odoo from odoo import fields # Configuración db_name = 'lims_demo' # Conectar a Odoo odoo.tools.config.parse_config(['--database', db_name]) # Obtener el registro de la base de datos registry = odoo.registry(db_name) # Crear cursor y environment with registry.cursor() as cr: env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {}) try: # Agregar resultados a las pruebas orders = add_results_to_validated_tests(env) # Confirmar cambios cr.commit() print("\n📋 Ahora puedes probar el botón 'Imprimir Informe de Resultados' en las órdenes S00029 y S00030.") except Exception as e: cr.rollback() print(f"\n❌ Error: {str(e)}") _logger.error(f"Error agregando resultados: {str(e)}", exc_info=True)