From 0d80725583f2044580b1c269a3b049b9d5e2766a Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Sat, 30 May 2026 12:13:52 -0400 Subject: [PATCH 1/3] [MIG] l10n_it/l10n_it_edi: rename folded-module xmlids l10n_it_edi_withholding folds into l10n_it (10 tax-report records) and l10n_it_edi_ndd folds into l10n_it_edi (access rule + 22 document-type records). Both move ir_model_data ownership via openupgrade.rename_xmlids in pre-migration so customer FKs to the legacy records survive. apriori already declares the module folds. --- docsource/modules180-190.rst | 4 +- .../scripts/l10n_it/19.0.0.9/pre-migration.py | 49 ++++ .../19.0.0.9/upgrade_analysis_work.txt | 253 ++++++++++++++++++ .../l10n_it_edi/19.0.0.5/pre-migration.py | 24 ++ .../19.0.0.5/upgrade_analysis_work.txt | 101 +++++++ 5 files changed, 429 insertions(+), 2 deletions(-) create mode 100644 openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py create mode 100644 openupgrade_scripts/scripts/l10n_it/19.0.0.9/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/pre-migration.py create mode 100644 openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/upgrade_analysis_work.txt diff --git a/docsource/modules180-190.rst b/docsource/modules180-190.rst index fd4b86e2175e..4f9070f00f79 100644 --- a/docsource/modules180-190.rst +++ b/docsource/modules180-190.rst @@ -482,9 +482,9 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | l10n_iq | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| l10n_it | | | +| l10n_it | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| l10n_it_edi | | | +| l10n_it_edi | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ | l10n_it_edi_doi | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py new file mode 100644 index 000000000000..bb0f8a9d5f2e --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py @@ -0,0 +1,49 @@ +from openupgradelib import openupgrade + +# l10n_it_edi_withholding folds into l10n_it in 19.0; move the 10 tax-report +# records' ir_model_data ownership so customer FKs (e.g. account.tax tag_ids) +# survive instead of being orphaned by a fresh install. +_renamed_xmlids = [ + ("l10n_it_edi_withholding.withh_tax_report_it", "l10n_it.withh_tax_report_it"), + ( + "l10n_it_edi_withholding.withh_tax_report_balance", + "l10n_it.withh_tax_report_balance", + ), + ( + "l10n_it_edi_withholding.enasarco_purchase_tax_report_it_line_tag", + "l10n_it.enasarco_purchase_tax_report_it_line_tag", + ), + ( + "l10n_it_edi_withholding.enasarco_sale_tax_report_it_line_tag", + "l10n_it.enasarco_sale_tax_report_it_line_tag", + ), + ( + "l10n_it_edi_withholding.withh_purchase_tax_report_it_line_tag", + "l10n_it.withh_purchase_tax_report_it_line_tag", + ), + ( + "l10n_it_edi_withholding.withh_sale_tax_report_it_line_tag", + "l10n_it.withh_sale_tax_report_it_line_tag", + ), + ( + "l10n_it_edi_withholding.enasarco_purchase_tax_report_it_line", + "l10n_it.enasarco_purchase_tax_report_it_line", + ), + ( + "l10n_it_edi_withholding.enasarco_sale_tax_report_it_line", + "l10n_it.enasarco_sale_tax_report_it_line", + ), + ( + "l10n_it_edi_withholding.withh_purchase_tax_report_it_line", + "l10n_it.withh_purchase_tax_report_it_line", + ), + ( + "l10n_it_edi_withholding.withh_sale_tax_report_it_line", + "l10n_it.withh_sale_tax_report_it_line", + ), +] + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.rename_xmlids(env.cr, _renamed_xmlids) diff --git a/openupgrade_scripts/scripts/l10n_it/19.0.0.9/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/upgrade_analysis_work.txt new file mode 100644 index 000000000000..b01c9d9117ca --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/upgrade_analysis_work.txt @@ -0,0 +1,253 @@ +---Models in module 'l10n_it'--- +---Fields in module 'l10n_it'--- +l10n_it / account.tax / l10n_it_law_reference (char) : DEL + +# NOTHING TO DO: legacy descriptive char on account.tax; not re-created by +# the 19.0 chart template, value is informational only. Column drop is +# handled by the standard module-upgrade flow. + +---XML records in module 'l10n_it'--- +NEW account.report: l10n_it.withh_tax_report_it [renamed from l10n_it_edi_withholding module] +NEW account.report.column: l10n_it.withh_tax_report_balance [renamed from l10n_it_edi_withholding module] +NEW account.report.expression: l10n_it.enasarco_purchase_tax_report_it_line_tag [renamed from l10n_it_edi_withholding module] +NEW account.report.expression: l10n_it.enasarco_sale_tax_report_it_line_tag [renamed from l10n_it_edi_withholding module] +NEW account.report.expression: l10n_it.withh_purchase_tax_report_it_line_tag [renamed from l10n_it_edi_withholding module] +NEW account.report.expression: l10n_it.withh_sale_tax_report_it_line_tag [renamed from l10n_it_edi_withholding module] +NEW account.report.line: l10n_it.enasarco_purchase_tax_report_it_line [renamed from l10n_it_edi_withholding module] +NEW account.report.line: l10n_it.enasarco_sale_tax_report_it_line [renamed from l10n_it_edi_withholding module] +NEW account.report.line: l10n_it.withh_purchase_tax_report_it_line [renamed from l10n_it_edi_withholding module] +NEW account.report.line: l10n_it.withh_sale_tax_report_it_line [renamed from l10n_it_edi_withholding module] + +# DONE: 10 l10n_it_edi_withholding -> l10n_it xmlid renames (withholding-tax +# module folded into l10n_it). Handled by rename_xmlids in pre-migration.py. + +DEL account.report: l10n_it.tax_report_vat +NEW account.report.column: l10n_it.tax_monthly_report_vat_credit +NEW account.report.column: l10n_it.tax_monthly_report_vat_debit +DEL account.report.column: l10n_it.tax_monthly_report_vat_balance +DEL account.report.column: l10n_it.tax_report_vat_balance +NEW account.report.expression: l10n_it.tax_annual_report_line_vl1_cross_report_ve26 +NEW account.report.expression: l10n_it.tax_annual_report_line_vl1_cross_report_vj19 +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp10_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp11_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp12_debit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp13_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp14_vp14a_carryover +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp14_vp14a_debit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp14_vp14b_carryover +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp14_vp14b_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp1_exceptional_events_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp1_extraordinary_operations_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp1_subcontracting_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp2_debit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp3_debit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp4_debit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp5_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp6_vp6a_debit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp6_vp6b_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp7_debit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp8_credit +NEW account.report.expression: l10n_it.tax_monthly_report_line_vp9_credit +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp14a_balance +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp14a_carryover +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp14a_vp4_vp5_dif_neg +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp14a_vp4_vp5_dif_pos +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp14b_balance +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp14b_carryover +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp14b_vp4_vp5_dif_neg +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp14b_vp4_vp5_dif_pos +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp6a_formula +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp6b_formula +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp7_balance +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp8_balance +DEL account.report.expression: l10n_it.tax_monthly_report_line_vp9_balance +DEL account.report.expression: l10n_it.tax_report_line_ve10_tag +DEL account.report.expression: l10n_it.tax_report_line_ve11_tag +DEL account.report.expression: l10n_it.tax_report_line_ve1_tag +DEL account.report.expression: l10n_it.tax_report_line_ve20_tag +DEL account.report.expression: l10n_it.tax_report_line_ve21_tag +DEL account.report.expression: l10n_it.tax_report_line_ve22_tag +DEL account.report.expression: l10n_it.tax_report_line_ve23_tag +DEL account.report.expression: l10n_it.tax_report_line_ve24_tag +DEL account.report.expression: l10n_it.tax_report_line_ve25_tag +DEL account.report.expression: l10n_it.tax_report_line_ve26_tag +DEL account.report.expression: l10n_it.tax_report_line_ve2_tag +DEL account.report.expression: l10n_it.tax_report_line_ve30_i_tag +DEL account.report.expression: l10n_it.tax_report_line_ve30_ii_tag +DEL account.report.expression: l10n_it.tax_report_line_ve30_iii_tag +DEL account.report.expression: l10n_it.tax_report_line_ve30_iv_tag +DEL account.report.expression: l10n_it.tax_report_line_ve30_v_tag +DEL account.report.expression: l10n_it.tax_report_line_ve31_tag +DEL account.report.expression: l10n_it.tax_report_line_ve32_tag +DEL account.report.expression: l10n_it.tax_report_line_ve33_tag +DEL account.report.expression: l10n_it.tax_report_line_ve34_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_i_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_ii_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_iii_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_iv_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_ix_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_v_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_vi_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_vii_tag +DEL account.report.expression: l10n_it.tax_report_line_ve35_viii_tag +DEL account.report.expression: l10n_it.tax_report_line_ve36_tag +DEL account.report.expression: l10n_it.tax_report_line_ve37_i_tag +DEL account.report.expression: l10n_it.tax_report_line_ve37_ii_tag +DEL account.report.expression: l10n_it.tax_report_line_ve38_tag +DEL account.report.expression: l10n_it.tax_report_line_ve39_tag +DEL account.report.expression: l10n_it.tax_report_line_ve3_tag +DEL account.report.expression: l10n_it.tax_report_line_ve40_tag +DEL account.report.expression: l10n_it.tax_report_line_ve4_tag +DEL account.report.expression: l10n_it.tax_report_line_ve5_tag +DEL account.report.expression: l10n_it.tax_report_line_ve6_tag +DEL account.report.expression: l10n_it.tax_report_line_ve7_tag +DEL account.report.expression: l10n_it.tax_report_line_ve8_tag +DEL account.report.expression: l10n_it.tax_report_line_ve9_tag +DEL account.report.expression: l10n_it.tax_report_line_vj10_tag +DEL account.report.expression: l10n_it.tax_report_line_vj11_tag +DEL account.report.expression: l10n_it.tax_report_line_vj12_tag +DEL account.report.expression: l10n_it.tax_report_line_vj13_tag +DEL account.report.expression: l10n_it.tax_report_line_vj14_tag +DEL account.report.expression: l10n_it.tax_report_line_vj15_tag +DEL account.report.expression: l10n_it.tax_report_line_vj16_tag +DEL account.report.expression: l10n_it.tax_report_line_vj17_tag +DEL account.report.expression: l10n_it.tax_report_line_vj18_tag +DEL account.report.expression: l10n_it.tax_report_line_vj1_tag +DEL account.report.expression: l10n_it.tax_report_line_vj2_tag +DEL account.report.expression: l10n_it.tax_report_line_vj3_tag +DEL account.report.expression: l10n_it.tax_report_line_vj4_tag +DEL account.report.expression: l10n_it.tax_report_line_vj5_tag +DEL account.report.expression: l10n_it.tax_report_line_vj6_tag +DEL account.report.expression: l10n_it.tax_report_line_vj7_tag +DEL account.report.expression: l10n_it.tax_report_line_vj8_tag +DEL account.report.expression: l10n_it.tax_report_line_vj9_tag +DEL account.report.expression: l10n_it.tax_report_line_vp10_tag +DEL account.report.expression: l10n_it.tax_report_line_vp11_tag +DEL account.report.expression: l10n_it.tax_report_line_vp12_tag +DEL account.report.expression: l10n_it.tax_report_line_vp13_tag +DEL account.report.expression: l10n_it.tax_report_line_vp14a_balance +DEL account.report.expression: l10n_it.tax_report_line_vp14a_carryover +DEL account.report.expression: l10n_it.tax_report_line_vp14a_vp4_vp5_dif_neg +DEL account.report.expression: l10n_it.tax_report_line_vp14a_vp4_vp5_dif_pos +DEL account.report.expression: l10n_it.tax_report_line_vp14b_balance +DEL account.report.expression: l10n_it.tax_report_line_vp14b_carryover +DEL account.report.expression: l10n_it.tax_report_line_vp14b_vp4_vp5_dif_neg +DEL account.report.expression: l10n_it.tax_report_line_vp14b_vp4_vp5_dif_pos +DEL account.report.expression: l10n_it.tax_report_line_vp2_tag +DEL account.report.expression: l10n_it.tax_report_line_vp3_tag +DEL account.report.expression: l10n_it.tax_report_line_vp4_tag +DEL account.report.expression: l10n_it.tax_report_line_vp5_tag +DEL account.report.expression: l10n_it.tax_report_line_vp6a_formula +DEL account.report.expression: l10n_it.tax_report_line_vp6b_formula +DEL account.report.expression: l10n_it.tax_report_line_vp7_applied_carryover +DEL account.report.expression: l10n_it.tax_report_line_vp7_balance +DEL account.report.expression: l10n_it.tax_report_line_vp7_tag +DEL account.report.expression: l10n_it.tax_report_line_vp8_applied_carryover +DEL account.report.expression: l10n_it.tax_report_line_vp8_balance +DEL account.report.expression: l10n_it.tax_report_line_vp8_tag +DEL account.report.expression: l10n_it.tax_report_line_vp9_applied_carryover +DEL account.report.expression: l10n_it.tax_report_line_vp9_balance +DEL account.report.expression: l10n_it.tax_report_line_vp9_tag +NEW account.report.line: l10n_it.tax_monthly_report_line_vp1 +NEW account.report.line: l10n_it.tax_monthly_report_line_vp1_exceptional_events +NEW account.report.line: l10n_it.tax_monthly_report_line_vp1_extraordinary_operations +NEW account.report.line: l10n_it.tax_monthly_report_line_vp1_subcontracting +DEL account.report.line: l10n_it.tax_monthly_report_line_vp14a +DEL account.report.line: l10n_it.tax_monthly_report_line_vp14b +DEL account.report.line: l10n_it.tax_monthly_report_line_vp6a +DEL account.report.line: l10n_it.tax_monthly_report_line_vp6b +DEL account.report.line: l10n_it.tax_report_line_conto_corrente_iva +DEL account.report.line: l10n_it.tax_report_line_iva +DEL account.report.line: l10n_it.tax_report_line_operazione_imponibile +DEL account.report.line: l10n_it.tax_report_line_reverse_charge_iva +DEL account.report.line: l10n_it.tax_report_line_saldi_riporti_e_interessi +DEL account.report.line: l10n_it.tax_report_line_turnover +DEL account.report.line: l10n_it.tax_report_line_turnover_section_1 +DEL account.report.line: l10n_it.tax_report_line_turnover_section_2 +DEL account.report.line: l10n_it.tax_report_line_turnover_section_3 +DEL account.report.line: l10n_it.tax_report_line_turnover_section_4 +DEL account.report.line: l10n_it.tax_report_line_ve1 +DEL account.report.line: l10n_it.tax_report_line_ve10 +DEL account.report.line: l10n_it.tax_report_line_ve11 +DEL account.report.line: l10n_it.tax_report_line_ve2 +DEL account.report.line: l10n_it.tax_report_line_ve20 +DEL account.report.line: l10n_it.tax_report_line_ve21 +DEL account.report.line: l10n_it.tax_report_line_ve22 +DEL account.report.line: l10n_it.tax_report_line_ve23 +DEL account.report.line: l10n_it.tax_report_line_ve24 +DEL account.report.line: l10n_it.tax_report_line_ve25 +DEL account.report.line: l10n_it.tax_report_line_ve26 +DEL account.report.line: l10n_it.tax_report_line_ve3 +DEL account.report.line: l10n_it.tax_report_line_ve30 +DEL account.report.line: l10n_it.tax_report_line_ve30_I +DEL account.report.line: l10n_it.tax_report_line_ve30_ii +DEL account.report.line: l10n_it.tax_report_line_ve30_iii +DEL account.report.line: l10n_it.tax_report_line_ve30_iv +DEL account.report.line: l10n_it.tax_report_line_ve30_v +DEL account.report.line: l10n_it.tax_report_line_ve31 +DEL account.report.line: l10n_it.tax_report_line_ve32 +DEL account.report.line: l10n_it.tax_report_line_ve33 +DEL account.report.line: l10n_it.tax_report_line_ve34 +DEL account.report.line: l10n_it.tax_report_line_ve35 +DEL account.report.line: l10n_it.tax_report_line_ve35_I +DEL account.report.line: l10n_it.tax_report_line_ve35_ii +DEL account.report.line: l10n_it.tax_report_line_ve35_iii +DEL account.report.line: l10n_it.tax_report_line_ve35_iv +DEL account.report.line: l10n_it.tax_report_line_ve35_ix +DEL account.report.line: l10n_it.tax_report_line_ve35_v +DEL account.report.line: l10n_it.tax_report_line_ve35_vi +DEL account.report.line: l10n_it.tax_report_line_ve35_vii +DEL account.report.line: l10n_it.tax_report_line_ve35_viii +DEL account.report.line: l10n_it.tax_report_line_ve36 +DEL account.report.line: l10n_it.tax_report_line_ve37 +DEL account.report.line: l10n_it.tax_report_line_ve37_I +DEL account.report.line: l10n_it.tax_report_line_ve37_ii +DEL account.report.line: l10n_it.tax_report_line_ve38 +DEL account.report.line: l10n_it.tax_report_line_ve39 +DEL account.report.line: l10n_it.tax_report_line_ve4 +DEL account.report.line: l10n_it.tax_report_line_ve40 +DEL account.report.line: l10n_it.tax_report_line_ve5 +DEL account.report.line: l10n_it.tax_report_line_ve6 +DEL account.report.line: l10n_it.tax_report_line_ve7 +DEL account.report.line: l10n_it.tax_report_line_ve8 +DEL account.report.line: l10n_it.tax_report_line_ve9 +DEL account.report.line: l10n_it.tax_report_line_vj1 +DEL account.report.line: l10n_it.tax_report_line_vj10 +DEL account.report.line: l10n_it.tax_report_line_vj11 +DEL account.report.line: l10n_it.tax_report_line_vj12 +DEL account.report.line: l10n_it.tax_report_line_vj13 +DEL account.report.line: l10n_it.tax_report_line_vj14 +DEL account.report.line: l10n_it.tax_report_line_vj15 +DEL account.report.line: l10n_it.tax_report_line_vj16 +DEL account.report.line: l10n_it.tax_report_line_vj17 +DEL account.report.line: l10n_it.tax_report_line_vj18 +DEL account.report.line: l10n_it.tax_report_line_vj19 +DEL account.report.line: l10n_it.tax_report_line_vj2 +DEL account.report.line: l10n_it.tax_report_line_vj3 +DEL account.report.line: l10n_it.tax_report_line_vj4 +DEL account.report.line: l10n_it.tax_report_line_vj5 +DEL account.report.line: l10n_it.tax_report_line_vj6 +DEL account.report.line: l10n_it.tax_report_line_vj7 +DEL account.report.line: l10n_it.tax_report_line_vj8 +DEL account.report.line: l10n_it.tax_report_line_vj9 +DEL account.report.line: l10n_it.tax_report_line_vp10 +DEL account.report.line: l10n_it.tax_report_line_vp11 +DEL account.report.line: l10n_it.tax_report_line_vp12 +DEL account.report.line: l10n_it.tax_report_line_vp13 +DEL account.report.line: l10n_it.tax_report_line_vp14 +DEL account.report.line: l10n_it.tax_report_line_vp14a +DEL account.report.line: l10n_it.tax_report_line_vp14b +DEL account.report.line: l10n_it.tax_report_line_vp2 +DEL account.report.line: l10n_it.tax_report_line_vp3 +DEL account.report.line: l10n_it.tax_report_line_vp4 +DEL account.report.line: l10n_it.tax_report_line_vp5 +DEL account.report.line: l10n_it.tax_report_line_vp6 +DEL account.report.line: l10n_it.tax_report_line_vp6a +DEL account.report.line: l10n_it.tax_report_line_vp6b +DEL account.report.line: l10n_it.tax_report_line_vp7 +DEL account.report.line: l10n_it.tax_report_line_vp8 +DEL account.report.line: l10n_it.tax_report_line_vp9 + +# NOTHING TO DO: 19.0 VAT tax-report reshape under l10n_it's own xmlids; +# NEW rows install and DEL rows are removed by the standard module-upgrade +# flow. These are report-shape definitions, not customer data rows. diff --git a/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/pre-migration.py b/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/pre-migration.py new file mode 100644 index 000000000000..a758297982a6 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/pre-migration.py @@ -0,0 +1,24 @@ +from openupgradelib import openupgrade + +# l10n_it_edi_ndd folds into l10n_it_edi in 19.0; move the access rule + 22 +# l10n_it.document.type records' ir_model_data ownership so customer FKs to the +# legacy document-type ids survive instead of being orphaned by a fresh install. +_renamed_xmlids = [ + ( + "l10n_it_edi_ndd.access_l10n_it_document_type", + "l10n_it_edi.access_l10n_it_document_type", + ), +] + [ + ( + f"l10n_it_edi_ndd.l10n_it_document_type_{n:02d}", + f"l10n_it_edi.l10n_it_document_type_{n:02d}", + ) + # 01-09 + 16-28 per upgrade_analysis.txt (10-15 do not appear — likely + # they were never defined or already lived under l10n_it_edi in 18.0). + for n in list(range(1, 10)) + list(range(16, 29)) +] + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.rename_xmlids(env.cr, _renamed_xmlids) diff --git a/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/upgrade_analysis_work.txt new file mode 100644 index 000000000000..691e4dc1ee68 --- /dev/null +++ b/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/upgrade_analysis_work.txt @@ -0,0 +1,101 @@ +---Models in module 'l10n_it_edi'--- +---Fields in module 'l10n_it_edi'--- +l10n_it_edi / account.move / l10n_it_edi_attachment_name (char): NEW + +# NOTHING TO DO: optional char on account.move; Odoo's update_db handles. + +l10n_it_edi / res.company / l10n_it_edi_purchase_journal_id (many2one): NEW relation: account.journal, hasdefault: compute + +# NOTHING TO DO: NEW computed m2o on res.company; compute populates after install. + +l10n_it_edi / res.company / l10n_it_edi_register (boolean): NEW hasdefault: default + +# NOTHING TO DO: NEW boolean on res.company with manifest default; update_db handles. + +l10n_it_edi / res.partner / invoice_edi_format (False) : selection_keys added: [pint_sg] (most likely nothing to do) + +# NOTHING TO DO: selection-keys widening only; update_db handles. + +---XML records in module 'l10n_it_edi'--- +DEL account.report: l10n_it_edi_withholding.withh_tax_report_it [renamed to l10n_it module] +DEL account.report.column: l10n_it_edi_withholding.withh_tax_report_balance [renamed to l10n_it module] +DEL account.report.expression: l10n_it_edi_withholding.enasarco_purchase_tax_report_it_line_tag [renamed to l10n_it module] +DEL account.report.expression: l10n_it_edi_withholding.enasarco_sale_tax_report_it_line_tag [renamed to l10n_it module] +DEL account.report.expression: l10n_it_edi_withholding.withh_purchase_tax_report_it_line_tag [renamed to l10n_it module] +DEL account.report.expression: l10n_it_edi_withholding.withh_sale_tax_report_it_line_tag [renamed to l10n_it module] +DEL account.report.line: l10n_it_edi_withholding.enasarco_purchase_tax_report_it_line [renamed to l10n_it module] +DEL account.report.line: l10n_it_edi_withholding.enasarco_sale_tax_report_it_line [renamed to l10n_it module] +DEL account.report.line: l10n_it_edi_withholding.withh_purchase_tax_report_it_line [renamed to l10n_it module] +DEL account.report.line: l10n_it_edi_withholding.withh_sale_tax_report_it_line [renamed to l10n_it module] + +# NOTHING TO DO: source side of l10n_it_edi_withholding -> l10n_it xmlid +# renames; the rename is handled in the sibling l10n_it/19.0.0.9 pre-migration. + +NEW ir.model.access: l10n_it_edi.access_l10n_it_document_type [renamed from l10n_it_edi_ndd module] +DEL ir.model.access: l10n_it_edi_ndd.access_l10n_it_document_type [renamed to l10n_it_edi module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_01 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_02 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_03 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_04 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_05 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_06 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_07 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_08 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_09 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_16 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_17 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_18 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_19 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_20 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_21 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_22 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_23 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_24 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_25 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_26 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_27 [renamed from l10n_it_edi_ndd module] +NEW l10n_it.document.type: l10n_it_edi.l10n_it_document_type_28 [renamed from l10n_it_edi_ndd module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_01 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_02 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_03 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_04 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_05 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_06 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_07 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_08 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_09 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_16 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_17 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_18 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_19 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_20 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_21 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_22 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_23 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_24 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_25 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_26 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_27 [renamed to l10n_it_edi module] +DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_28 [renamed to l10n_it_edi module] + +# DONE: 1 ir.model.access + 22 l10n_it.document.type xmlid renames +# (l10n_it_edi_ndd folded into l10n_it_edi). Handled by rename_xmlids in +# pre-migration.py. + +NEW ir.ui.view: l10n_it_edi.account_view_tax_form_l10n_it_edi_extended +NEW ir.ui.view: l10n_it_edi.address_form_fields +NEW ir.ui.view: l10n_it_edi.l10n_it_document_type_form +NEW ir.ui.view: l10n_it_edi.l10n_it_document_type_tree +NEW ir.ui.view: l10n_it_edi.view_account_journal_form_l10n_it +DEL ir.ui.view: l10n_it_edi_ndd.account_invoice_form_l10n_it +DEL ir.ui.view: l10n_it_edi_ndd.l10n_it_document_type_form +DEL ir.ui.view: l10n_it_edi_ndd.l10n_it_document_type_tree +DEL ir.ui.view: l10n_it_edi_ndd.view_account_journal_form_l10n_it +DEL ir.ui.view: l10n_it_edi_ndd_account_dn.account_invoice_it_FatturaPA_export_debit_note +DEL ir.ui.view: l10n_it_edi_website_sale.address +DEL ir.ui.view: l10n_it_edi_withholding.account_invoice_it_FatturaPA_export_withholding +DEL ir.ui.view: l10n_it_edi_withholding.account_view_tax_form_l10n_it_edi_extended +DEL ir.ui.view: l10n_it_edi_withholding.view_invoice_tree_l10n_it_edi_extended + +# NOTHING TO DO: new views install via standard module-data XML; old views +# in folded/removed modules are dropped by the standard module-upgrade flow. From f6ea308ac5ded02f1e54af1827a68bab160f973a Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 10 Jun 2026 19:57:31 -0400 Subject: [PATCH 2/3] [FIX] l10n_it family: rename sources are post-apriori-merge module paths base's update_module_names(merge_modules=True) rewrites the folded modules' ir_model_data BEFORE these scripts run: the withholding records already sit under l10n_it_edi (sources fixed accordingly), and the ndd records already land at their final l10n_it_edi names (script was a silent no-op; removed). --- docsource/modules180-190.rst | 2 +- .../scripts/l10n_it/19.0.0.9/pre-migration.py | 28 ++++++++++--------- .../l10n_it_edi/19.0.0.5/pre-migration.py | 24 ---------------- .../19.0.0.5/upgrade_analysis_work.txt | 3 +- 4 files changed, 18 insertions(+), 39 deletions(-) delete mode 100644 openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/pre-migration.py diff --git a/docsource/modules180-190.rst b/docsource/modules180-190.rst index 4f9070f00f79..3e7bf50c0469 100644 --- a/docsource/modules180-190.rst +++ b/docsource/modules180-190.rst @@ -484,7 +484,7 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | l10n_it | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| l10n_it_edi | Done | | +| l10n_it_edi |Nothing to do | | +---------------------------------------------------+----------------------+-------------------------------------------------+ | l10n_it_edi_doi | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py index bb0f8a9d5f2e..67f1da5959fe 100644 --- a/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py +++ b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py @@ -1,44 +1,46 @@ from openupgradelib import openupgrade -# l10n_it_edi_withholding folds into l10n_it in 19.0; move the 10 tax-report -# records' ir_model_data ownership so customer FKs (e.g. account.tax tag_ids) -# survive instead of being orphaned by a fresh install. +# l10n_it_edi_withholding's tax-report records move to l10n_it in 19.0. The +# apriori merge (base pre-migration update_module_names) has already renamed +# their ir_model_data module to l10n_it_edi by the time this runs, so the +# rename sources are l10n_it_edi.*; relocate them to l10n_it so customer FKs +# (e.g. account.tax tag_ids) survive instead of being orphaned by a fresh load. _renamed_xmlids = [ - ("l10n_it_edi_withholding.withh_tax_report_it", "l10n_it.withh_tax_report_it"), + ("l10n_it_edi.withh_tax_report_it", "l10n_it.withh_tax_report_it"), ( - "l10n_it_edi_withholding.withh_tax_report_balance", + "l10n_it_edi.withh_tax_report_balance", "l10n_it.withh_tax_report_balance", ), ( - "l10n_it_edi_withholding.enasarco_purchase_tax_report_it_line_tag", + "l10n_it_edi.enasarco_purchase_tax_report_it_line_tag", "l10n_it.enasarco_purchase_tax_report_it_line_tag", ), ( - "l10n_it_edi_withholding.enasarco_sale_tax_report_it_line_tag", + "l10n_it_edi.enasarco_sale_tax_report_it_line_tag", "l10n_it.enasarco_sale_tax_report_it_line_tag", ), ( - "l10n_it_edi_withholding.withh_purchase_tax_report_it_line_tag", + "l10n_it_edi.withh_purchase_tax_report_it_line_tag", "l10n_it.withh_purchase_tax_report_it_line_tag", ), ( - "l10n_it_edi_withholding.withh_sale_tax_report_it_line_tag", + "l10n_it_edi.withh_sale_tax_report_it_line_tag", "l10n_it.withh_sale_tax_report_it_line_tag", ), ( - "l10n_it_edi_withholding.enasarco_purchase_tax_report_it_line", + "l10n_it_edi.enasarco_purchase_tax_report_it_line", "l10n_it.enasarco_purchase_tax_report_it_line", ), ( - "l10n_it_edi_withholding.enasarco_sale_tax_report_it_line", + "l10n_it_edi.enasarco_sale_tax_report_it_line", "l10n_it.enasarco_sale_tax_report_it_line", ), ( - "l10n_it_edi_withholding.withh_purchase_tax_report_it_line", + "l10n_it_edi.withh_purchase_tax_report_it_line", "l10n_it.withh_purchase_tax_report_it_line", ), ( - "l10n_it_edi_withholding.withh_sale_tax_report_it_line", + "l10n_it_edi.withh_sale_tax_report_it_line", "l10n_it.withh_sale_tax_report_it_line", ), ] diff --git a/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/pre-migration.py b/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/pre-migration.py deleted file mode 100644 index a758297982a6..000000000000 --- a/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/pre-migration.py +++ /dev/null @@ -1,24 +0,0 @@ -from openupgradelib import openupgrade - -# l10n_it_edi_ndd folds into l10n_it_edi in 19.0; move the access rule + 22 -# l10n_it.document.type records' ir_model_data ownership so customer FKs to the -# legacy document-type ids survive instead of being orphaned by a fresh install. -_renamed_xmlids = [ - ( - "l10n_it_edi_ndd.access_l10n_it_document_type", - "l10n_it_edi.access_l10n_it_document_type", - ), -] + [ - ( - f"l10n_it_edi_ndd.l10n_it_document_type_{n:02d}", - f"l10n_it_edi.l10n_it_document_type_{n:02d}", - ) - # 01-09 + 16-28 per upgrade_analysis.txt (10-15 do not appear — likely - # they were never defined or already lived under l10n_it_edi in 18.0). - for n in list(range(1, 10)) + list(range(16, 29)) -] - - -@openupgrade.migrate() -def migrate(env, version): - openupgrade.rename_xmlids(env.cr, _renamed_xmlids) diff --git a/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/upgrade_analysis_work.txt index 691e4dc1ee68..878da037c6f9 100644 --- a/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/l10n_it_edi/19.0.0.5/upgrade_analysis_work.txt @@ -78,7 +78,8 @@ DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_26 [renamed to DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_27 [renamed to l10n_it_edi module] DEL l10n_it.document.type: l10n_it_edi_ndd.l10n_it_document_type_28 [renamed to l10n_it_edi module] -# DONE: 1 ir.model.access + 22 l10n_it.document.type xmlid renames +# NOTHING TO DO: l10n_it_edi_ndd records land here automatically via the +# apriori merge (base pre-migration update_module_names), names unchanged # (l10n_it_edi_ndd folded into l10n_it_edi). Handled by rename_xmlids in # pre-migration.py. From ef2bbd11fc01f605326265e206d674a6f2550044 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Thu, 11 Jun 2026 10:22:22 -0400 Subject: [PATCH 3/3] [FIX] l10n_it: bind shorthand VL balance expressions to the new xml_ids The 2026-05 annual-report fix converted 4 VL lines' aggregation_formula shorthand to explicit expression records; shorthand rows have no ir_model_data, so the 19.0 load created a duplicate balance expression on the preserved line (UniqueViolation caught by the enriched gate). --- .../scripts/l10n_it/19.0.0.9/pre-migration.py | 54 +++++++++++++++++++ .../19.0.0.9/upgrade_analysis_work.txt | 4 +- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py index 67f1da5959fe..21072590e444 100644 --- a/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py +++ b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/pre-migration.py @@ -46,6 +46,60 @@ ] +# The 2026-05 "fix annual report formulas" converted these VL lines' +# aggregation_formula SHORTHAND into explicit expression records. Shorthand +# expressions have no ir_model_data, so the 19.0 data load would CREATE a +# second balance expression on the preserved line and trip the +# (report_line_id, label) unique constraint. Bind the orphan rows to the +# new xml_ids so the load updates them in place. +_shorthand_formula_expressions = [ + ("tax_annual_report_line_vl3", "tax_annual_report_line_vl3_formula"), + ("tax_annual_report_line_vl4", "tax_annual_report_line_vl4_formula"), + ("tax_annual_report_line_vl32", "tax_annual_report_line_vl32_formula"), + ("tax_annual_report_line_vl33", "tax_annual_report_line_vl33_formula"), +] + + +def _bind_shorthand_formula_expressions(env): + for line_name, expr_name in _shorthand_formula_expressions: + env.cr.execute( + """ + SELECT 1 FROM ir_model_data + WHERE module = 'l10n_it' AND name = %s + """, + (expr_name,), + ) + if env.cr.fetchone(): + continue + env.cr.execute( + """ + SELECT e.id + FROM account_report_expression e + JOIN ir_model_data line_imd + ON line_imd.module = 'l10n_it' + AND line_imd.model = 'account.report.line' + AND line_imd.name = %s + AND line_imd.res_id = e.report_line_id + LEFT JOIN ir_model_data expr_imd + ON expr_imd.model = 'account.report.expression' + AND expr_imd.res_id = e.id + WHERE e.label = 'balance' + AND expr_imd.id IS NULL + """, + (line_name,), + ) + row = env.cr.fetchone() + if row: + openupgrade.add_xmlid( + env.cr, + "l10n_it", + expr_name, + "account.report.expression", + row[0], + ) + + @openupgrade.migrate() def migrate(env, version): openupgrade.rename_xmlids(env.cr, _renamed_xmlids) + _bind_shorthand_formula_expressions(env) diff --git a/openupgrade_scripts/scripts/l10n_it/19.0.0.9/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/upgrade_analysis_work.txt index b01c9d9117ca..4ce0071d5a2a 100644 --- a/openupgrade_scripts/scripts/l10n_it/19.0.0.9/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/l10n_it/19.0.0.9/upgrade_analysis_work.txt @@ -18,7 +18,9 @@ NEW account.report.line: l10n_it.enasarco_sale_tax_report_it_line [renamed from NEW account.report.line: l10n_it.withh_purchase_tax_report_it_line [renamed from l10n_it_edi_withholding module] NEW account.report.line: l10n_it.withh_sale_tax_report_it_line [renamed from l10n_it_edi_withholding module] -# DONE: 10 l10n_it_edi_withholding -> l10n_it xmlid renames (withholding-tax +# DONE: VL3/4/32/33 shorthand balance expressions bound to the new explicit +# _formula xml_ids (pre-migration), and 10 l10n_it_edi_withholding -> l10n_it +# xmlid renames (withholding-tax # module folded into l10n_it). Handled by rename_xmlids in pre-migration.py. DEL account.report: l10n_it.tax_report_vat