| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/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
|