You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.6 KiB

  1. # Copyright 2018 Eficent Business and IT Consulting Services S.L.
  2. # Copyright 2018 Tecnativa, S.L.
  3. # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
  4. from odoo import api, SUPERUSER_ID
  5. def convert_crm_activity_types(env):
  6. """Point default crm.activity.type records to their equivalents now in v11,
  7. and create the rest manually."""
  8. column_name = "crm_activity"
  9. table = 'mail_activity_type'
  10. column = 'crm_activity'
  11. env.cr.execute("""
  12. SELECT column_name
  13. FROM information_schema.columns
  14. WHERE table_name = %s AND column_name = %s""", (table, column))
  15. if not bool(env.cr.fetchall()):
  16. env.cr.execute(
  17. "ALTER TABLE mail_activity_type ADD COLUMN crm_activity INTEGER")
  18. type_mapping = {
  19. 'crm.crm_activity_data_email':
  20. 'mail_activity.mail_activity_data_email',
  21. 'crm.crm_activity_data_call':
  22. 'mail_activity.mail_activity_data_call',
  23. 'crm.crm_activity_data_meeting':
  24. 'mail_activity.mail_activity_data_todo',
  25. }
  26. migrated_ids = []
  27. for old_xml_id, new_xml_id in type_mapping.items():
  28. env.cr.execute(
  29. "SELECT res_id FROM ir_model_data "
  30. "WHERE module = %s and name = %s",
  31. (old_xml_id.split('.')[0], old_xml_id.split('.')[1]),
  32. )
  33. row = env.cr.fetchone()
  34. if row:
  35. old_id = row[0]
  36. migrated_ids.append(old_id)
  37. env.cr.execute(
  38. "UPDATE mail_activity_type "
  39. "SET %s = %s WHERE id = %s"
  40. % (column_name, old_id, env.ref(new_xml_id).id)
  41. )
  42. env.cr.execute("""
  43. INSERT INTO mail_activity_type
  44. (name, sequence, res_model_id, category, days,
  45. create_date, create_uid, write_uid, write_date, %s)
  46. SELECT
  47. mms.name, ca.sequence, im.id, 'default', ca.days,
  48. ca.create_date, ca.create_uid, ca.write_uid, ca.write_date, ca.id
  49. FROM
  50. crm_activity AS ca,
  51. mail_message_subtype AS mms,
  52. ir_model AS im
  53. WHERE
  54. mms.id = ca.subtype_id AND
  55. im.model = 'crm.lead' AND
  56. ca.id NOT IN %s
  57. """ % (column_name, tuple(migrated_ids), )
  58. )
  59. def convert_crm_lead_activities(env):
  60. """Create mail.activity records for the corresponding activities in v10."""
  61. column_name = 'crm_activity'
  62. env.cr.execute("""
  63. INSERT INTO mail_activity
  64. (res_id, res_model_id, res_model, res_name, summary,
  65. activity_type_id, date_deadline, create_uid, create_date,
  66. write_uid, write_date, user_id)
  67. SELECT
  68. cl.id, im.id, 'crm.lead', cl.name, cl.title_action,
  69. mat.id, cl.date_action, cl.create_uid, cl.create_date,
  70. cl.write_uid, cl.write_date, COALESCE(cl.user_id, cl.create_uid, 1)
  71. FROM
  72. crm_lead AS cl,
  73. mail_activity_type AS mat,
  74. ir_model AS im
  75. WHERE
  76. next_activity_id IS NOT NULL AND
  77. date_action IS NOT NULL AND
  78. im.model = 'crm.lead' AND
  79. mat.%s = cl.next_activity_id
  80. """ % (column_name, )
  81. )
  82. def delete_crm_activities(env):
  83. """Delete old activities in order to avoid duplicating them
  84. when we transition to v11."""
  85. env.cr.execute("""
  86. DELETE FROM crm_activity
  87. """)
  88. def post_init_hook(cr, registry):
  89. with api.Environment.manage():
  90. env = api.Environment(cr, SUPERUSER_ID, {})
  91. convert_crm_activity_types(env)
  92. convert_crm_lead_activities(env)
  93. delete_crm_activities(env)