Skip to content

Commit

Permalink
[IMP] mail: Refine migration scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrobaeza committed Jun 6, 2021
1 parent 51ab4a3 commit 48b3f6b
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 34 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="base.partner_root" model="res.partner">
<!-- <record id="base.partner_root" model="res.partner">
<field name="email">[email protected]</field>
<field name="image_1920" type="base64" file="mail/static/src/img/odoobot.png"/>
<field name="name">OdooBot</field>
Expand All @@ -10,5 +10,5 @@
</record>
<record id="module_install_notification" model="mail.message">
<field name="channel_ids" eval="[(4, ref('mail.channel_all_employees'))]"/>
</record>
</record> -->
</odoo>
20 changes: 3 additions & 17 deletions openupgrade_scripts/scripts/mail/14.0.1.0/post-migration.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,13 @@
# Copyright 2021 ForgeFlow S.L. <https://www.forgeflow.com>
# 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,
[
Expand Down
36 changes: 30 additions & 6 deletions openupgrade_scripts/scripts/mail/14.0.1.0/pre-migration.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,42 @@
# Copyright 2021 ForgeFlow S.L. <https://www.forgeflow.com>
# 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)
Original file line number Diff line number Diff line change
@@ -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]
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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

0 comments on commit 48b3f6b

Please sign in to comment.