post-migration.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. from odoo import api, SUPERUSER_ID
  2. def migrate(cr, version):
  3. env = api.Environment(cr, SUPERUSER_ID, {})
  4. # Load translations for affected modules
  5. modules_translations = {
  6. 'account': {'en_US': 'Invoicing', 'es_ES': 'Invoicing'},
  7. 'account_accountant': {'en_US': 'Invoicing', 'es_ES': 'Facturación / Contabilidad'},
  8. 'accountant': {'en_US': 'Accounting', 'es_ES': 'Accounting'},
  9. 'ai': {'en_US': 'AI', 'es_ES': 'AI'},
  10. 'ai_app': {'en_US': 'AI', 'es_ES': 'AI'},
  11. 'analytic': {'en_US': 'Analytic Accounting', 'es_ES': 'Contabilidad analítica'},
  12. 'analytic_enterprise': {'en_US': 'Analytic Accounting Enterprise', 'es_ES': 'Contabilidad analítica empresarial'},
  13. 'appointment': {'en_US': 'Appointments', 'es_ES': 'Citas'},
  14. 'approvals': {'en_US': 'Approvals', 'es_ES': 'Aprobaciones'},
  15. 'barcodes': {'en_US': 'Barcode', 'es_ES': 'Barcode'},
  16. 'base': {'en_US': 'Base', 'es_ES': 'Base'},
  17. 'board': {'en_US': 'Dashboards', 'es_ES': 'Tableros'},
  18. 'bus': {'en_US': 'IM Bus', 'es_ES': 'Bus IM'},
  19. 'calendar': {'en_US': 'Calendar', 'es_ES': 'Calendario'},
  20. 'certificate': {'en_US': 'Certificate', 'es_ES': 'Certificado'},
  21. 'cloud_storage': {'en_US': 'Cloud Storage', 'es_ES': 'Almacenamiento en la nube'},
  22. 'contacts': {'en_US': 'Contacts', 'es_ES': 'Contacts'},
  23. 'crm': {'en_US': 'CRM', 'es_ES': 'CRM'},
  24. 'databases': {'en_US': 'Databases', 'es_ES': 'Databases'},
  25. 'delivery': {'en_US': 'Delivery Costs', 'es_ES': 'Gastos de envío'},
  26. 'digest': {'en_US': 'KPI Digests', 'es_ES': 'Resúmenes de KPI'},
  27. 'documents': {'en_US': 'Documents', 'es_ES': 'Documentos'},
  28. 'equity': {'en_US': 'Equity', 'es_ES': 'Equity'},
  29. 'esg': {'en_US': 'ESG', 'es_ES': 'ESG'},
  30. 'event': {'en_US': 'Events Organization', 'es_ES': 'Organización de eventos'},
  31. 'fleet': {'en_US': 'Fleet', 'es_ES': 'Flota'},
  32. 'frontdesk': {'en_US': 'Frontdesk', 'es_ES': 'Recepción'},
  33. 'gamification': {'en_US': 'Gamification', 'es_ES': 'Ludificación'},
  34. 'helpdesk': {'en_US': 'Helpdesk', 'es_ES': 'Servicio de asistencia'},
  35. 'hr': {'en_US': 'Employees', 'es_ES': 'Employees'},
  36. 'hr_attendance': {'en_US': 'Attendances', 'es_ES': 'Asistencias'},
  37. 'hr_contract': {'en_US': 'Employee Contracts', 'es_ES': 'Contratos de los empleados'},
  38. 'hr_expense': {'en_US': 'Expenses', 'es_ES': 'Gastos'},
  39. 'hr_holidays': {'en_US': 'Time Off', 'es_ES': 'Ausencias'},
  40. 'hr_payroll': {'en_US': 'Payroll', 'es_ES': 'Nómina'},
  41. 'hr_recruitment': {'en_US': 'Recruitment', 'es_ES': 'Reclutamiento'},
  42. 'hr_timesheet': {'en_US': 'Task Logs', 'es_ES': 'Registros de tareas'},
  43. 'im_livechat': {'en_US': 'Live Chat', 'es_ES': 'Chat en directo'},
  44. 'industry_fsm': {'en_US': 'Field Service', 'es_ES': 'Servicio de campo'},
  45. 'iot': {'en_US': 'Internet of Things', 'es_ES': 'Internet de las cosas'},
  46. 'knowledge': {'en_US': 'Knowledge', 'es_ES': 'Información'},
  47. 'link_tracker': {'en_US': 'Link Tracker', 'es_ES': 'Link Tracker'},
  48. 'loyalty': {'en_US': 'Coupons & Loyalty', 'es_ES': 'Cupones y fidelidad'},
  49. 'lunch': {'en_US': 'Lunch', 'es_ES': 'Comida'},
  50. 'mail': {'en_US': 'Discuss', 'es_ES': 'Conversaciones'},
  51. 'maintenance': {'en_US': 'Maintenance', 'es_ES': 'Mantenimiento'},
  52. 'marketing_automation': {'en_US': 'Marketing Automation', 'es_ES': 'Automatización de marketing'},
  53. 'mass_mailing': {'en_US': 'Email Marketing', 'es_ES': 'Marketing por correo electrónico'},
  54. 'membership': {'en_US': 'Members', 'es_ES': 'Miembros'},
  55. 'mrp': {'en_US': 'Manufacturing', 'es_ES': 'Manufacturing'},
  56. 'onboarding': {'en_US': 'Onboarding Toolbox', 'es_ES': 'Caja de herramientas para la incorporación'},
  57. 'partnership': {'en_US': 'Partnership / Membership', 'es_ES': 'Partnership / Membership'},
  58. 'payment': {'en_US': 'Payment Engine', 'es_ES': 'Motor de pago'},
  59. 'phone_validation': {'en_US': 'Phone Numbers Validation', 'es_ES': 'Validación de números de teléfono'},
  60. 'planning': {'en_US': 'Planning', 'es_ES': 'Planificación'},
  61. 'point_of_sale': {'en_US': 'Point of Sale', 'es_ES': 'Punto de venta'},
  62. 'portal': {'en_US': 'Customer Portal', 'es_ES': 'Customer Portal'},
  63. 'preventa': {'en_US': 'Preventa', 'es_ES': 'Preventa'},
  64. 'privacy_lookup': {'en_US': 'Privacy', 'es_ES': 'Privacidad'},
  65. 'product': {'en_US': 'Products & Pricelists', 'es_ES': 'Productos y listas de precios'},
  66. 'project': {'en_US': 'Project', 'es_ES': 'Proyecto'},
  67. 'purchase': {'en_US': 'Purchase', 'es_ES': 'Purchase'},
  68. 'quality': {'en_US': 'Quality Base', 'es_ES': 'Base de calidad '},
  69. 'quality_control': {'en_US': 'Quality', 'es_ES': 'Calidad'},
  70. 'rating': {'en_US': 'Customer Rating', 'es_ES': 'Valoración del cliente'},
  71. 'repair': {'en_US': 'Repairs', 'es_ES': 'Reparaciones'},
  72. 'resource': {'en_US': 'Resource', 'es_ES': 'Recurso'},
  73. 'room': {'en_US': 'Meeting Rooms', 'es_ES': 'Sala de reuniones'},
  74. 'rpc': {'en_US': 'RPC endpoints', 'es_ES': 'RPC endpoints'},
  75. 'sale': {'en_US': 'Sales', 'es_ES': 'Sales'},
  76. 'sale_management': {'en_US': 'Sales', 'es_ES': 'Sales'},
  77. 'sales_team': {'en_US': 'Sales Teams', 'es_ES': 'Sales Teams'},
  78. 'sign': {'en_US': 'Sign', 'es_ES': 'Firma electrónica'},
  79. 'sms': {'en_US': 'SMS gateway', 'es_ES': 'Puerta de enlace SMS'},
  80. 'snailmail': {'en_US': 'Snail Mail', 'es_ES': 'Correo postal'},
  81. 'social': {'en_US': 'Social Marketing', 'es_ES': 'Marketing social'},
  82. 'spreadsheet': {'en_US': 'Spreadsheet', 'es_ES': 'Spreadsheet'},
  83. 'stock': {'en_US': 'Inventory', 'es_ES': 'Inventory'},
  84. 'stock_account': {'en_US': 'WMS Accounting', 'es_ES': 'Contabilidad del SGA'},
  85. 'survey': {'en_US': 'Surveys', 'es_ES': 'Surveys'},
  86. 'timer': {'en_US': 'Timer', 'es_ES': 'Temporizador'},
  87. 'timesheet_grid': {'en_US': 'Timesheets', 'es_ES': 'Partes de horas'},
  88. 'transifex': {'en_US': 'Transifex integration', 'es_ES': 'Integración en Transifex'},
  89. 'uom': {'en_US': 'Units of measure', 'es_ES': 'Unidades de medida'},
  90. 'utm': {'en_US': 'UTM Trackers', 'es_ES': 'Rastreadores UTM'},
  91. 'voip': {'en_US': 'VoIP', 'es_ES': 'VoIP'},
  92. 'web': {'en_US': 'Web', 'es_ES': 'Web'},
  93. 'web_cohort': {'en_US': 'Cohort View', 'es_ES': 'Vista de cohorte'},
  94. 'web_editor': {'en_US': 'Web Editor', 'es_ES': 'Editor web'},
  95. 'web_enterprise': {'en_US': 'Web Enterprise', 'es_ES': 'Web de Enterprise'},
  96. 'web_gantt': {'en_US': 'Web Gantt', 'es_ES': 'Diagrama Gantt web'},
  97. 'web_grid': {'en_US': 'Grid View', 'es_ES': 'Vista de cuadrícula'},
  98. 'web_hierarchy': {'en_US': 'Web Hierarchy', 'es_ES': 'Jerarquía web'},
  99. 'web_map': {'en_US': 'Map View', 'es_ES': 'Vista del mapa'},
  100. 'web_mobile': {'en_US': 'Mobile', 'es_ES': 'Mobile'},
  101. 'web_studio': {'en_US': 'Studio', 'es_ES': 'Studio'},
  102. 'web_tour': {'en_US': 'Tours', 'es_ES': 'Recorridos'},
  103. 'web_unsplash': {'en_US': 'Unsplash Image Library', 'es_ES': 'Biblioteca de imágenes de Unsplash'},
  104. 'website': {'en_US': 'Website', 'es_ES': 'Website'},
  105. 'whatsapp': {'en_US': 'WhatsApp Messaging', 'es_ES': 'Mensajes de WhatsApp'},
  106. 'worksheet': {'en_US': 'Worksheet', 'es_ES': 'Hoja de trabajo'},
  107. }
  108. # Ensure Spanish language is installed
  109. es_lang = env['res.lang'].search([('code', '=', 'es_ES')], limit=1)
  110. if not es_lang:
  111. env['res.lang']._activate_lang('es_ES')
  112. # Get all affected modules
  113. affected_modules = env['helpdesk.affected.module'].search([])
  114. for module in affected_modules:
  115. if module.code in modules_translations:
  116. translations = modules_translations[module.code]
  117. # Set English name first (base language) - this ensures en_US is set
  118. module.with_context(lang='en_US').write({'name': translations['en_US']})
  119. # Update Spanish translation using write with context
  120. if 'es_ES' in translations and translations['es_ES']:
  121. # Use write with context to set translation
  122. module.with_context(lang='es_ES').write({'name': translations['es_ES']})