| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- Script para verificar y arreglar vistas que referencian label_custom
- Ejecutar desde shell de Odoo:
- exec(open('src/user/helpdesk_extras/scripts/check_and_fix_views.py').read())
- check_and_fix_views(env)
- """
- import logging
- import re
- _logger = logging.getLogger(__name__)
- def check_and_fix_views(env):
- """Verifica y arregla vistas que referencian label_custom"""
- try:
- _logger.info("Buscando vistas que referencian label_custom...")
-
- # Buscar todas las vistas del modelo helpdesk.template.field
- views = env['ir.ui.view'].search([
- ('model', '=', 'helpdesk.template.field')
- ])
-
- _logger.info(f"Encontradas {len(views)} vistas para helpdesk.template.field")
-
- # Buscar vistas que contengan label_custom en el arch
- problematic_views = []
- for view in views:
- if 'label_custom' in view.arch:
- problematic_views.append(view)
- _logger.warning(f"Vista {view.id} ({view.name}) contiene 'label_custom'")
-
- # También buscar en vistas del modelo helpdesk.template que tengan field_ids
- template_views = env['ir.ui.view'].search([
- ('model', '=', 'helpdesk.template')
- ])
-
- for view in template_views:
- if 'label_custom' in view.arch:
- problematic_views.append(view)
- _logger.warning(f"Vista template {view.id} ({view.name}) contiene 'label_custom'")
-
- if problematic_views:
- _logger.info(f"Encontradas {len(problematic_views)} vistas problemáticas")
- _logger.info("Opciones:")
- _logger.info("1. Eliminar el campo de las vistas (recomendado)")
- _logger.info("2. Eliminar las vistas completamente")
-
- # Opción 1: Remover label_custom de las vistas
- for view in problematic_views:
- try:
- # Remover campo label_custom del arch
- new_arch = view.arch
- # Buscar y remover <field name="label_custom".../>
- pattern = r'<field[^>]*name=["\']label_custom["\'][^>]*/>'
- new_arch = re.sub(pattern, '', new_arch, flags=re.IGNORECASE)
- # Buscar y remover <field name="label_custom"...>...</field>
- pattern = r'<field[^>]*name=["\']label_custom["\'][^>]*>.*?</field>'
- new_arch = re.sub(pattern, '', new_arch, flags=re.IGNORECASE | re.DOTALL)
-
- if new_arch != view.arch:
- view.arch = new_arch
- _logger.info(f"Removido label_custom de vista {view.id}")
- except Exception as e:
- _logger.error(f"Error procesando vista {view.id}: {str(e)}")
-
- env.cr.commit()
- _logger.info("Vistas actualizadas")
- else:
- _logger.info("No se encontraron vistas problemáticas")
-
- # Verificar que el campo esté registrado
- model = env['ir.model'].search([('model', '=', 'helpdesk.template.field')], limit=1)
- if model:
- 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")
- else:
- _logger.info("Campo ya está registrado")
-
- # Limpiar caché
- env.registry.clear_cache()
- _logger.info("Caché limpiado")
-
- return True
-
- except Exception as e:
- _logger.error(f"Error en check_and_fix_views: {str(e)}", exc_info=True)
- return False
|