-
-
Notifications
You must be signed in to change notification settings - Fork 828
[17.0][OU-ADD] mail: migration to 17.0 #4431
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,101 @@ | ||
| # 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 _fill_res_company_alias_domain_id(env): | ||
| icp = env["ir.config_parameter"] | ||
|
|
||
| domain = icp.get_param("mail.catchall.domain") | ||
| if domain: | ||
| alias_domain_id = 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; | ||
| """, | ||
| ) | ||
| 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): | ||
| # Because we fill same alias domain for every company so only need one here | ||
| company = env["res.company"].search([], limit=1) | ||
| if company.alias_domain_id: | ||
| openupgrade.logged_query( | ||
| env.cr, | ||
| f""" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why don't you just join with |
||
| UPDATE mail_alias | ||
| SET alias_domain_id = {company.alias_domain_id.id}, | ||
| alias_full_name = CASE | ||
| WHEN alias_name IS NOT NULL | ||
| THEN alias_name || '@' || '{company.alias_domain_id.name}' | ||
| ELSE NULL | ||
| END | ||
| """, | ||
| ) | ||
| else: | ||
| openupgrade.logged_query( | ||
| env.cr, | ||
| """ | ||
| UPDATE mail_alias | ||
| SET alias_full_name = CASE | ||
| WHEN alias_name IS NOT NULL THEN alias_name | ||
| ELSE NULL | ||
| END | ||
| """, | ||
| ) | ||
|
|
||
|
|
||
| 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, | ||
| ) | ||
| _fill_res_company_alias_domain_id(env) | ||
| _mail_alias_fill_alias_full_name(env) | ||
| _mail_template_convert_report_template_m2o_to_m2m(env) | ||
| 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"), | ||||||||||
| ] | ||||||||||
|
Comment on lines
+10
to
+14
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You should also rename mail_channel_res_groups_rel table to discuss_channel_res_groups_rel And column mail_channel_id to discuss_channel_id in that table. |
||||||||||
| _fields_renames = [ | ||||||||||
| ( | ||||||||||
| "discuss.channel", | ||||||||||
| "discuss_channel", | ||||||||||
|
Comment on lines
+17
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should be
Suggested change
|
||||||||||
| "field", | ||||||||||
| "field_id", | ||||||||||
| ), | ||||||||||
| ] | ||||||||||
|
|
||||||||||
|
|
||||||||||
| def _discuss_channel_fill_allow_public_upload(env): | ||||||||||
| openupgrade.logged_query( | ||||||||||
| env.cr, | ||||||||||
| """ | ||||||||||
| ALTER TABLE discuss_channel | ||||||||||
| ADD COLUMN IF NOT EXISTS allow_public_upload BOOLEAN; | ||||||||||
| """, | ||||||||||
| ) | ||||||||||
| openupgrade.logged_query( | ||||||||||
| env.cr, | ||||||||||
| """ | ||||||||||
| UPDATE discuss_channel | ||||||||||
| SET allow_public_upload = True | ||||||||||
| WHERE channel_type = 'livechat' | ||||||||||
| """, | ||||||||||
| ) | ||||||||||
|
|
||||||||||
|
|
||||||||||
| 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 | ||||||||||
| """, | ||||||||||
| ) | ||||||||||
| openupgrade.logged_query( | ||||||||||
| env.cr, | ||||||||||
| """ | ||||||||||
| UPDATE mail_alias | ||||||||||
| SET alias_status = 'not_tested' | ||||||||||
|
Comment on lines
+61
to
+68
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why not one query? Further, I think we should assume that we get a correctly configured database and we migrate correct configurations correctly, so the alias status should be |
||||||||||
| """, | ||||||||||
| ) | ||||||||||
|
|
||||||||||
|
|
||||||||||
| 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 _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) | ||||||||||
| _discuss_channel_fill_allow_public_upload(env) | ||||||||||
| _mail_alias_fill_multiple_values(env) | ||||||||||
| _mail_tracking_value_update_monetary_tracking_values(env) | ||||||||||
| _company_update_email_colors(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; | ||||||||||
| """, | ||||||||||
| ) | ||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is not how
logged_queryworks, as it returnscr.rowcount- though it will work accidentally here because the table is empty and we insert one record, so the created id is 1 and the count of inserted rows is 1 too.So please fetch the result anyways to be sure this won't blow up when the table is nonempty for whatever reason.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry my bad. but this pr is no longer my burden to bear , at least until next year. You can continue my work if you want. Thanks