Skip to content

Commit 5bf94ac

Browse files
committed
Merge PR OCA#5446: openupgrade framework+base
2 parents b2d16d4 + 756794f commit 5bf94ac

File tree

11 files changed

+3631
-1
lines changed

11 files changed

+3631
-1
lines changed

.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

docsource/modules180-190.rst

Lines changed: 1248 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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+
<field name="signature" type="html">
56+
<div>Administrator</div>
57+
</field>
58+
<field name="group_ids" eval="[Command.set([])]"/>
59+
</record>
60+
<record id="user_root" model="res.users">
61+
<field name="signature" type="html">
62+
<div>System</div>
63+
</field>
64+
</record>
65+
</odoo>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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+
<field name="signature">Administrator</field>
56+
<!-- don't touch admin's groups
57+
<field name="group_ids" eval="[Command.set([])]"/>
58+
-->
59+
</record>
60+
<record id="user_root" model="res.users">
61+
<field name="signature">System</field>
62+
</record>
63+
</odoo>
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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+
_ir_actions_act_window_target(env)
103+
_ir_actions_server_child_ids(env)
104+
_ir_actions_server_html_value(env)
105+
_ir_filters_user_ids(env)
106+
_res_lang(env)
107+
_init_default_user_group(env)

0 commit comments

Comments
 (0)