From 4596cc88ce25a88e2518b986b03fa6875e5ae4b4 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Fri, 15 May 2026 18:31:01 -0400 Subject: [PATCH] [OU-ADD] account_edi_ubl_cii: VATEX selection-key value migration --- docsource/modules180-190.rst | 2 +- .../19.0.1.0/pre-migration.py | 29 ++++++++++++ .../test_account_edi_ubl_cii_migration.py | 44 +++++++++++++++++ .../19.0.1.0/upgrade_analysis_work.txt | 47 +++++++++++++++++++ .../data_account_edi_ubl_cii_migration.py | 23 +++++++++ 5 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/pre-migration.py create mode 100644 openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/tests/test_account_edi_ubl_cii_migration.py create mode 100644 openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/account_edi_ubl_cii/tests/data_account_edi_ubl_cii_migration.py diff --git a/docsource/modules180-190.rst b/docsource/modules180-190.rst index e7f797ce0766..a0a937c256e1 100644 --- a/docsource/modules180-190.rst +++ b/docsource/modules180-190.rst @@ -16,7 +16,7 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | account_edi_proxy_client | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| account_edi_ubl_cii | | | +| account_edi_ubl_cii |Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ | |del| account_edi_ubl_cii_tax_extension | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/pre-migration.py new file mode 100644 index 000000000000..edbed6fbd87c --- /dev/null +++ b/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/pre-migration.py @@ -0,0 +1,29 @@ +from openupgradelib import openupgrade + +_VATEX_RENAMES = [ + ("VATEX_EU_AE", "VATEX-EU-AE"), + ("VATEX_EU_D", "VATEX-EU-D"), + ("VATEX_EU_F", "VATEX-EU-F"), + ("VATEX_EU_G", "VATEX-EU-G"), + ("VATEX_EU_I", "VATEX-EU-I"), + ("VATEX_EU_IC", "VATEX-EU-IC"), + ("VATEX_EU_J", "VATEX-EU-J"), + ("VATEX_EU_O", "VATEX-EU-O"), + ("VATEX_FR-CNWVAT", "VATEX-FR-CNWVAT"), + ("VATEX_FR-FRANCHISE", "VATEX-FR-FRANCHISE"), +] + + +@openupgrade.migrate() +def migrate(env, version): + """Migrate 18.0 underscored VATEX codes to the 19.0 hyphenated form + on account.tax.ubl_cii_tax_exemption_reason_code. Explicit value-by-value + mapping (not a regex REPLACE) so unrelated codes can never be touched. + """ + for old, new in _VATEX_RENAMES: + openupgrade.logged_query( + env.cr, + "UPDATE account_tax SET ubl_cii_tax_exemption_reason_code = %s " + "WHERE ubl_cii_tax_exemption_reason_code = %s", + (new, old), + ) diff --git a/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/tests/test_account_edi_ubl_cii_migration.py b/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/tests/test_account_edi_ubl_cii_migration.py new file mode 100644 index 000000000000..ef15e0c10437 --- /dev/null +++ b/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/tests/test_account_edi_ubl_cii_migration.py @@ -0,0 +1,44 @@ +from odoo.tests import TransactionCase + +from odoo.addons.openupgrade_framework import openupgrade_test + + +@openupgrade_test +class TestAccountEdiUblCiiMigration(TransactionCase): + def test_no_legacy_vatex_codes(self): + """The 18.0 underscored VATEX_* selection values are renamed to the + 19.0 hyphenated VATEX-* form. After migration, no account.tax row + should still carry a legacy VATEX_ value. + """ + self.env.cr.execute( + r""" + SELECT id FROM account_tax + WHERE ubl_cii_tax_exemption_reason_code LIKE 'VATEX\_%' ESCAPE '\' + """ + ) + self.assertEqual(self.env.cr.fetchall(), []) + + def test_new_vatex_codes_present(self): + """The data_account_edi_ubl_cii_migration.py snippet seeds 18.0 demo + taxes with the 10 legacy VATEX_* values pre-migration. After + migration, their hyphenated VATEX-* equivalents must be present. + """ + new_codes = ( + "VATEX-EU-AE", + "VATEX-EU-D", + "VATEX-EU-F", + "VATEX-EU-G", + "VATEX-EU-I", + "VATEX-EU-IC", + "VATEX-EU-J", + "VATEX-EU-O", + "VATEX-FR-CNWVAT", + "VATEX-FR-FRANCHISE", + ) + for code in new_codes: + self.assertTrue( + self.env["account.tax"].search( + [("ubl_cii_tax_exemption_reason_code", "=", code)], limit=1 + ), + f"Expected at least one account.tax with code {code} after migration.", + ) diff --git a/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..91813390516f --- /dev/null +++ b/openupgrade_scripts/scripts/account_edi_ubl_cii/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,47 @@ +---Models in module 'account_edi_ubl_cii'--- + +# NOTHING TO DO + +---Fields in module 'account_edi_ubl_cii'--- +account_edi_ubl_cii_tax_extension / account.tax / ubl_cii_tax_exemption_reason_code (selection): selection_keys added: [VATEX-EU-AE, VATEX-EU-D, VATEX-EU-F, VATEX-EU-G, VATEX-EU-I, VATEX-EU-IC, VATEX-EU-J, VATEX-EU-O, VATEX-FR-CNWVAT, VATEX-FR-FRANCHISE], removed: [VATEX_EU_AE, VATEX_EU_D, VATEX_EU_F, VATEX_EU_G, VATEX_EU_I, VATEX_EU_IC, VATEX_EU_J, VATEX_EU_O, VATEX_FR-CNWVAT, VATEX_FR-FRANCHISE] + +# DONE: pre-migration: UPDATE VATEX_* → VATEX-* on account.tax + +---XML records in module 'account_edi_ubl_cii'--- +NEW ir.ui.view: account_edi_ubl_cii.view_account_invoice_form_inherit +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_AddressType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_AllowanceChargeType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_CommonLineType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_CommonType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_CreditNote +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_CreditNoteLineType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_CreditNoteType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_DebitNote +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_DebitNoteLineType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_DebitNoteType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_DeliveryType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_ExchangeRateType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_Invoice +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_InvoiceLineType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_InvoicePeriodType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_InvoiceType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_MonetaryTotalType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_PartyType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_PaymentMeansType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_PaymentTermsType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_ResponseType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_SignatureType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_TaxCategoryType +DEL ir.ui.view: account_edi_ubl_cii.ubl_20_TaxTotalType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_AddressType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_CreditNoteLineType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_CreditNoteType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_DebitNoteLineType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_DebitNoteType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_InvoiceLineType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_InvoiceType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_PartyType +DEL ir.ui.view: account_edi_ubl_cii.ubl_21_PaymentTermsType +DEL ir.ui.view: account_edi_ubl_cii_tax_extension.view_account_invoice_form_inherit + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/account_edi_ubl_cii/tests/data_account_edi_ubl_cii_migration.py b/openupgrade_scripts/scripts/account_edi_ubl_cii/tests/data_account_edi_ubl_cii_migration.py new file mode 100644 index 000000000000..94312ef52f81 --- /dev/null +++ b/openupgrade_scripts/scripts/account_edi_ubl_cii/tests/data_account_edi_ubl_cii_migration.py @@ -0,0 +1,23 @@ +# Seed 18.0 demo taxes with each legacy VATEX_* selection value so the +# 19.0 pre-migration has data to rewrite and the post-migration test +# has something to assert. Single-statement SQL avoids odoo-bin shell +# stdin's quirks with indented Python blocks. +env = locals().get("env") +env.cr.execute(""" + WITH legacy(code, rn) AS (VALUES + ('VATEX_EU_AE', 1), ('VATEX_EU_D', 2), ('VATEX_EU_F', 3), + ('VATEX_EU_G', 4), ('VATEX_EU_I', 5), ('VATEX_EU_IC', 6), + ('VATEX_EU_J', 7), ('VATEX_EU_O', 8), ('VATEX_FR-CNWVAT', 9), + ('VATEX_FR-FRANCHISE', 10) + ), + taxes AS ( + SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS rn + FROM account_tax + WHERE ubl_cii_tax_exemption_reason_code IS NULL + LIMIT 10 + ) + UPDATE account_tax SET ubl_cii_tax_exemption_reason_code = legacy.code + FROM taxes, legacy + WHERE account_tax.id = taxes.id AND legacy.rn = taxes.rn +""") +env.cr.commit()