From a8e09757f62edb0fd863d0c83886ec300a5f8258 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Thu, 14 May 2026 20:45:23 -0400 Subject: [PATCH] [ADD] partner_autocomplete: cleanup obsolete res.partner/res.company fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 18.0 partner_autocomplete module added three fields that no longer exist in 19.0: - res.company.partner_gid - res.partner.additional_info - res.partner.partner_gid Per upgrade_analysis.txt those are DEL. The script directory previously contained only upgrade_analysis.txt — no pre-migration.py and no upgrade_analysis_work.txt — so the migration relied on Odoo's standard upgrade flow to clean up the stale ir_model_fields rows and the matching inheritance views (view_partner_simple_form_inherit_partner_autocomplete, view_res_partner_form_inherit_partner_autocomplete, both also DEL in the analysis). That flow does not in fact prune them — the rows survive and trip cross-cutting view validation when later modules' data XML loads (reproduced on l10n_ae/data/account_tax_report_data.xml:3 with the error "Field 'partner_gid' does not exist in model 'res.partner'"). Add a pre-migration that deletes the stale field xml_ids + the orphan view xml_ids via openupgrade.delete_records_safely_by_xml_id, and a companion upgrade_analysis_work.txt that annotates the analysis blocks. Reproduced and verified on the same fresh 18.0 CE-all install used for the hr companion PR; with this patch and the hr/loyalty companions applied, the migration progresses past the previous crash point and continues into the next module's load. --- .../19.0.1.1/pre-migration.py | 45 +++++++++++++++++++ .../19.0.1.1/upgrade_analysis_work.txt | 38 ++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 openupgrade_scripts/scripts/partner_autocomplete/19.0.1.1/pre-migration.py create mode 100644 openupgrade_scripts/scripts/partner_autocomplete/19.0.1.1/upgrade_analysis_work.txt diff --git a/openupgrade_scripts/scripts/partner_autocomplete/19.0.1.1/pre-migration.py b/openupgrade_scripts/scripts/partner_autocomplete/19.0.1.1/pre-migration.py new file mode 100644 index 000000000000..6a8b7be14c1b --- /dev/null +++ b/openupgrade_scripts/scripts/partner_autocomplete/19.0.1.1/pre-migration.py @@ -0,0 +1,45 @@ +# Copyright 2026 ledoent +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + +# Fields the 18.0 partner_autocomplete module added that no longer exist +# anywhere in 19.0 (verified: not defined on res.partner, res.company, or +# any partner_autocomplete model). Per upgrade_analysis.txt: +# res.company.partner_gid : DEL +# res.partner.additional_info: DEL +# res.partner.partner_gid : DEL +# Odoo's standard registry rebuild does not prune the stale ir_model_fields +# rows when the donor module is upgraded; the rows + matching ir_ui_view +# records (also DEL'd in 19.0 per analysis: +# view_partner_simple_form_inherit_partner_autocomplete +# view_res_partner_form_inherit_partner_autocomplete) survive and trip +# cross-cutting view validation later in the same migration run +# (reproduced on l10n_ae/data/account_tax_report_data.xml). +_obsolete_field_xmlids = [ + "partner_autocomplete.field_res_company__partner_gid", + "partner_autocomplete.field_res_partner__additional_info", + "partner_autocomplete.field_res_partner__partner_gid", +] + +_obsolete_view_xmlids = [ + "partner_autocomplete.view_partner_simple_form_inherit_partner_autocomplete", + "partner_autocomplete.view_res_partner_form_inherit_partner_autocomplete", +] + + +def cleanup_obsolete_partner_autocomplete_records(env): + """ + Drop stale ir_model_fields rows and orphan ir_ui_view records for + fields/views the 18.0 partner_autocomplete module added that don't + exist in 19.0. See upgrade_analysis_work.txt for the full block. + """ + openupgrade.delete_records_safely_by_xml_id( + env, + _obsolete_field_xmlids + _obsolete_view_xmlids, + ) + + +@openupgrade.migrate() +def migrate(env, version): + cleanup_obsolete_partner_autocomplete_records(env) diff --git a/openupgrade_scripts/scripts/partner_autocomplete/19.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/partner_autocomplete/19.0.1.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..5e270e55dafe --- /dev/null +++ b/openupgrade_scripts/scripts/partner_autocomplete/19.0.1.1/upgrade_analysis_work.txt @@ -0,0 +1,38 @@ +---Models in module 'partner_autocomplete'--- +obsolete model res.partner.autocomplete.sync + +# NOTHING TO DO: standard module-removal flow handles the table drop + +---Fields in module 'partner_autocomplete'--- +partner_autocomplete / res.company / partner_gid (integer) : DEL +partner_autocomplete / res.partner / additional_info (char) : DEL +partner_autocomplete / res.partner / partner_gid (integer) : DEL + +# DONE: stale ir_model_fields rows and the orphan inheritance views +# (referenced under XML records below) are deleted in pre-migration +# via cleanup_obsolete_partner_autocomplete_records. Without this, the +# rows survive the standard module upgrade and trip cross-cutting view +# validation when later modules' data XML loads (reproduced on +# l10n_ae/data/account_tax_report_data.xml:3 with the error +# 'Field partner_gid does not exist in model res.partner'). + +partner_autocomplete / res.partner.autocomplete.sync / partner_id (many2one) : DEL relation: res.partner +partner_autocomplete / res.partner.autocomplete.sync / synched (boolean) : DEL + +# NOTHING TO DO: covered by the obsolete-model removal above + +---XML records in module 'partner_autocomplete'--- +DEL ir.cron: partner_autocomplete.ir_cron_partner_autocomplete +DEL ir.model.access: partner_autocomplete.access_partner_autocomplete_sync_portal +DEL ir.model.access: partner_autocomplete.access_partner_autocomplete_sync_system +DEL ir.model.access: partner_autocomplete.access_partner_autocomplete_sync_user + +# NOTHING TO DO: deleted by standard module upgrade + +DEL ir.ui.view: partner_autocomplete.view_partner_simple_form_inherit_partner_autocomplete +DEL ir.ui.view: partner_autocomplete.view_res_partner_form_inherit_partner_autocomplete + +# DONE: explicitly deleted in pre-migration. Without this, the views +# survive the standard upgrade (Odoo only deletes views whose xml_id +# is in the noupdate-cleanup queue, and these were noupdate=False) and +# their arch_db retains stale field references that block later loads.