#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Script para arreglar el campo label_custom en helpdesk.template.field Ejecutar desde shell de Odoo: python src/user/helpdesk_extras/scripts/fix_label_custom.py O desde shell interactivo: exec(open('src/user/helpdesk_extras/scripts/fix_label_custom.py').read()) """ import logging _logger = logging.getLogger(__name__) def fix_label_custom_field(env): """Arregla el campo label_custom en la base de datos""" try: _logger.info("Iniciando fix de label_custom...") # 1. Verificar y agregar columna en base de datos si no existe env.cr.execute(""" SELECT column_name FROM information_schema.columns WHERE table_name = 'helpdesk_template_field' AND column_name = 'label_custom' """) column_exists = env.cr.fetchone() if not column_exists: _logger.info("Agregando columna label_custom a helpdesk_template_field...") env.cr.execute(""" ALTER TABLE helpdesk_template_field ADD COLUMN IF NOT EXISTS label_custom VARCHAR """) env.cr.commit() _logger.info("Columna agregada exitosamente") else: _logger.info("Columna label_custom ya existe") # 2. Verificar y registrar campo en ir.model.fields model = env['ir.model'].search([('model', '=', 'helpdesk.template.field')], limit=1) if not model: _logger.error("Modelo helpdesk.template.field no encontrado") return False field_model = env['ir.model.fields'] existing_field = field_model.search([ ('model_id', '=', model.id), ('name', '=', 'label_custom') ], limit=1) if not existing_field: _logger.info("Registrando campo label_custom en ir.model.fields...") field_model.create({ 'model_id': model.id, 'name': 'label_custom', 'field_description': 'Custom Label', 'ttype': 'char', 'state': 'manual', 'required': False, 'readonly': False, 'store': True, }) env.cr.commit() _logger.info("Campo registrado exitosamente") else: _logger.info("Campo label_custom ya está registrado en ir.model.fields") # 3. Limpiar caché env.registry.clear_cache() _logger.info("Caché limpiado") # 4. Verificar registros existentes template_fields = env['helpdesk.template.field'].search([]) _logger.info(f"Total de template fields encontrados: {len(template_fields)}") # Asegurar que todos los registros tengan el campo (aunque sea None) for tf in template_fields: if 'label_custom' not in tf._fields: _logger.warning(f"Template field {tf.id} no tiene campo label_custom en _fields") _logger.info("Fix completado exitosamente") return True except Exception as e: _logger.error(f"Error en fix_label_custom_field: {str(e)}", exc_info=True) return False # Si se ejecuta directamente desde shell if __name__ == '__main__': # Esto solo funciona si se ejecuta desde shell de Odoo # En shell: exec(open('src/user/helpdesk_extras/scripts/fix_label_custom.py').read()) # Luego: fix_label_custom_field(env) pass