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 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..a3ceaf410dae --- /dev/null +++ b/openupgrade_scripts/scripts/base/17.0.1.3/end-migration.py @@ -0,0 +1,19 @@ +# 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 = [ + "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/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 new file mode 100644 index 000000000000..f567e2046b2d --- /dev/null +++ b/openupgrade_scripts/scripts/base/17.0.1.3/post-migration.py @@ -0,0 +1,19 @@ +# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo) +# Copyright 2024 Tecnativa - Pedro M. Baeza +# 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", +] + + +@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, + ) 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..5adebe3fcaa7 --- /dev/null +++ b/openupgrade_scripts/scripts/base/17.0.1.3/pre-migration.py @@ -0,0 +1,216 @@ +# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo) +# Copyright 2024 Tecnativa - Pedro M. Baeza +# 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.model_res_users_settings", + "base.model_res_users_settings", + ), + ( + "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", + ), +] +_column_renames = { + "res_partner": [("display_name", "complete_name")], +} + + +def _fill_ir_server_object_lines_into_action_server(cr): + openupgrade.logged_query( + 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, + 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; + """, + ) + # Update operations + openupgrade.logged_query( + cr, + """ + 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]), + ) + 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 _fill_empty_country_codes(cr): + openupgrade.logged_query( + cr, + """ + UPDATE res_country + SET code = 'OU' || id::VARCHAR + WHERE code IS NULL + """, + ) + + +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 {query}, + country_id = NULL, + state_id = NULL + 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) + openupgrade.rename_columns(cr, _column_renames) + _fill_ir_server_object_lines_into_action_server(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 new file mode 100644 index 000000000000..e1cd50c22772 --- /dev/null +++ b/openupgrade_scripts/scripts/base/17.0.1.3/upgrade_analysis_work.txt @@ -0,0 +1,262 @@ +---Models in module 'base'--- +obsolete model ir.server.object.lines +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 +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-id + +---Fields in module 'base'--- +base / ir.actions.act_url / target (selection) : selection_keys is now '['download', 'new', 'self']' ('['new', 'self']') +# NOTHING TO DO: new URL target feature, so no conversion needed for existing ones + +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']') +base / ir.actions.server / webhook_field_ids (many2many) : NEW relation: ir.model.fields +base / ir.actions.server / webhook_url (char) : NEW +# 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: New selection option + +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: 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 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 + +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 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 +# 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 +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: 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: Handled by Odoo registry + +---XML records in module 'base'--- +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=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 +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 +NEW ir.model.constraint: base.constraint_ir_model_fields_name_manual_field +NEW ir.model.constraint: base.constraint_ir_model_inherit_uniq +NEW ir.module.category: base.module_category_services_appointment +NEW ir.module.module: base.module_sale_amazon (noupdate) +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 +NEW res.country.group: base.eurasian_economic_union (noupdate) +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 +NEW res.currency: base.SLE (noupdate) +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