Skip to content

Commit 8a8bddf

Browse files
committed
Merge PR #5446 into 19.0
Signed-off-by MiquelRForgeFlow
2 parents 731dc22 + 53f0817 commit 8a8bddf

9 files changed

Lines changed: 2333 additions & 2 deletions

File tree

.github/workflows/test-migration.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,10 @@ jobs:
9696
pip install -q -r odoo/requirements.txt
9797
pip install -r ./openupgrade/requirements.txt
9898
pip install -U git+https://github.com/oca/openupgradelib
99-
# this is for v16 l10n_eg_edi_eta which crashes without it
99+
# this is for v18 l10n_eg_edi_eta which crashes without it
100100
pip install asn1crypto
101+
# required by v18
102+
pip install decorator
101103
pip install coverage
102104
# this is for account_peppol
103105
pip install phonenumbers

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ repos:
101101
hooks:
102102
- id: trailing-whitespace
103103
# exclude autogenerated files
104-
exclude: /README\.rst$|\.pot?$
104+
exclude: /README\.rst$|\.pot?$|noupdate_changes(_work){0,1}.xml$
105105
- id: end-of-file-fixer
106106
# exclude autogenerated files
107107
exclude: /README\.rst$|\.pot?$

docsource/modules180-190.rst

Lines changed: 1248 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?xml version='1.0' encoding='utf-8'?>
2+
<odoo>
3+
<record id="AED" model="res.currency">
4+
<field name="symbol">AED</field>
5+
</record>
6+
<record id="ae" model="res.country">
7+
<field name="state_required">1</field>
8+
<field name="vat_label">TRN</field>
9+
</record>
10+
<record id="cd" model="res.country">
11+
<field name="name">Congo (DRC)</field>
12+
</record>
13+
<record id="cg" model="res.country">
14+
<field name="name">Congo (Republic)</field>
15+
</record>
16+
<record id="ch_and_li" model="res.country.group">
17+
<field name="code">CH-LI</field>
18+
</record>
19+
<record id="eurasian_economic_union" model="res.country.group">
20+
<field name="code">EEU</field>
21+
</record>
22+
<record id="europe" model="res.country.group">
23+
<field name="code">EU</field>
24+
</record>
25+
<record id="gulf_cooperation_council" model="res.country.group">
26+
<field name="code">GCC</field>
27+
</record>
28+
<record id="ir_filters_employee_rule" model="ir.rule">
29+
<field name="domain_force">[('user_ids','in',[False,user.id])]</field>
30+
<field name="name">ir.filter: owner or global</field>
31+
<field name="perm_unlink" eval="True"/>
32+
<field name="perm_create" eval="True"/>
33+
<field name="perm_read" eval="True"/>
34+
<field name="perm_write" eval="True"/>
35+
</record>
36+
<record id="ir_filters_portal_public_rule" model="ir.rule">
37+
<field name="domain_force">[('user_ids', 'in', user.ids)]</field>
38+
</record>
39+
<record id="partner_admin" model="res.partner">
40+
<field name="email"/>
41+
</record>
42+
<record id="pf" model="res.country">
43+
<field name="vat_label">VAT</field>
44+
</record>
45+
<record id="public_user" model="res.users">
46+
<field name="group_ids" eval="[Command.link(ref('base.group_public'))]"/>
47+
</record>
48+
<record id="sepa_zone" model="res.country.group">
49+
<field name="code">SEPA</field>
50+
</record>
51+
<record id="south_america" model="res.country.group">
52+
<field name="code">SA</field>
53+
</record>
54+
<record id="user_admin" model="res.users">
55+
<!-- don't touch admin's fields
56+
<field name="signature" type="html">
57+
<div>Administrator</div>
58+
</field>
59+
<field name="group_ids" eval="[Command.set([])]"/>
60+
-->
61+
</record>
62+
<record id="user_root" model="res.users">
63+
<!-- don't touch root's fields
64+
<field name="signature" type="html">
65+
<div>System</div>
66+
</field>
67+
-->
68+
</record>
69+
</odoo>
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# Copyright 2025 Hunki Enterprises BV
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from openupgradelib import openupgrade
5+
6+
from odoo.fields import Command
7+
8+
9+
def _ir_actions_act_window_target(env):
10+
"""
11+
selection value 'inline' was removed, map to 'current'
12+
"""
13+
openupgrade.logged_query(
14+
env.cr,
15+
"UPDATE ir_act_window SET target='current' WHERE target='inline'",
16+
)
17+
18+
19+
def _ir_actions_server_child_ids(env):
20+
"""
21+
Field was changed from m2m to o2m - set parent_id from m2m table,
22+
duplicate child actions that had multiple parents
23+
"""
24+
env.cr.execute(
25+
"""
26+
SELECT action_id, array_agg(server_id)
27+
FROM rel_server_actions GROUP BY action_id
28+
"""
29+
)
30+
for action_id, parent_ids in env.cr.fetchall():
31+
action = env["ir.actions.server"].browse(action_id)
32+
parents = env["ir.actions.server"].browse(parent_ids)
33+
action.parent_id = parents[0]
34+
for parent in parents[1:]:
35+
action.copy({"name": action.name, "parent_id": parent.id})
36+
37+
38+
def _ir_actions_server_html_value(env):
39+
"""
40+
For evaluation_type 'value' and update_field_id.ttype == 'html',
41+
new field html_value is used
42+
"""
43+
for action in env["ir.actions.server"].search(
44+
[
45+
("state", "=", "object_write"),
46+
("evaluation_type", "=", "value"),
47+
("update_field_id.ttype", "=", "html"),
48+
]
49+
):
50+
action.write({"html_value": action.value})
51+
52+
53+
def _ir_filters_user_ids(env):
54+
"""
55+
m2o user_id has been transformed to m2m user_ids
56+
"""
57+
openupgrade.m2o_to_x2m(
58+
env.cr, env["ir.filters"], env["ir.filters"]._table, "user_ids", "user_id"
59+
)
60+
61+
62+
def _res_lang(env):
63+
"""
64+
Char fields date_format, grouping and time_format have been dumbed down to
65+
selection fields. Keep their original value in a legacy column, and map existing
66+
values not in the selection to the default value
67+
"""
68+
ResLang = env["res.lang"]
69+
for field_name in ("date_format", "time_format", "grouping"):
70+
field = ResLang._fields[field_name]
71+
openupgrade.copy_columns(env.cr, {"res_lang": [(field_name, None, None)]})
72+
openupgrade.logged_query(
73+
env.cr,
74+
f"UPDATE res_lang SET {field_name}=%(default)s "
75+
f"WHERE {field_name} NOT IN %(selection)s",
76+
{
77+
"default": field.default(ResLang),
78+
"selection": tuple(
79+
value for value, _string in field._description_selection(env)
80+
),
81+
},
82+
)
83+
84+
85+
def _init_default_user_group(env):
86+
"""
87+
Assign all groups of default_user to implied_ids of default_user_group
88+
"""
89+
default_user = env.ref("base.default_user", raise_if_not_found=False)
90+
if not default_user:
91+
return
92+
env.ref("base.default_user_group").write(
93+
{
94+
"implied_ids": [Command.set(default_user.group_ids.ids)],
95+
}
96+
)
97+
98+
99+
@openupgrade.migrate()
100+
def migrate(env, version):
101+
openupgrade.load_data(env, "base", "19.0.1.3/noupdate_changes_work.xml")
102+
openupgrade.delete_records_safely_by_xml_id(
103+
env,
104+
["base.ir_filters_delete_own_rule", "base.default_user"],
105+
)
106+
_ir_actions_act_window_target(env)
107+
_ir_actions_server_child_ids(env)
108+
_ir_actions_server_html_value(env)
109+
_ir_filters_user_ids(env)
110+
_res_lang(env)
111+
_init_default_user_group(env)
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
# Copyright 2025 Hunki Enterprises BV
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from openupgradelib import openupgrade
5+
6+
# pylint: disable=odoo-addons-relative-import
7+
from odoo.addons.openupgrade_scripts.apriori import merged_modules, renamed_modules
8+
9+
_renamed_xmlids = [
10+
("l10n_fr.dom-tom", "base.dom-tom"),
11+
("l10n_at.state_at_1", "base.state_at_1"),
12+
("l10n_at.state_at_2", "base.state_at_2"),
13+
("l10n_at.state_at_3", "base.state_at_3"),
14+
("l10n_at.state_at_4", "base.state_at_4"),
15+
("l10n_at.state_at_5", "base.state_at_5"),
16+
("l10n_at.state_at_6", "base.state_at_6"),
17+
("l10n_at.state_at_7", "base.state_at_7"),
18+
("l10n_at.state_at_8", "base.state_at_8"),
19+
("l10n_at.state_at_9", "base.state_at_9"),
20+
("l10n_bd.state_bd_a", "base.state_bd_a"),
21+
("l10n_bd.state_bd_b", "base.state_bd_b"),
22+
("l10n_bd.state_bd_c", "base.state_bd_c"),
23+
("l10n_bd.state_bd_d", "base.state_bd_d"),
24+
("l10n_bd.state_bd_e", "base.state_bd_e"),
25+
("l10n_bd.state_bd_f", "base.state_bd_f"),
26+
("l10n_bd.state_bd_g", "base.state_bd_g"),
27+
("l10n_bd.state_bd_h", "base.state_bd_h"),
28+
("base.state_id_pp", "base.state_id_pe"),
29+
("l10n_iq.state_iq_01", "base.state_iq_01"),
30+
("l10n_iq.state_iq_01_ar", "base.state_iq_01_ar"),
31+
("l10n_iq.state_iq_02", "base.state_iq_02"),
32+
("l10n_iq.state_iq_02_ar", "base.state_iq_02_ar"),
33+
("l10n_iq.state_iq_03", "base.state_iq_03"),
34+
("l10n_iq.state_iq_03_ar", "base.state_iq_03_ar"),
35+
("l10n_iq.state_iq_04", "base.state_iq_04"),
36+
("l10n_iq.state_iq_04_ar", "base.state_iq_04_ar"),
37+
("l10n_iq.state_iq_05", "base.state_iq_05"),
38+
("l10n_iq.state_iq_05_ar", "base.state_iq_05_ar"),
39+
("l10n_iq.state_iq_06", "base.state_iq_06"),
40+
("l10n_iq.state_iq_06_ar", "base.state_iq_06_ar"),
41+
("l10n_iq.state_iq_07", "base.state_iq_07"),
42+
("l10n_iq.state_iq_07_ar", "base.state_iq_07_ar"),
43+
("l10n_iq.state_iq_08", "base.state_iq_08"),
44+
("l10n_iq.state_iq_08_ar", "base.state_iq_08_ar"),
45+
("l10n_iq.state_iq_09", "base.state_iq_09"),
46+
("l10n_iq.state_iq_09_ar", "base.state_iq_09_ar"),
47+
("l10n_iq.state_iq_10", "base.state_iq_10"),
48+
("l10n_iq.state_iq_10_ar", "base.state_iq_10_ar"),
49+
("l10n_iq.state_iq_11", "base.state_iq_11"),
50+
("l10n_iq.state_iq_11_ar", "base.state_iq_11_ar"),
51+
("l10n_iq.state_iq_12", "base.state_iq_12"),
52+
("l10n_iq.state_iq_12_ar", "base.state_iq_12_ar"),
53+
("l10n_iq.state_iq_13", "base.state_iq_13"),
54+
("l10n_iq.state_iq_13_ar", "base.state_iq_13_ar"),
55+
("l10n_iq.state_iq_14", "base.state_iq_14"),
56+
("l10n_iq.state_iq_14_ar", "base.state_iq_14_ar"),
57+
("l10n_iq.state_iq_15", "base.state_iq_15"),
58+
("l10n_iq.state_iq_15_ar", "base.state_iq_15_ar"),
59+
("l10n_iq.state_iq_16", "base.state_iq_16"),
60+
("l10n_iq.state_iq_16_ar", "base.state_iq_16_ar"),
61+
("l10n_iq.state_iq_17", "base.state_iq_17"),
62+
("l10n_iq.state_iq_17_ar", "base.state_iq_17_ar"),
63+
("l10n_iq.state_iq_18", "base.state_iq_18"),
64+
("l10n_iq.state_iq_18_ar", "base.state_iq_18_ar"),
65+
("l10n_pk.state_pk_ajk", "base.state_pk_ajk"),
66+
("l10n_pk.state_pk_ba", "base.state_pk_ba"),
67+
("l10n_pk.state_pk_gb", "base.state_pk_gb"),
68+
("l10n_pk.state_pk_is", "base.state_pk_is"),
69+
("l10n_pk.state_pk_kp", "base.state_pk_kp"),
70+
("l10n_pk.state_pk_pb", "base.state_pk_pb"),
71+
("l10n_pk.state_pk_sd", "base.state_pk_sd"),
72+
("l10n_pl.state_pl_ds", "base.state_pl_ds"),
73+
("l10n_pl.state_pl_kp", "base.state_pl_kp"),
74+
("l10n_pl.state_pl_lb", "base.state_pl_lb"),
75+
("l10n_pl.state_pl_ld", "base.state_pl_ld"),
76+
("l10n_pl.state_pl_ls", "base.state_pl_ls"),
77+
("l10n_pl.state_pl_mp", "base.state_pl_mp"),
78+
("l10n_pl.state_pl_mz", "base.state_pl_mz"),
79+
("l10n_pl.state_pl_op", "base.state_pl_op"),
80+
("l10n_pl.state_pl_pk", "base.state_pl_pk"),
81+
("l10n_pl.state_pl_pl", "base.state_pl_pl"),
82+
("l10n_pl.state_pl_pm", "base.state_pl_pm"),
83+
("l10n_pl.state_pl_sk", "base.state_pl_sk"),
84+
("l10n_pl.state_pl_sl", "base.state_pl_sl"),
85+
("l10n_pl.state_pl_wm", "base.state_pl_wm"),
86+
("l10n_pl.state_pl_wp", "base.state_pl_wp"),
87+
("l10n_pl.state_pl_zp", "base.state_pl_zp"),
88+
("l10n_tw.state_tw_chh", "base.state_tw_chh"),
89+
("l10n_tw.state_tw_cic", "base.state_tw_cic"),
90+
("l10n_tw.state_tw_cih", "base.state_tw_cih"),
91+
("l10n_tw.state_tw_hch", "base.state_tw_hch"),
92+
("l10n_tw.state_tw_hct", "base.state_tw_hct"),
93+
("l10n_tw.state_tw_hlh", "base.state_tw_hlh"),
94+
("l10n_tw.state_tw_ilh", "base.state_tw_ilh"),
95+
("l10n_tw.state_tw_khc", "base.state_tw_khc"),
96+
("l10n_tw.state_tw_klc", "base.state_tw_klc"),
97+
("l10n_tw.state_tw_kmc", "base.state_tw_kmc"),
98+
("l10n_tw.state_tw_lcc", "base.state_tw_lcc"),
99+
("l10n_tw.state_tw_mlh", "base.state_tw_mlh"),
100+
("l10n_tw.state_tw_ntc", "base.state_tw_ntc"),
101+
("l10n_tw.state_tw_ntpc", "base.state_tw_ntpc"),
102+
("l10n_tw.state_tw_phc", "base.state_tw_phc"),
103+
("l10n_tw.state_tw_pth", "base.state_tw_pth"),
104+
("l10n_tw.state_tw_tcc", "base.state_tw_tcc"),
105+
("l10n_tw.state_tw_tnh", "base.state_tw_tnh"),
106+
("l10n_tw.state_tw_tpc", "base.state_tw_tpc"),
107+
("l10n_tw.state_tw_tth", "base.state_tw_tth"),
108+
("l10n_tw.state_tw_tyc", "base.state_tw_tyc"),
109+
("l10n_tw.state_tw_ylh", "base.state_tw_ylh"),
110+
]
111+
112+
_merged_xmlids = [
113+
("base.module_category_inventory", "base.module_category_supply_chain"),
114+
("base.module_category_manufacturing", "base.module_category_supply_chain"),
115+
]
116+
117+
_renamed_fields = [
118+
(
119+
"ir.actions.act_window",
120+
"ir_act_window",
121+
"groups_id",
122+
"group_ids",
123+
),
124+
(
125+
"ir.actions.report",
126+
"ir_act_report_xml",
127+
"groups_id",
128+
"group_ids",
129+
),
130+
(
131+
"ir.actions.server",
132+
"ir_act_report_xml",
133+
"groups_id",
134+
"group_ids",
135+
),
136+
(
137+
"ir.ui.menu",
138+
"ir_ui_menu",
139+
"groups_id",
140+
"group_ids",
141+
),
142+
(
143+
"ir.ui.view",
144+
"ir_ui_view",
145+
"groups_id",
146+
"group_ids",
147+
),
148+
(
149+
"res.groups",
150+
"res_groups",
151+
"users",
152+
"user_ids",
153+
),
154+
(
155+
"res.users",
156+
"res_users",
157+
"groups_id",
158+
"group_ids",
159+
),
160+
]
161+
162+
163+
@openupgrade.migrate()
164+
def migrate(env, version):
165+
openupgrade.logged_query(
166+
env.cr,
167+
f"""
168+
CREATE TABLE {
169+
openupgrade.get_legacy_name("ir_module_module")
170+
} AS (SELECT name, state FROM ir_module_module);
171+
""",
172+
)
173+
openupgrade.update_module_names(env.cr, renamed_modules.items())
174+
openupgrade.update_module_names(env.cr, merged_modules.items(), merge_modules=True)
175+
openupgrade.clean_transient_models(env.cr)
176+
openupgrade.rename_xmlids(env.cr, _renamed_xmlids)
177+
openupgrade.rename_xmlids(env.cr, _merged_xmlids, allow_merge=True)
178+
openupgrade.rename_fields(env, _renamed_fields)

0 commit comments

Comments
 (0)