From 48b3f6b341d092abdfc199a426e918451d105540 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Sun, 6 Jun 2021 13:39:26 +0200 Subject: [PATCH] [IMP] mail: Refine migration scripts --- .../mail/14.0.1.0/noupdate_changes.xml | 4 +-- .../scripts/mail/14.0.1.0/post-migration.py | 20 ++--------- .../scripts/mail/14.0.1.0/pre-migration.py | 36 +++++++++++++++---- .../mail/14.0.1.0/upgrade_analysis_work.txt | 18 +++++----- 4 files changed, 44 insertions(+), 34 deletions(-) diff --git a/openupgrade_scripts/scripts/mail/14.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/mail/14.0.1.0/noupdate_changes.xml index 58b29042eadd..3f0c7f0d2204 100644 --- a/openupgrade_scripts/scripts/mail/14.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/mail/14.0.1.0/noupdate_changes.xml @@ -1,6 +1,6 @@ - + diff --git a/openupgrade_scripts/scripts/mail/14.0.1.0/post-migration.py b/openupgrade_scripts/scripts/mail/14.0.1.0/post-migration.py index 3d4dae17d59f..0ab499b78637 100644 --- a/openupgrade_scripts/scripts/mail/14.0.1.0/post-migration.py +++ b/openupgrade_scripts/scripts/mail/14.0.1.0/post-migration.py @@ -1,27 +1,13 @@ # Copyright 2021 ForgeFlow S.L. +# Copyright 2021 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openupgradelib import openupgrade -def fill_mail_tracking_value_field(env): - openupgrade.logged_query( - env.cr, - """ - UPDATE mail_tracking_value mtv - SET field = imf.id - FROM ir_model_fields imf - JOIN mail_message mm ON imf.model = mm.model - WHERE imf.name = mtv.{} AND mtv.mail_message_id = mm.id - """.format( - openupgrade.get_legacy_name("field") - ), - ) - - @openupgrade.migrate() def migrate(env, version): - fill_mail_tracking_value_field(env) - openupgrade.load_data(env.cr, "mail", "14.0.1.0/noupdate_changes.xml") + # Current noupdate changes are better to not be applied for preserving continuity + # openupgrade.load_data(env.cr, "mail", "14.0.1.0/noupdate_changes.xml") openupgrade.delete_records_safely_by_xml_id( env, [ diff --git a/openupgrade_scripts/scripts/mail/14.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/mail/14.0.1.0/pre-migration.py index 5253702aaabf..409073e07681 100644 --- a/openupgrade_scripts/scripts/mail/14.0.1.0/pre-migration.py +++ b/openupgrade_scripts/scripts/mail/14.0.1.0/pre-migration.py @@ -1,18 +1,42 @@ # Copyright 2021 ForgeFlow S.L. +# Copyright 2021 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openupgradelib import openupgrade +def fill_mail_tracking_value_field(env): + """Now the field is a hard many2one reference, so we need to traverse the + ir.model.fields record and fill it. + + As the column is required, we do it on pre, and we need also to remove those + records whose field reference doesn't exist anymore. + """ + openupgrade.logged_query(env.cr, "ALTER TABLE mail_tracking_value ADD field int4") + openupgrade.logged_query( + env.cr, + """ + UPDATE mail_tracking_value mtv + SET field = imf.id + FROM ir_model_fields imf + JOIN mail_message mm ON imf.model = mm.model + WHERE imf.name = mtv.{} AND mtv.mail_message_id = mm.id + """.format( + openupgrade.get_legacy_name("field") + ), + ) + openupgrade.logged_query( + env.cr, "DELETE FROM mail_tracking_value WHERE field IS NULL" + ) + + @openupgrade.migrate() def migrate(env, version): openupgrade.rename_models( env.cr, [("email_template.preview", "mail.template.preview")] ) - openupgrade.set_xml_ids_noupdate_value(env, "mail", ["mail_channel_rule"], True) - openupgrade.update_module_moved_fields( - env.cr, "mail.mail", ["description"], "website_mail", "mail" - ) - openupgrade.update_module_moved_fields( - env.cr, "mail.message", ["description"], "website_mail", "mail" + openupgrade.rename_tables( + env.cr, [("email_template_preview", "mail_template_preview")] ) + openupgrade.set_xml_ids_noupdate_value(env, "mail", ["mail_channel_rule"], True) openupgrade.rename_columns(env.cr, {"mail_tracking_value": [("field", None)]}) + fill_mail_tracking_value_field(env) diff --git a/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis_work.txt index 6272f00b0fee..444157f84e53 100644 --- a/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/mail/14.0.1.0/upgrade_analysis_work.txt @@ -1,7 +1,7 @@ ---Models in module 'mail'--- obsolete model email_template.preview (renamed to mail.template.preview) [transient] new model mail.template.preview (renamed from email_template.preview) [transient] -# DONE: pre-migration: module renamed +# DONE: pre-migration: renamed model and table obsolete model mail.address.mixin [abstract] new model mail.render.mixin [abstract] @@ -13,20 +13,20 @@ mail / ir.ui.view / type (False) : select # NOTHING TO DO: Add new view type diagram mail / mail.activity / request_partner_id (many2one) : NEW relation: -# NOTHING TO DO: Filled automatically when creating the activity +# NOTHING TO DO: New feature only used for now by website_slides (or maybe enterprise) modules, for a kind of tier validation workflow mail / mail.alias / alias_bounced_content (html) : NEW -# NOTHING TO DO: New feature +# NOTHING TO DO: New feature for specifying the message to return when bouncing. Not required and if empty, fallback one is used. mail / mail.channel / active (boolean) : NEW hasdefault -# NOTHING TO DO: New feature that allows you to hide a channel without removing it. No need to precreate as the model doesn't usually has a lot of records +# NOTHING TO DO: New feature that allows you to hide a channel without removing it. Let Odoo to fill the default (True). mail / mail.mail / description (char) : previously in module website_mail mail / mail.message / description (char) : previously in module website_mail -# DONE: pre-migration: Updated module in fields +# NOTHING TO DO: Handled by regular Odoo update mechanism mail / mail.message / is_internal (boolean) : NEW -# NOTHING TO DO: New feature. You can hide messages from some users independently from subtype configuration +# NOTHING TO DO: New feature. You can hide messages from some users independently from subtype configuration. Default (False) is OK. mail / mail.template / copyvalue (char) : not stored anymore mail / mail.template / model_object_field (many2one) : not stored anymore @@ -41,7 +41,7 @@ mail / mail.template / user_signature (boolean) : DEL mail / mail.tracking.value / field (char) : relation is now 'ir.model.fields' ('False') [nothing to do] mail / mail.tracking.value / field (char) : type is now 'many2one' ('char') # DONE: pre-migration: rename field column -# DONE: post-migration: filled the column with the id of the fields form the original column +# DONE: pre-migration: pre-create the field and fill it with the id of the field from the original column, and remove records for obsolete fields mail / res.users / alias_id (many2one) : DEL relation: mail.alias mail / res.users / out_of_office_message (char) : DEL @@ -85,12 +85,12 @@ DEL ir.ui.view: mail.view_message_form # NOTHING TO DO: noupdate="0" records ir.rule: mail.mail_channel_rule (noupdate) (noupdate switched) -# DONE: pre-migration: noupdate changed to "1" +# DONE: pre-migration: noupdate changed to "1" with no changes from 13.0 NEW ir.rule: mail.ir_rule_mail_channel_partner_group_user (noupdate) NEW ir.rule: mail.mail_compose_message_rule (noupdate) NEW mail.channel.partner: mail.channel_partner_general_channel_for_admin (noupdate) -# NOTHING TO DO: noupdate="1" records +# NOTHING TO DO: New noupdate="1" records DEL ir.rule: mail.mail_followers_read_write_own (noupdate) # DONE: post-migration: try to delete \ No newline at end of file