post-migration.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. import logging
  3. from odoo import api, SUPERUSER_ID
  4. _logger = logging.getLogger(__name__)
  5. def migrate(cr, version):
  6. """Cargar traducciones de selection fields en ir.model.fields.selection"""
  7. try:
  8. env = api.Environment(cr, SUPERUSER_ID, {})
  9. # Traducciones de business_impact
  10. translations = {
  11. 'business_impact': {
  12. '0': 'Crítico',
  13. '1': 'Alto',
  14. '2': 'Normal',
  15. }
  16. }
  17. # Traducciones de approval_status
  18. translations['approval_status'] = {
  19. 'draft': 'N/A',
  20. 'waiting': 'Esperando Aprobación',
  21. 'approved': 'Aprobado',
  22. 'rejected': 'Rechazado',
  23. }
  24. _logger.info("Cargando traducciones de selection fields...")
  25. for field_name, field_translations in translations.items():
  26. try:
  27. # Buscar el campo en ir.model.fields
  28. field_record = env['ir.model.fields'].search([
  29. ('model', '=', 'helpdesk.ticket'),
  30. ('name', '=', field_name)
  31. ], limit=1)
  32. if not field_record:
  33. _logger.warning(f"Campo {field_name} no encontrado en ir.model.fields")
  34. continue
  35. # Actualizar cada opción de selection
  36. updated_count = 0
  37. for sel in field_record.selection_ids:
  38. try:
  39. if sel.value in field_translations:
  40. translated_name = field_translations[sel.value]
  41. # Actualizar en español
  42. sel.with_context(lang='es_MX').write({'name': translated_name})
  43. updated_count += 1
  44. _logger.info(f" {field_name}.{sel.value}: '{sel.name}' → '{translated_name}'")
  45. except Exception as e:
  46. _logger.warning(f"Error al actualizar selection {sel.id} para {field_name}: {e}")
  47. continue
  48. _logger.info(f"✅ {updated_count} opciones actualizadas para {field_name}")
  49. except Exception as e:
  50. _logger.warning(f"Error al procesar campo {field_name}: {e}")
  51. continue
  52. cr.commit()
  53. _logger.info("✅ Traducciones de selection fields cargadas exitosamente")
  54. except Exception as e:
  55. _logger.error(f"Error en migración 18.0.1.0.10: {e}", exc_info=True)
  56. cr.rollback()
  57. # No lanzar la excepción para no bloquear la actualización del módulo