Skip to content

Commit

Permalink
Merge pull request #4600 from hbrunn/17.0-mail
Browse files Browse the repository at this point in the history
[17.0][OU-ADD] mail: migration to 17.0
  • Loading branch information
pedrobaeza authored Oct 25, 2024
2 parents 877ae82 + d536986 commit ac08411
Show file tree
Hide file tree
Showing 5 changed files with 634 additions and 3 deletions.
2 changes: 1 addition & 1 deletion docsource/modules160-170.rst
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ Module coverage 16.0 -> 17.0
+---------------------------------------------------+----------------------+-------------------------------------------------+
| lunch | | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| mail | | |
| mail | Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| mail_bot | |No DB layout changes. |
+---------------------------------------------------+----------------------+-------------------------------------------------+
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<field name="domain_force">['|', ('create_uid', '=', user.id), ('user_id', '=', user.id)]</field>
<field name="name">Employees can only modify templates they have created or been assigned</field>
</record>
<record id="module_install_notification" model="mail.message">
<!-- <record id="module_install_notification" model="mail.message">
<field name="model">discuss.channel</field>
</record>
</record> -->
</odoo>
102 changes: 102 additions & 0 deletions openupgrade_scripts/scripts/mail/17.0.1.15/post-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openupgradelib import openupgrade

_deleted_xml_records = [
"mail.ir_rule_mail_channel_member_group_system",
"mail.ir_rule_mail_channel_member_group_user",
"mail.mail_channel_admin",
"mail.mail_channel_rule",
"mail.channel_all_employees",
"mail.channel_member_general_channel_for_admin",
]


def _discuss_channel_fill_allow_public_upload(env):
openupgrade.logged_query(
env.cr,
"""
UPDATE discuss_channel
SET allow_public_upload = True
WHERE channel_type = 'livechat'
""",
)


def _fill_res_company_alias_domain_id(env):
icp = env["ir.config_parameter"]

domain = icp.get_param("mail.catchall.domain")
if domain:
openupgrade.logged_query(
env.cr,
f"""
INSERT INTO mail_alias_domain (
name, bounce_alias, catchall_alias, default_from)
VALUES (
'{domain}',
'{icp.get_param("mail.bounce.alias") or "bounce"}',
'{icp.get_param("mail.catchall.alias") or "catchall"}',
'{icp.get_param("mail.default.from") or "notifications"}'
)
RETURNING id;
""",
)
(alias_domain_id,) = env.cr.fetchone()
openupgrade.logged_query(
env.cr,
f"""
UPDATE res_company
SET alias_domain_id = {alias_domain_id}
WHERE alias_domain_id IS NULL;
""",
)
openupgrade.logged_query(
env.cr,
f"""
UPDATE mail_alias
SET alias_domain_id = {alias_domain_id}
WHERE alias_domain_id IS NULL;
""",
)


def _mail_alias_fill_alias_full_name(env):
openupgrade.logged_query(
env.cr,
"""
UPDATE mail_alias
SET
alias_domain_id = mail_alias_domain.id,
alias_full_name = CASE
WHEN alias_name IS NOT NULL
THEN alias_name || '@' || mail_alias_domain.name
ELSE NULL
END
FROM mail_alias_domain
""",
)


def _mail_template_convert_report_template_m2o_to_m2m(env):
openupgrade.m2o_to_x2m(
env.cr,
env["mail.template"],
"mail_template",
"report_template_ids",
"report_template",
)


@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(env, "mail", "17.0.1.15/noupdate_changes.xml")
openupgrade.delete_records_safely_by_xml_id(
env,
_deleted_xml_records,
)
_discuss_channel_fill_allow_public_upload(env)
_fill_res_company_alias_domain_id(env)
_mail_alias_fill_alias_full_name(env)
_mail_template_convert_report_template_m2o_to_m2m(env)
127 changes: 127 additions & 0 deletions openupgrade_scripts/scripts/mail/17.0.1.15/pre-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from openupgradelib import openupgrade

_models_renames = [
("mail.channel", "discuss.channel"),
("mail.channel.member", "discuss.channel.member"),
("mail.channel.rtc.session", "discuss.channel.rtc.session"),
]
_tables_renames = [
("mail_channel", "discuss_channel"),
("mail_channel_member", "discuss_channel_member"),
("mail_channel_rtc_session", "discuss_channel_rtc_session"),
("mail_channel_res_groups_rel", "discuss_channel_res_groups_rel"),
]
_fields_renames = [
(
"mail.tracking.value",
"mail_tracking_value",
"field",
"field_id",
),
]
_columns_renames = {
"discuss_channel_res_groups_rel": [
("mail_channel_id", "discuss_channel_id"),
],
}
_columns_copies = {
"mail_template": [
("report_template", None, None),
],
}


def _mail_alias_fill_multiple_values(env):
"""
We will fill value for alias_full_name in post because alias_domain has not been
present yet
"""
openupgrade.logged_query(
env.cr,
"""
ALTER TABLE mail_alias
ADD COLUMN IF NOT EXISTS alias_full_name VARCHAR,
ADD COLUMN IF NOT EXISTS alias_incoming_local BOOLEAN,
ADD COLUMN IF NOT EXISTS alias_status VARCHAR;
""",
)
openupgrade.logged_query(
env.cr,
"""
UPDATE mail_alias
SET
alias_incoming_local = True,
alias_status = 'valid'
""",
)


def _mail_tracking_value_update_monetary_tracking_values(env):
openupgrade.logged_query(
env.cr,
"""
UPDATE mail_tracking_value
SET old_value_float = old_value_monetary,
new_value_float = new_value_monetary
WHERE old_value_monetary IS NOT NULL
OR new_value_monetary IS NOT NULL;
""",
)


def _mail_gateway_allowed(env):
"""Set some dummy value so that the not null constraint can be created"""
env.cr.execute(
"""
UPDATE mail_gateway_allowed SET email='[email protected]'
WHERE email IS NULL
"""
)


def _company_update_email_colors(env):
openupgrade.logged_query(
env.cr,
"""
ALTER TABLE res_company
ADD COLUMN IF NOT EXISTS email_primary_color VARCHAR,
ADD COLUMN IF NOT EXISTS email_secondary_color VARCHAR;
""",
)
openupgrade.logged_query(
env.cr,
"""
UPDATE res_company
SET email_primary_color = CASE
WHEN primary_color IS NOT NULL then primary_color
ELSE '#000000'
END,
email_secondary_color = CASE
WHEN secondary_color IS NOT NULL then secondary_color
ELSE '#875A7B'
END
""",
)


@openupgrade.migrate()
def migrate(env, version):
openupgrade.rename_models(env.cr, _models_renames)
openupgrade.rename_tables(env.cr, _tables_renames)
openupgrade.rename_fields(env, _fields_renames)
openupgrade.rename_columns(env.cr, _columns_renames)
openupgrade.copy_columns(env.cr, _columns_copies)
_mail_alias_fill_multiple_values(env)
_mail_tracking_value_update_monetary_tracking_values(env)
_company_update_email_colors(env)
_mail_gateway_allowed(env)
# create column to avoid model mail.alias is loaded before model res.company
openupgrade.logged_query(
env.cr,
"""
ALTER TABLE res_company
ADD COLUMN IF NOT EXISTS alias_domain_id INTEGER;
""",
)
Loading

0 comments on commit ac08411

Please sign in to comment.