fix_label_custom.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Script para arreglar el campo label_custom en helpdesk.template.field
  5. Ejecutar desde shell de Odoo:
  6. python src/user/helpdesk_extras/scripts/fix_label_custom.py
  7. O desde shell interactivo:
  8. exec(open('src/user/helpdesk_extras/scripts/fix_label_custom.py').read())
  9. """
  10. import logging
  11. _logger = logging.getLogger(__name__)
  12. def fix_label_custom_field(env):
  13. """Arregla el campo label_custom en la base de datos"""
  14. try:
  15. _logger.info("Iniciando fix de label_custom...")
  16. # 1. Verificar y agregar columna en base de datos si no existe
  17. env.cr.execute("""
  18. SELECT column_name
  19. FROM information_schema.columns
  20. WHERE table_name = 'helpdesk_template_field'
  21. AND column_name = 'label_custom'
  22. """)
  23. column_exists = env.cr.fetchone()
  24. if not column_exists:
  25. _logger.info("Agregando columna label_custom a helpdesk_template_field...")
  26. env.cr.execute("""
  27. ALTER TABLE helpdesk_template_field
  28. ADD COLUMN IF NOT EXISTS label_custom VARCHAR
  29. """)
  30. env.cr.commit()
  31. _logger.info("Columna agregada exitosamente")
  32. else:
  33. _logger.info("Columna label_custom ya existe")
  34. # 2. Verificar y registrar campo en ir.model.fields
  35. model = env['ir.model'].search([('model', '=', 'helpdesk.template.field')], limit=1)
  36. if not model:
  37. _logger.error("Modelo helpdesk.template.field no encontrado")
  38. return False
  39. field_model = env['ir.model.fields']
  40. existing_field = field_model.search([
  41. ('model_id', '=', model.id),
  42. ('name', '=', 'label_custom')
  43. ], limit=1)
  44. if not existing_field:
  45. _logger.info("Registrando campo label_custom en ir.model.fields...")
  46. field_model.create({
  47. 'model_id': model.id,
  48. 'name': 'label_custom',
  49. 'field_description': 'Custom Label',
  50. 'ttype': 'char',
  51. 'state': 'manual',
  52. 'required': False,
  53. 'readonly': False,
  54. 'store': True,
  55. })
  56. env.cr.commit()
  57. _logger.info("Campo registrado exitosamente")
  58. else:
  59. _logger.info("Campo label_custom ya está registrado en ir.model.fields")
  60. # 3. Limpiar caché
  61. env.registry.clear_cache()
  62. _logger.info("Caché limpiado")
  63. # 4. Verificar registros existentes
  64. template_fields = env['helpdesk.template.field'].search([])
  65. _logger.info(f"Total de template fields encontrados: {len(template_fields)}")
  66. # Asegurar que todos los registros tengan el campo (aunque sea None)
  67. for tf in template_fields:
  68. if 'label_custom' not in tf._fields:
  69. _logger.warning(f"Template field {tf.id} no tiene campo label_custom en _fields")
  70. _logger.info("Fix completado exitosamente")
  71. return True
  72. except Exception as e:
  73. _logger.error(f"Error en fix_label_custom_field: {str(e)}", exc_info=True)
  74. return False
  75. # Si se ejecuta directamente desde shell
  76. if __name__ == '__main__':
  77. # Esto solo funciona si se ejecuta desde shell de Odoo
  78. # En shell: exec(open('src/user/helpdesk_extras/scripts/fix_label_custom.py').read())
  79. # Luego: fix_label_custom_field(env)
  80. pass