From a6108a41d59127048154d887295d2f30e13da216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20=C4=90=E1=BA=A1i=20D=C6=B0=C6=A1ng?= Date: Wed, 22 May 2024 11:44:13 +0700 Subject: [PATCH 1/3] [OU-ADD] base: migration to 17.0 --- docsource/modules160-170.rst | 2 +- .../scripts/base/17.0.1.3/end-migration.py | 20 ++ .../scripts/base/17.0.1.3/post-migration.py | 25 ++ .../scripts/base/17.0.1.3/pre-migration.py | 151 ++++++++++ .../base/17.0.1.3/upgrade_analysis_work.txt | 279 ++++++++++++++++++ 5 files changed, 476 insertions(+), 1 deletion(-) create mode 100644 openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py create mode 100644 openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py create mode 100644 openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py create mode 100644 openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt diff --git a/docsource/modules160-170.rst b/docsource/modules160-170.rst index 0ae89b703492..0d66ae5d504b 100644 --- a/docsource/modules160-170.rst +++ b/docsource/modules160-170.rst @@ -70,7 +70,7 @@ Module coverage 16.0 -> 17.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | barcodes_gs1_nomenclature | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| base | | | +| base | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ | base_address_extended | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py b/openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py new file mode 100644 index 000000000000..90a00655babd --- /dev/null +++ b/openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py @@ -0,0 +1,20 @@ +# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo) +# Copyright 2022 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + +_deleted_xml_records = [ + "base.icp_mail_bounce_alias", + "base.icp_mail_catchall_alias", + "base.icp_mail_default_from", +] + + +@openupgrade.migrate() +def migrate(env, version): + """Call disable_invalid_filters in every edition of openupgrade""" + openupgrade.disable_invalid_filters(env) + openupgrade.delete_records_safely_by_xml_id( + env, + _deleted_xml_records, + ) diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py b/openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py new file mode 100644 index 000000000000..6ea8031f4d7d --- /dev/null +++ b/openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py @@ -0,0 +1,25 @@ +# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo) +# Copyright 2023 Hunki Enterprises BV (https://hunki-enterprises.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openupgradelib import openupgrade + +_deleted_xml_records = [ + "base.res_partner_rule_private_employee", + "base.res_partner_rule_private_group", +] + + +def _partner_update_complete_name(env): + partners = env["res.partner"].with_context(active_test=False).search([]) + partners._compute_complete_name() + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data(env, "base", "17.0.1.3/noupdate_changes.xml") + openupgrade.delete_records_safely_by_xml_id( + env, + _deleted_xml_records, + ) + _partner_update_complete_name(env) diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py b/openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py new file mode 100644 index 000000000000..d08f7f7aa676 --- /dev/null +++ b/openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py @@ -0,0 +1,151 @@ +# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo) +# Copyright 2020 Odoo Community Association (OCA) +# Copyright 2020 Opener B.V. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import logging + +from openupgradelib import openupgrade + +from odoo import tools + +from odoo.addons.openupgrade_scripts.apriori import merged_modules, renamed_modules + +_logger = logging.getLogger(__name__) + +_xmlids_renames = [ + ( + "mail.access_res_users_settings_all", + "base.access_res_users_settings_all", + ), + ( + "mail.access_res_users_settings_user", + "base.access_res_users_settings_user", + ), + ( + "mail.res_users_settings_rule_admin", + "base.res_users_settings_rule_admin", + ), + ( + "mail.res_users_settings_rule_user", + "base.res_users_settings_rule_user", + ), + ( + "mail.constraint_res_users_settings_unique_user_id", + "base.constraint_res_users_settings_unique_user_id", + ), +] + + +def _fill_ir_server_object_lines_into_action_server(cr): + openupgrade.logged_query( + cr, + """ + ALTER TABLE ir_act_server + ADD COLUMN IF NOT EXISTS evaluation_type VARCHAR, + ADD COLUMN IF NOT EXISTS resource_ref VARCHAR, + ADD COLUMN IF NOT EXISTS selection_value INTEGER, + ADD COLUMN IF NOT EXISTS update_boolean_value VARCHAR, + ADD COLUMN IF NOT EXISTS update_field_id INTEGER, + ADD COLUMN IF NOT EXISTS update_m2m_operation VARCHAR, + ADD COLUMN IF NOT EXISTS update_path VARCHAR, + ADD COLUMN IF NOT EXISTS update_related_model_id INTEGER, + ADD COLUMN IF NOT EXISTS value TEXT; + """, + ) + openupgrade.logged_query( + cr, + """ + WITH tmp AS ( + SELECT t1.id, t1.state, t2.col1, t2.value, t2.evaluation_type, + t3.name AS update_field_name, t3.ttype, + t3.relation, t4.id AS selection_field_id + FROM ir_act_server t1 + JOIN ir_server_object_lines t2 on t1.id = t2.server_id + JOIN ir_model_fields t3 on t2.col1 = t3.id + LEFT JOIN ir_model_fields_selection t4 on t3.id = t4.field_id + ) + UPDATE ir_act_server ias + SET + update_field_id = CASE + WHEN tmp.state = 'object_create' THEN NULL + WHEN tmp.state = 'object_write' THEN tmp.col1 + ELSE NULL + END, + update_path = CASE + WHEN tmp.state = 'object_create' THEN NULL + WHEN tmp.state = 'object_write' THEN tmp.update_field_name + ELSE NULL + END, + update_related_model_id = CASE + WHEN tmp.state = 'object_write' AND tmp.evaluation_type = 'value' + AND tmp.relation IS NOT NULL THEN + (SELECT id FROM ir_model WHERE model=tmp.relation LIMIT 1) + ELSE NULL + END, + update_m2m_operation = 'add', + evaluation_type = CASE + WHEN tmp.evaluation_type = 'value' then 'value' + WHEN tmp.evaluation_type = 'reference' then 'value' + WHEN tmp.evaluation_type = 'equation' then 'equation' + ELSE 'VALUE' + END, + value = tmp.value, + resource_ref = CASE + WHEN tmp.ttype in ('many2one', 'many2many') + THEN tmp.relation || ',' || tmp.value + ELSE NULL + END, + selection_value = CASE + WHEN tmp.ttype = 'selection' THEN tmp.selection_field_id + ELSE NULL + END, + update_boolean_value = CASE + WHEN tmp.ttype = 'boolean' then 'true' + ELSE NULL + END + FROM tmp + WHERE ias.id = tmp.id + """, + ) + + +def _partner_create_column_complete_name(cr): + openupgrade.logged_query( + cr, + """ + ALTER TABLE res_partner + ADD COLUMN IF NOT EXISTS complete_name VARCHAR; + """, + ) + + +def _update_partner_private_type(cr): + openupgrade.logged_query( + cr, + """ + UPDATE res_partner + SET type = 'contact' + WHERE type = 'private' + """, + ) + + +@openupgrade.migrate(use_env=False) +def migrate(cr, version): + """ + Don't request an env for the base pre-migration as flushing the env in + odoo/modules/registry.py will break on the 'base' module not yet having + been instantiated. + """ + if "openupgrade_framework" not in tools.config["server_wide_modules"]: + _logger.error( + "openupgrade_framework is not preloaded. You are highly " + "recommended to run the Odoo with --load=openupgrade_framework " + "when migrating your database." + ) + openupgrade.update_module_names(cr, renamed_modules.items()) + openupgrade.update_module_names(cr, merged_modules.items(), merge_modules=True) + openupgrade.rename_xmlids(cr, _xmlids_renames) + _fill_ir_server_object_lines_into_action_server(cr) + _update_partner_private_type(cr) + _partner_create_column_complete_name(cr) diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt new file mode 100644 index 000000000000..22577e76d946 --- /dev/null +++ b/openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt @@ -0,0 +1,279 @@ +---Models in module 'base'--- +obsolete model ir.server.object.lines +# Done pre-migration: fill value into ir.actions.server + +new model ir.model.inherit +# NOTHING TO DO: new feature to store model inheritance tree handle by Odoo registry itself + +model res.users.settings (moved from mail) +# Done pre-migration: rename xml + +---Fields in module 'base'--- +base / ir.actions.act_url / target (selection) : selection_keys is now '['download', 'new', 'self']' ('['new', 'self']') +base / ir.actions.act_window / mobile_view_mode (char) : NEW hasdefault: default +# NOTHING TO DO: new feature + +base / ir.actions.server / evaluation_type (selection) : NEW selection_keys: ['equation', 'value'], hasdefault: default +base / ir.actions.server / fields_lines (one2many) : DEL relation: ir.server.object.lines +base / ir.actions.server / resource_ref (reference) : NEW +base / ir.actions.server / selection_value (many2one) : NEW relation: ir.model.fields.selection +# Done pre-migration: fill value into ir.actions.server + +base / ir.actions.server / state (selection) : selection_keys is now '['code', 'multi', 'object_create', 'object_write', 'webhook']' ('['code', 'multi', 'object_create', 'object_write']') +# NOTHING TO DO: new feature + +base / ir.actions.server / update_boolean_value (selection): NEW selection_keys: ['false', 'true'], hasdefault: default +base / ir.actions.server / update_field_id (many2one) : NEW relation: ir.model.fields, hasdefault: compute +base / ir.actions.server / update_m2m_operation (selection): NEW selection_keys: ['add', 'clear', 'remove', 'set'], hasdefault: default +base / ir.actions.server / update_path (char) : NEW hasdefault: default +base / ir.actions.server / update_related_model_id (many2one): NEW relation: ir.model, isfunction: function, stored +base / ir.actions.server / value (text) : NEW +base / ir.actions.server / webhook_field_ids (many2many) : NEW relation: ir.model.fields +base / ir.actions.server / webhook_url (char) : NEW +# Done pre-migration: fill value into ir.actions.server + +base / ir.cron / cron_name (char) : not related anymore +base / ir.cron / cron_name (char) : now a function +base / ir.mail_server / _order : _order is now 'sequence, id' ('sequence') +base / ir.mail_server / smtp_authentication (selection): selection_keys is now '['certificate', 'cli', 'login']' ('['certificate', 'login']') +# NOTHING TO DO + +base / ir.model.fields / currency_field (char) : NEW +base / ir.model.fields / sanitize (boolean) : NEW hasdefault: default +base / ir.model.fields / sanitize_attributes (boolean) : NEW hasdefault: default +base / ir.model.fields / sanitize_form (boolean) : NEW hasdefault: default +base / ir.model.fields / sanitize_overridable (boolean): NEW hasdefault: default +base / ir.model.fields / sanitize_style (boolean) : NEW hasdefault: default +base / ir.model.fields / sanitize_tags (boolean) : NEW hasdefault: default +base / ir.model.fields / strip_classes (boolean) : NEW hasdefault: default +base / ir.model.fields / strip_style (boolean) : NEW hasdefault: default +# NOTHING TO DO: handle by odoo registry itself + +base / ir.model.inherit / model_id (many2one) : NEW relation: ir.model, required +base / ir.model.inherit / parent_field_id (many2one) : NEW relation: ir.model.fields +base / ir.model.inherit / parent_id (many2one) : NEW relation: ir.model, required +# NOTHING TO DO: new feature to store model inheritance tree handle by Odoo registry itself + +base / ir.property / type (selection) : selection_keys is now '['binary', 'boolean', 'char', 'date', 'datetime', 'float', 'html', 'integer', 'many2one', 'selection', 'text']' ('['binary', 'boolean', 'char', 'date', 'datetime', 'float', 'integer', 'many2one', 'selection', 'text']') +# NOTHING TO DO: new feature + +base / ir.server.object.lines / col1 (many2one) : DEL relation: ir.model.fields, required +base / ir.server.object.lines / evaluation_type (selection) : DEL required, selection_keys: ['equation', 'reference', 'value'] +base / ir.server.object.lines / server_id (many2one) : DEL relation: ir.actions.server +base / ir.server.object.lines / value (text) : DEL required +# Done pre-migration: fill value into ir.actions.server + +base / ir.ui.view / field_parent (char) : DEL +# NOTHING TO DO: deprecated from very longtime ago since https://github.com/odoo/odoo/commit/905e01921f3c3ef43ace6fc537d1d8c0d280002c 2017 + +base / res.company / all_child_ids (one2many) : NEW relation: res.company +base / res.company / parent_path (char) : NEW +# NOTHING TO DO: new branch feature + +base / res.company / base_onboarding_company_state (selection): DEL selection_keys: ['done', 'just_done', 'not_done'] +# NOTHING TO DO: but need to do in account module and some module that will use onboarding at post_install perhaps , use _search_or_create_progress method + +base / res.company / favicon (binary) : DEL attachment: True +# NOTHING TO DO: remove feature without replacement + +base / res.company / uses_default_logo (boolean) : NEW isfunction: function, stored +# NOTHING TO DO: computed by ORM + +base / res.country / code (char) : now required +# NOTHING TO DO: if it blank we will know where to fill in, normally it doesn't blank + +base / res.partner / _order : _order is now 'complete_name ASC, id DESC' ('display_name ASC, id DESC') +# NOTHING TO DO + +base / res.partner / complete_name (char) : NEW isfunction: function, stored +base / res.partner / display_name (char) : not stored anymore +# Done pre/post-migration: create column in pre and fill value in post + +base / res.partner / type (selection) : selection_keys is now '['contact', 'delivery', 'invoice', 'other']' ('['contact', 'delivery', 'invoice', 'other', 'private']') +# Done pre-migration: update 'private' type with 'contact' type + +base / res.users / res_users_settings_id (many2one): previously in module mail +base / res.users / res_users_settings_ids (one2many): previously in module mail +base / res.users.settings / _order : previously in module mail +base / res.users.settings / display_name (char) : previously in module mail +base / res.users.settings / user_id (many2one) : previously in module mail +# NOTHING TO DO + +---XML records in module 'base'--- +NEW ir.actions.act_window: base.ir_client_actions_report +DEL ir.actions.act_window: base.action_open_base_onboarding_company +DEL ir.actions.client: base.modules_act_cl +DEL ir.actions.client: base.modules_updates_act_cl +DEL ir.actions.server: base.action_server_module_immediate_install +# NOTHING TO DO: noupdate records + +DEL ir.config_parameter: base.icp_mail_bounce_alias (noupdate) +DEL ir.config_parameter: base.icp_mail_catchall_alias (noupdate) +DEL ir.config_parameter: base.icp_mail_default_from (noupdate) +# DONE: removed in end-migration, to create new alias domain record in mail module + +NEW ir.cron: base.ir_cron_res_users_deletion +NEW ir.model.access: base.access_ir_model_inherit +NEW ir.model.access: base.access_res_company_employee +NEW ir.model.access: base.access_res_company_portal +NEW ir.model.access: base.access_res_company_public +NEW ir.model.access: base.access_res_country_employee +NEW ir.model.access: base.access_res_country_group_employee +NEW ir.model.access: base.access_res_country_group_portal +NEW ir.model.access: base.access_res_country_group_public +NEW ir.model.access: base.access_res_country_portal +NEW ir.model.access: base.access_res_country_public +NEW ir.model.access: base.access_res_country_state_employee +NEW ir.model.access: base.access_res_country_state_portal +NEW ir.model.access: base.access_res_country_state_public +NEW ir.model.access: base.access_res_currency_employee +NEW ir.model.access: base.access_res_currency_portal +NEW ir.model.access: base.access_res_currency_public +NEW ir.model.access: base.access_res_currency_rate_employee +NEW ir.model.access: base.access_res_currency_rate_portal +NEW ir.model.access: base.access_res_currency_rate_public +NEW ir.model.access: base.access_res_lang_employee +NEW ir.model.access: base.access_res_lang_group_system +NEW ir.model.access: base.access_res_lang_portal +NEW ir.model.access: base.access_res_lang_public +NEW ir.model.access: base.access_res_users_employee +NEW ir.model.access: base.access_res_users_log_system +NEW ir.model.access: base.access_res_users_portal +NEW ir.model.access: base.access_res_users_public +# NOTHING TO DO: noupdate records + +NEW ir.model.access: base.access_res_users_settings_all [renamed from mail module] +NEW ir.model.access: base.access_res_users_settings_user [renamed from mail module] +# DONE: renamed in pre-migration + +DEL ir.model.access: base.access_ir_server_object_lines_group_system +DEL ir.model.access: base.access_res_company_group_user +DEL ir.model.access: base.access_res_country_group_all +DEL ir.model.access: base.access_res_country_group_group_all +DEL ir.model.access: base.access_res_country_state_group_all +DEL ir.model.access: base.access_res_currency_group_all +DEL ir.model.access: base.access_res_currency_rate_group_all +DEL ir.model.access: base.access_res_lang_group_all +DEL ir.model.access: base.access_res_lang_group_user +DEL ir.model.access: base.access_res_users_all +DEL ir.model.access: base.access_res_users_log_all +NEW ir.model.constraint: base.constraint_ir_model_fields_name_manual_field +NEW ir.model.constraint: base.constraint_ir_model_inherit_uniq +# NOTHING TO DO: noupdate records + +NEW ir.model.constraint: base.constraint_res_users_settings_unique_user_id [renamed from mail module] +# DONE: renamed in pre-migration + +NEW ir.module.category: base.module_category_services_appointment +NEW ir.module.module: base.module_sale_amazon (noupdate) +# NOTHING TO DO: new records + +NEW ir.rule: base.res_users_settings_rule_admin [renamed from mail module] (noupdate) +NEW ir.rule: base.res_users_settings_rule_user [renamed from mail module] (noupdate) +# DONE: renamed in pre-migration + +DEL ir.rule: base.res_partner_rule_private_employee (noupdate) +DEL ir.rule: base.res_partner_rule_private_group (noupdate) +# DONE: removed in post-migration + +NEW ir.ui.menu: base.menu_ir_client_actions_report +DEL ir.ui.menu: base.menu_board_root +DEL ir.ui.menu: base.menu_module_updates +DEL ir.ui.menu: base.menu_reporting_config +DEL ir.ui.menu: base.menu_reporting_dashboard +DEL ir.ui.menu: base.module_mi +NEW ir.ui.view: base.no_contact +NEW ir.ui.view: base.res_users_identitycheck_view_form +NEW ir.ui.view: base.res_users_identitycheck_view_form_revokedevices +NEW ir.ui.view: base.view_client_action_form +NEW ir.ui.view: base.view_client_action_tree +NEW ir.ui.view: base.view_country_search +DEL ir.ui.view: base.base_onboarding_company_form +DEL ir.ui.view: base.identity_check_wizard +DEL ir.ui.view: base.onboarding_company_step +DEL ir.ui.view: base.onboarding_container +DEL ir.ui.view: base.onboarding_step +DEL ir.ui.view: base.view_module_category_tree +# NOTHING TO DO: noupdate records + +NEW res.country.group: base.eurasian_economic_union (noupdate) +# NOTHING TO DO: new record + +NEW res.country.state: base.state_hk_hk +NEW res.country.state: base.state_hk_kln +NEW res.country.state: base.state_hk_nt +NEW res.country.state: base.state_ke_01 +NEW res.country.state: base.state_ke_02 +NEW res.country.state: base.state_ke_03 +NEW res.country.state: base.state_ke_04 +NEW res.country.state: base.state_ke_05 +NEW res.country.state: base.state_ke_06 +NEW res.country.state: base.state_ke_07 +NEW res.country.state: base.state_ke_08 +NEW res.country.state: base.state_ke_09 +NEW res.country.state: base.state_ke_10 +NEW res.country.state: base.state_ke_11 +NEW res.country.state: base.state_ke_12 +NEW res.country.state: base.state_ke_13 +NEW res.country.state: base.state_ke_14 +NEW res.country.state: base.state_ke_15 +NEW res.country.state: base.state_ke_16 +NEW res.country.state: base.state_ke_17 +NEW res.country.state: base.state_ke_18 +NEW res.country.state: base.state_ke_19 +NEW res.country.state: base.state_ke_20 +NEW res.country.state: base.state_ke_21 +NEW res.country.state: base.state_ke_22 +NEW res.country.state: base.state_ke_23 +NEW res.country.state: base.state_ke_24 +NEW res.country.state: base.state_ke_25 +NEW res.country.state: base.state_ke_26 +NEW res.country.state: base.state_ke_27 +NEW res.country.state: base.state_ke_28 +NEW res.country.state: base.state_ke_29 +NEW res.country.state: base.state_ke_30 +NEW res.country.state: base.state_ke_31 +NEW res.country.state: base.state_ke_32 +NEW res.country.state: base.state_ke_33 +NEW res.country.state: base.state_ke_34 +NEW res.country.state: base.state_ke_35 +NEW res.country.state: base.state_ke_36 +NEW res.country.state: base.state_ke_37 +NEW res.country.state: base.state_ke_38 +NEW res.country.state: base.state_ke_39 +NEW res.country.state: base.state_ke_40 +NEW res.country.state: base.state_ke_41 +NEW res.country.state: base.state_ke_42 +NEW res.country.state: base.state_ke_43 +NEW res.country.state: base.state_ke_44 +NEW res.country.state: base.state_ke_45 +NEW res.country.state: base.state_ke_46 +NEW res.country.state: base.state_ke_47 +NEW res.country.state: base.state_uy_01 +NEW res.country.state: base.state_uy_02 +NEW res.country.state: base.state_uy_03 +NEW res.country.state: base.state_uy_04 +NEW res.country.state: base.state_uy_05 +NEW res.country.state: base.state_uy_06 +NEW res.country.state: base.state_uy_07 +NEW res.country.state: base.state_uy_08 +NEW res.country.state: base.state_uy_09 +NEW res.country.state: base.state_uy_10 +NEW res.country.state: base.state_uy_11 +NEW res.country.state: base.state_uy_12 +NEW res.country.state: base.state_uy_13 +NEW res.country.state: base.state_uy_14 +NEW res.country.state: base.state_uy_15 +NEW res.country.state: base.state_uy_16 +NEW res.country.state: base.state_uy_17 +NEW res.country.state: base.state_uy_18 +NEW res.country.state: base.state_uy_19 +# NOTHING TO DO: noupdate records + +NEW res.currency: base.SLE (noupdate) +# NOTHING TO DO: new record + +DEL res.groups: base.group_private_addresses +NEW res.lang: base.lang_en_NZ +NEW res.lang: base.lang_es_419 +# NOTHING TO DO: noupdate records From ea7bcc98db99fb65f7111b6da276fbe0797a1b55 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 10 Oct 2024 21:55:19 +0200 Subject: [PATCH 2/3] [OU-ADD] base: Continue migration scripts - Comment some non desirable noupdate=1 changes - Handle properly ir.actions.server update conversion - Handle properly the private type removal - Reformat analysis work file - Other minor adjustments --- .../scripts/base/17.0.1.3/end-migration.py | 1 - .../base/17.0.1.3/noupdate_changes.xml | 11 +- .../scripts/base/17.0.1.3/post-migration.py | 8 +- .../scripts/base/17.0.1.3/pre-migration.py | 181 ++++++++++++------ .../base/17.0.1.3/upgrade_analysis_work.txt | 151 +++++++-------- 5 files changed, 198 insertions(+), 154 deletions(-) diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py b/openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py index 90a00655babd..a3ceaf410dae 100644 --- a/openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py +++ b/openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py @@ -1,5 +1,4 @@ # Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo) -# Copyright 2022 ForgeFlow S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openupgradelib import openupgrade diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/noupdate_changes.xml b/openupgrade_scripts/scripts/base/17.0.1.3/noupdate_changes.xml index 73076df5c162..b12627c4f524 100644 --- a/openupgrade_scripts/scripts/base/17.0.1.3/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/base/17.0.1.3/noupdate_changes.xml @@ -15,18 +15,21 @@ 0 - + European Union - + GST + + ['|', '|', ('partner_share', '=', False), ('company_id', 'parent_of', company_ids), ('company_id', '=', False)] + diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py b/openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py index 6ea8031f4d7d..f567e2046b2d 100644 --- a/openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py +++ b/openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py @@ -1,5 +1,5 @@ # Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo) -# Copyright 2023 Hunki Enterprises BV (https://hunki-enterprises.com) +# Copyright 2024 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openupgradelib import openupgrade @@ -10,11 +10,6 @@ ] -def _partner_update_complete_name(env): - partners = env["res.partner"].with_context(active_test=False).search([]) - partners._compute_complete_name() - - @openupgrade.migrate() def migrate(env, version): openupgrade.load_data(env, "base", "17.0.1.3/noupdate_changes.xml") @@ -22,4 +17,3 @@ def migrate(env, version): env, _deleted_xml_records, ) - _partner_update_complete_name(env) diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py b/openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py index d08f7f7aa676..5adebe3fcaa7 100644 --- a/openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py +++ b/openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py @@ -1,6 +1,5 @@ # Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo) -# Copyright 2020 Odoo Community Association (OCA) -# Copyright 2020 Opener B.V. +# Copyright 2024 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). import logging @@ -13,6 +12,10 @@ _logger = logging.getLogger(__name__) _xmlids_renames = [ + ( + "mail.model_res_users_settings", + "base.model_res_users_settings", + ), ( "mail.access_res_users_settings_all", "base.access_res_users_settings_all", @@ -34,6 +37,9 @@ "base.constraint_res_users_settings_unique_user_id", ), ] +_column_renames = { + "res_partner": [("display_name", "complete_name")], +} def _fill_ir_server_object_lines_into_action_server(cr): @@ -41,6 +47,7 @@ def _fill_ir_server_object_lines_into_action_server(cr): cr, """ ALTER TABLE ir_act_server + ADD COLUMN IF NOT EXISTS old_ias_id VARCHAR, ADD COLUMN IF NOT EXISTS evaluation_type VARCHAR, ADD COLUMN IF NOT EXISTS resource_ref VARCHAR, ADD COLUMN IF NOT EXISTS selection_value INTEGER, @@ -52,79 +59,136 @@ def _fill_ir_server_object_lines_into_action_server(cr): ADD COLUMN IF NOT EXISTS value TEXT; """, ) + # Update operations openupgrade.logged_query( cr, """ - WITH tmp AS ( - SELECT t1.id, t1.state, t2.col1, t2.value, t2.evaluation_type, - t3.name AS update_field_name, t3.ttype, - t3.relation, t4.id AS selection_field_id - FROM ir_act_server t1 - JOIN ir_server_object_lines t2 on t1.id = t2.server_id - JOIN ir_model_fields t3 on t2.col1 = t3.id - LEFT JOIN ir_model_fields_selection t4 on t3.id = t4.field_id + INSERT INTO ir_act_server + ( + old_ias_id, + evaluation_type, + update_field_id, + update_path, + update_related_model_id, + value, + resource_ref, + selection_value, + update_boolean_value, + update_m2m_operation + ) + SELECT + ias.id, + CASE + WHEN isol.evaluation_type = 'equation' then 'equation' + ELSE 'value' + END, + imf.id, + imf.name, + im.id, + CASE WHEN isol.evaluation_type = 'equation' + THEN isol.value + ELSE NULL + END, + CASE WHEN imf.ttype in ('many2one', 'many2many') + THEN imf.relation || ',' || isol.value + ELSE NULL + END, + imfs.id, + CASE WHEN imf.ttype = 'boolean' + THEN isol.value::bool + ELSE NULL + END, + 'add' + FROM ir_act_server ias + JOIN ir_server_object_lines isol ON isol.server_id = ias.id + JOIN ir_model_fields imf ON imf.id = isol.col1 + LEFT JOIN ir_model im ON im.model = imf.relation + LEFT JOIN ir_model_fields_selection imfs + ON imf.id = imfs.field_id AND imfs.value = isol.value + WHERE ias.state = 'object_write' + RETURNING id, old_ias_id + """, + ) + for row in cr.fetchall(): + cr.execute( + """ + INSERT INTO rel_server_actions + (action_id, server_id) + VALUES (%s, %s) + """, + (row[0], row[1]), ) - UPDATE ir_act_server ias - SET - update_field_id = CASE - WHEN tmp.state = 'object_create' THEN NULL - WHEN tmp.state = 'object_write' THEN tmp.col1 - ELSE NULL - END, - update_path = CASE - WHEN tmp.state = 'object_create' THEN NULL - WHEN tmp.state = 'object_write' THEN tmp.update_field_name - ELSE NULL - END, - update_related_model_id = CASE - WHEN tmp.state = 'object_write' AND tmp.evaluation_type = 'value' - AND tmp.relation IS NOT NULL THEN - (SELECT id FROM ir_model WHERE model=tmp.relation LIMIT 1) - ELSE NULL - END, - update_m2m_operation = 'add', - evaluation_type = CASE - WHEN tmp.evaluation_type = 'value' then 'value' - WHEN tmp.evaluation_type = 'reference' then 'value' - WHEN tmp.evaluation_type = 'equation' then 'equation' - ELSE 'VALUE' - END, - value = tmp.value, - resource_ref = CASE - WHEN tmp.ttype in ('many2one', 'many2many') - THEN tmp.relation || ',' || tmp.value - ELSE NULL - END, - selection_value = CASE - WHEN tmp.ttype = 'selection' THEN tmp.selection_field_id - ELSE NULL - END, - update_boolean_value = CASE - WHEN tmp.ttype = 'boolean' then 'true' - ELSE NULL - END - FROM tmp - WHERE ias.id = tmp.id + openupgrade.logged_query( + cr, + """UPDATE ir_act_server ias + SET state = 'multi' + FROM ir_server_object_lines isol + WHERE ias.state = 'object_write' + AND isol.server_id = ias.id + """, + ) + # Create operations + openupgrade.logged_query( + cr, + """UPDATE ir_act_server ias + SET value = isol.value + FROM ir_server_object_lines isol + JOIN ir_model_fields imf ON imf.id = isol.col1 + WHERE ias.state = 'object_create' + AND isol.server_id = ias.id + AND isol.evaluation_type = 'value' + AND imf.name = 'name' """, ) -def _partner_create_column_complete_name(cr): +def _fill_empty_country_codes(cr): openupgrade.logged_query( cr, """ - ALTER TABLE res_partner - ADD COLUMN IF NOT EXISTS complete_name VARCHAR; + UPDATE res_country + SET code = 'OU' || id::VARCHAR + WHERE code IS NULL """, ) -def _update_partner_private_type(cr): +def _handle_partner_private_type(cr): + # Copy private records into a new table openupgrade.logged_query( cr, """ + CREATE TABLE ou_res_partner_private AS + SELECT * FROM res_partner + WHERE type = 'private' + """, + ) + # Copy column for preserving the old type values + _column_copies = {"res_partner": [("type", None, None)]} + openupgrade.copy_columns(cr, _column_copies) + # Change contact type and erase sensitive information + query = "type = 'contact'" + for field in [ + "street", + "street2", + "city", + "zip", + "vat", + "function", + "phone", + "mobile", + "email", + "website", + "comment", + ]: + query += f", {field} = CASE WHEN {field} IS NULL THEN NULL ELSE '*****' END" + openupgrade.logged_query( + cr, + f""" UPDATE res_partner - SET type = 'contact' + SET {query}, + country_id = NULL, + state_id = NULL WHERE type = 'private' """, ) @@ -146,6 +210,7 @@ def migrate(cr, version): openupgrade.update_module_names(cr, renamed_modules.items()) openupgrade.update_module_names(cr, merged_modules.items(), merge_modules=True) openupgrade.rename_xmlids(cr, _xmlids_renames) + openupgrade.rename_columns(cr, _column_renames) _fill_ir_server_object_lines_into_action_server(cr) - _update_partner_private_type(cr) - _partner_create_column_complete_name(cr) + _fill_empty_country_codes(cr) + _handle_partner_private_type(cr) diff --git a/openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt index 22577e76d946..e1cd50c22772 100644 --- a/openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt @@ -1,42 +1,52 @@ ---Models in module 'base'--- obsolete model ir.server.object.lines -# Done pre-migration: fill value into ir.actions.server +base / ir.actions.server / fields_lines (one2many) : DEL relation: ir.server.object.lines +base / ir.server.object.lines / col1 (many2one) : DEL relation: ir.model.fields, required +base / ir.server.object.lines / evaluation_type (selection) : DEL required, selection_keys: ['equation', 'reference', 'value'] +base / ir.server.object.lines / server_id (many2one) : DEL relation: ir.actions.server +base / ir.server.object.lines / value (text) : DEL required +base / ir.actions.server / evaluation_type (selection) : NEW selection_keys: ['equation', 'value'], hasdefault: default +base / ir.actions.server / value (text) : NEW +base / ir.actions.server / resource_ref (reference) : NEW +base / ir.actions.server / selection_value (many2one) : NEW relation: ir.model.fields.selection +base / ir.actions.server / update_boolean_value (selection): NEW selection_keys: ['false', 'true'], hasdefault: default +base / ir.actions.server / update_field_id (many2one) : NEW relation: ir.model.fields, hasdefault: compute +base / ir.actions.server / update_m2m_operation (selection): NEW selection_keys: ['add', 'clear', 'remove', 'set'], hasdefault: default +base / ir.actions.server / update_path (char) : NEW hasdefault: default +base / ir.actions.server / update_related_model_id (many2one): NEW relation: ir.model, isfunction: function, stored +# DONE: pre-migration: Create extra ir.actions.server records as childs of the original ias record when the operation is to update records and there are lines +# DONE: pre-migration: Bring name to ir.actions.server records from the line indicating when the operation is to create record. For the rest of the cases, there isn't now equivalent new model ir.model.inherit -# NOTHING TO DO: new feature to store model inheritance tree handle by Odoo registry itself +base / ir.model.inherit / model_id (many2one) : NEW relation: ir.model, required +base / ir.model.inherit / parent_field_id (many2one) : NEW relation: ir.model.fields +base / ir.model.inherit / parent_id (many2one) : NEW relation: ir.model, required +# NOTHING TO DO: Populated automatically by Odoo registry through `_reflect_inherits` method model res.users.settings (moved from mail) -# Done pre-migration: rename xml +# DONE: pre-migration: Rename xml-id ---Fields in module 'base'--- base / ir.actions.act_url / target (selection) : selection_keys is now '['download', 'new', 'self']' ('['new', 'self']') -base / ir.actions.act_window / mobile_view_mode (char) : NEW hasdefault: default -# NOTHING TO DO: new feature +# NOTHING TO DO: new URL target feature, so no conversion needed for existing ones -base / ir.actions.server / evaluation_type (selection) : NEW selection_keys: ['equation', 'value'], hasdefault: default -base / ir.actions.server / fields_lines (one2many) : DEL relation: ir.server.object.lines -base / ir.actions.server / resource_ref (reference) : NEW -base / ir.actions.server / selection_value (many2one) : NEW relation: ir.model.fields.selection -# Done pre-migration: fill value into ir.actions.server +base / ir.actions.act_window / mobile_view_mode (char) : NEW hasdefault: default +# NOTHING TO DO: new feature for setting the first view mode in mobile and small screen environments. The default "kanban" value was the old behavior. base / ir.actions.server / state (selection) : selection_keys is now '['code', 'multi', 'object_create', 'object_write', 'webhook']' ('['code', 'multi', 'object_create', 'object_write']') -# NOTHING TO DO: new feature - -base / ir.actions.server / update_boolean_value (selection): NEW selection_keys: ['false', 'true'], hasdefault: default -base / ir.actions.server / update_field_id (many2one) : NEW relation: ir.model.fields, hasdefault: compute -base / ir.actions.server / update_m2m_operation (selection): NEW selection_keys: ['add', 'clear', 'remove', 'set'], hasdefault: default -base / ir.actions.server / update_path (char) : NEW hasdefault: default -base / ir.actions.server / update_related_model_id (many2one): NEW relation: ir.model, isfunction: function, stored -base / ir.actions.server / value (text) : NEW base / ir.actions.server / webhook_field_ids (many2many) : NEW relation: ir.model.fields base / ir.actions.server / webhook_url (char) : NEW -# Done pre-migration: fill value into ir.actions.server +# NOTHING TO DO: new feature base / ir.cron / cron_name (char) : not related anymore base / ir.cron / cron_name (char) : now a function +# NOTHING TO DO: The stored values don't change + base / ir.mail_server / _order : _order is now 'sequence, id' ('sequence') +# NOTHING TO DO: Needed refinement, but on real cases, sequences are already different + base / ir.mail_server / smtp_authentication (selection): selection_keys is now '['certificate', 'cli', 'login']' ('['certificate', 'login']') -# NOTHING TO DO +# NOTHING TO DO: New selection option base / ir.model.fields / currency_field (char) : NEW base / ir.model.fields / sanitize (boolean) : NEW hasdefault: default @@ -47,21 +57,10 @@ base / ir.model.fields / sanitize_style (boolean) : NEW ha base / ir.model.fields / sanitize_tags (boolean) : NEW hasdefault: default base / ir.model.fields / strip_classes (boolean) : NEW hasdefault: default base / ir.model.fields / strip_style (boolean) : NEW hasdefault: default -# NOTHING TO DO: handle by odoo registry itself - -base / ir.model.inherit / model_id (many2one) : NEW relation: ir.model, required -base / ir.model.inherit / parent_field_id (many2one) : NEW relation: ir.model.fields -base / ir.model.inherit / parent_id (many2one) : NEW relation: ir.model, required -# NOTHING TO DO: new feature to store model inheritance tree handle by Odoo registry itself +# NOTHING TO DO: Populated by Odoo registry itself base / ir.property / type (selection) : selection_keys is now '['binary', 'boolean', 'char', 'date', 'datetime', 'float', 'html', 'integer', 'many2one', 'selection', 'text']' ('['binary', 'boolean', 'char', 'date', 'datetime', 'float', 'integer', 'many2one', 'selection', 'text']') -# NOTHING TO DO: new feature - -base / ir.server.object.lines / col1 (many2one) : DEL relation: ir.model.fields, required -base / ir.server.object.lines / evaluation_type (selection) : DEL required, selection_keys: ['equation', 'reference', 'value'] -base / ir.server.object.lines / server_id (many2one) : DEL relation: ir.actions.server -base / ir.server.object.lines / value (text) : DEL required -# Done pre-migration: fill value into ir.actions.server +# NOTHING TO DO: New feature for having HTML fields as company_dependent base / ir.ui.view / field_parent (char) : DEL # NOTHING TO DO: deprecated from very longtime ago since https://github.com/odoo/odoo/commit/905e01921f3c3ef43ace6fc537d1d8c0d280002c 2017 @@ -74,44 +73,44 @@ base / res.company / base_onboarding_company_state (selecti # NOTHING TO DO: but need to do in account module and some module that will use onboarding at post_install perhaps , use _search_or_create_progress method base / res.company / favicon (binary) : DEL attachment: True -# NOTHING TO DO: remove feature without replacement +# NOTHING TO DO: remove feature without replacement in core. Use web_favicon OCA module for restoring the feature base / res.company / uses_default_logo (boolean) : NEW isfunction: function, stored # NOTHING TO DO: computed by ORM base / res.country / code (char) : now required -# NOTHING TO DO: if it blank we will know where to fill in, normally it doesn't blank - -base / res.partner / _order : _order is now 'complete_name ASC, id DESC' ('display_name ASC, id DESC') -# NOTHING TO DO +# DONE: pre-migration: Put as code 'OU' + the ID for empty ones base / res.partner / complete_name (char) : NEW isfunction: function, stored base / res.partner / display_name (char) : not stored anymore -# Done pre/post-migration: create column in pre and fill value in post +base / res.partner / _order : _order is now 'complete_name ASC, id DESC' ('display_name ASC, id DESC') +# DONE: pre-migration: Rename column display_name to complete_name, as the value is equivalent base / res.partner / type (selection) : selection_keys is now '['contact', 'delivery', 'invoice', 'other']' ('['contact', 'delivery', 'invoice', 'other', 'private']') -# Done pre-migration: update 'private' type with 'contact' type +# DONE: pre-migration: Perform a full copy on a new table of the private records +# DONE: pre-migration: Copy the column for preserving the old values in case any extra module needs it +# DONE: pre-migration: Update 'private' type with 'contact' type, and erase sensitive information base / res.users / res_users_settings_id (many2one): previously in module mail base / res.users / res_users_settings_ids (one2many): previously in module mail base / res.users.settings / _order : previously in module mail base / res.users.settings / display_name (char) : previously in module mail base / res.users.settings / user_id (many2one) : previously in module mail -# NOTHING TO DO +# NOTHING TO DO: Handled by Odoo registry ---XML records in module 'base'--- -NEW ir.actions.act_window: base.ir_client_actions_report DEL ir.actions.act_window: base.action_open_base_onboarding_company DEL ir.actions.client: base.modules_act_cl DEL ir.actions.client: base.modules_updates_act_cl DEL ir.actions.server: base.action_server_module_immediate_install -# NOTHING TO DO: noupdate records +# NOTHING TO DO: noupdate=0 records DEL ir.config_parameter: base.icp_mail_bounce_alias (noupdate) DEL ir.config_parameter: base.icp_mail_catchall_alias (noupdate) DEL ir.config_parameter: base.icp_mail_default_from (noupdate) # DONE: removed in end-migration, to create new alias domain record in mail module +NEW ir.actions.act_window: base.ir_client_actions_report NEW ir.cron: base.ir_cron_res_users_deletion NEW ir.model.access: base.access_ir_model_inherit NEW ir.model.access: base.access_res_company_employee @@ -140,42 +139,10 @@ NEW ir.model.access: base.access_res_users_employee NEW ir.model.access: base.access_res_users_log_system NEW ir.model.access: base.access_res_users_portal NEW ir.model.access: base.access_res_users_public -# NOTHING TO DO: noupdate records - -NEW ir.model.access: base.access_res_users_settings_all [renamed from mail module] -NEW ir.model.access: base.access_res_users_settings_user [renamed from mail module] -# DONE: renamed in pre-migration - -DEL ir.model.access: base.access_ir_server_object_lines_group_system -DEL ir.model.access: base.access_res_company_group_user -DEL ir.model.access: base.access_res_country_group_all -DEL ir.model.access: base.access_res_country_group_group_all -DEL ir.model.access: base.access_res_country_state_group_all -DEL ir.model.access: base.access_res_currency_group_all -DEL ir.model.access: base.access_res_currency_rate_group_all -DEL ir.model.access: base.access_res_lang_group_all -DEL ir.model.access: base.access_res_lang_group_user -DEL ir.model.access: base.access_res_users_all -DEL ir.model.access: base.access_res_users_log_all NEW ir.model.constraint: base.constraint_ir_model_fields_name_manual_field NEW ir.model.constraint: base.constraint_ir_model_inherit_uniq -# NOTHING TO DO: noupdate records - -NEW ir.model.constraint: base.constraint_res_users_settings_unique_user_id [renamed from mail module] -# DONE: renamed in pre-migration - NEW ir.module.category: base.module_category_services_appointment NEW ir.module.module: base.module_sale_amazon (noupdate) -# NOTHING TO DO: new records - -NEW ir.rule: base.res_users_settings_rule_admin [renamed from mail module] (noupdate) -NEW ir.rule: base.res_users_settings_rule_user [renamed from mail module] (noupdate) -# DONE: renamed in pre-migration - -DEL ir.rule: base.res_partner_rule_private_employee (noupdate) -DEL ir.rule: base.res_partner_rule_private_group (noupdate) -# DONE: removed in post-migration - NEW ir.ui.menu: base.menu_ir_client_actions_report DEL ir.ui.menu: base.menu_board_root DEL ir.ui.menu: base.menu_module_updates @@ -194,11 +161,7 @@ DEL ir.ui.view: base.onboarding_company_step DEL ir.ui.view: base.onboarding_container DEL ir.ui.view: base.onboarding_step DEL ir.ui.view: base.view_module_category_tree -# NOTHING TO DO: noupdate records - NEW res.country.group: base.eurasian_economic_union (noupdate) -# NOTHING TO DO: new record - NEW res.country.state: base.state_hk_hk NEW res.country.state: base.state_hk_kln NEW res.country.state: base.state_hk_nt @@ -268,12 +231,32 @@ NEW res.country.state: base.state_uy_16 NEW res.country.state: base.state_uy_17 NEW res.country.state: base.state_uy_18 NEW res.country.state: base.state_uy_19 -# NOTHING TO DO: noupdate records - NEW res.currency: base.SLE (noupdate) -# NOTHING TO DO: new record - -DEL res.groups: base.group_private_addresses NEW res.lang: base.lang_en_NZ NEW res.lang: base.lang_es_419 +# NOTHING TO DO: New records + +NEW ir.model.access: base.access_res_users_settings_all [renamed from mail module] +NEW ir.model.access: base.access_res_users_settings_user [renamed from mail module] +NEW ir.model.constraint: base.constraint_res_users_settings_unique_user_id [renamed from mail module] +NEW ir.rule: base.res_users_settings_rule_admin [renamed from mail module] (noupdate) +NEW ir.rule: base.res_users_settings_rule_user [renamed from mail module] (noupdate) +# DONE: renamed in pre-migration + +DEL ir.model.access: base.access_ir_server_object_lines_group_system +DEL ir.model.access: base.access_res_company_group_user +DEL ir.model.access: base.access_res_country_group_all +DEL ir.model.access: base.access_res_country_group_group_all +DEL ir.model.access: base.access_res_country_state_group_all +DEL ir.model.access: base.access_res_currency_group_all +DEL ir.model.access: base.access_res_currency_rate_group_all +DEL ir.model.access: base.access_res_lang_group_all +DEL ir.model.access: base.access_res_lang_group_user +DEL ir.model.access: base.access_res_users_all +DEL ir.model.access: base.access_res_users_log_all +DEL res.groups: base.group_private_addresses # NOTHING TO DO: noupdate records + +DEL ir.rule: base.res_partner_rule_private_employee (noupdate) +DEL ir.rule: base.res_partner_rule_private_group (noupdate) +# DONE: removed in post-migration From e5f7fe944d223d6bda66d22b9fe64468961200f3 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 11 Oct 2024 12:02:10 +0200 Subject: [PATCH 3/3] [FIX] Don't execute regular tests --- .github/workflows/test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 01e721f2268c..be2bb37d2904 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -140,6 +140,5 @@ jobs: --db_user=$DB_USERNAME \ --load=base,web,openupgrade_framework \ --log-handler odoo.models.unlink:WARNING \ - --test-enable \ --stop-after-init \ --update=$MODULES_NEW