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 usando el ORM print("\n" + "="*60) print("VERIFICACIÓN FINAL:") print("="*60) # Verificar a través del ORM que es más seguro for company in env['res.company'].search([], order='id'): print(f"\nEmpresa ID {company.id}:") print(f" - Nombre: {company.name}") print(f" - Logo presente: {'SI' if company.logo else 'NO'}") if company.logo: print(f" - Tamaño del logo (base64): {len(company.logo):,} 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)