Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docsource/modules180-190.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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 | | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
Expand Down
Original file line number Diff line number Diff line change
@@ -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),
)
Original file line number Diff line number Diff line change
@@ -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.",
)
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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()
Loading