import base64 import os import sys try: # El script se ejecuta dentro del shell de Odoo print("Iniciando actualización de logo para Odoo 18...") # Buscar TODAS las empresas companies = env['res.company'].search([]) print(f"Empresas encontradas: {len(companies)}") # Leer el archivo de logo logo_path = '/mnt/extra-addons/lims_management/static/img/lab_logo.png' if not os.path.exists(logo_path): print(f"ERROR: No se encontró el archivo de logo en: {logo_path}") sys.exit(1) print(f"Archivo de logo encontrado en: {logo_path}") # Leer y codificar la imagen with open(logo_path, 'rb') as logo_file: logo_data = logo_file.read() logo_base64 = base64.b64encode(logo_data) # No decodificar a string print(f"Logo leído correctamente, tamaño: {len(logo_data)} bytes") # Actualizar las empresas for idx, company in enumerate(companies): print(f"\nActualizando empresa ID {company.id}: {company.name}") # Generar nombre único para cada empresa if idx == 0: new_name = 'Laboratorio Clínico LIMS' else: new_name = f'Laboratorio Clínico LIMS - Sucursal {idx}' try: # En Odoo 18, actualizar por separado para evitar problemas # Primero el nombre company.name = new_name env.cr.commit() print(f"Nombre actualizado: {new_name}") # Luego el logo usando sudo para evitar problemas de permisos company.sudo().write({ 'logo': logo_base64, }) env.cr.commit() print(f"Logo actualizado para la empresa ID {company.id}") # También actualizar el partner asociado if company.partner_id: company.partner_id.name = new_name company.partner_id.sudo().write({ 'image_1920': logo_base64, }) env.cr.commit() print(f"Partner actualizado (ID: {company.partner_id.id})") except Exception as e: print(f"Error al actualizar empresa ID {company.id}: {str(e)}") env.cr.rollback() continue # Verificación final con consulta directa a la BD print("\n" + "="*60) print("VERIFICACIÓN FINAL (consulta directa):") print("="*60) env.cr.execute(""" SELECT id, name, CASE WHEN logo IS NOT NULL THEN 'SI' ELSE 'NO' END as tiene_logo, CASE WHEN logo IS NOT NULL THEN length(logo) ELSE 0 END as logo_size FROM res_company ORDER BY id """) for row in env.cr.fetchall(): print(f"\nEmpresa ID {row[0]}:") print(f" - Nombre: {row[1]}") print(f" - Logo presente: {row[2]}") if row[2] == 'SI': print(f" - Tamaño del logo (base64): {row[3]:,} caracteres") # Forzar actualización de caché env['res.company'].invalidate_cache() print("\nLogo de la empresa actualizado exitosamente.") print("NOTA: Si el logo no aparece en la interfaz, puede ser necesario:") print(" 1. Limpiar la caché del navegador (Ctrl+F5)") print(" 2. Reiniciar el servicio de Odoo") except Exception as e: print(f"ERROR al actualizar el logo: {str(e)}") import traceback traceback.print_exc() sys.exit(1)