Skip to content
Open
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
4 changes: 3 additions & 1 deletion .github/workflows/test-migration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,10 @@ jobs:
pip install -q -r odoo/requirements.txt
pip install -r ./openupgrade/requirements.txt
pip install -U git+https://github.com/oca/openupgradelib
# this is for v16 l10n_eg_edi_eta which crashes without it
# this is for v18 l10n_eg_edi_eta which crashes without it
pip install asn1crypto
# required by v18
pip install decorator
pip install coverage
# this is for account_peppol
pip install phonenumbers
Expand Down
1,248 changes: 1,248 additions & 0 deletions docsource/modules180-190.rst

Large diffs are not rendered by default.

65 changes: 65 additions & 0 deletions openupgrade_scripts/scripts/base/19.0.1.3/noupdate_changes.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="AED" model="res.currency">
<field name="symbol">AED</field>
</record>
<record id="ae" model="res.country">
<field name="state_required">1</field>
<field name="vat_label">TRN</field>
</record>
<record id="cd" model="res.country">
<field name="name">Congo (DRC)</field>
</record>
<record id="cg" model="res.country">
<field name="name">Congo (Republic)</field>
</record>
<record id="ch_and_li" model="res.country.group">
<field name="code">CH-LI</field>
</record>
<record id="eurasian_economic_union" model="res.country.group">
<field name="code">EEU</field>
</record>
<record id="europe" model="res.country.group">
<field name="code">EU</field>
</record>
<record id="gulf_cooperation_council" model="res.country.group">
<field name="code">GCC</field>
</record>
<record id="ir_filters_employee_rule" model="ir.rule">
<field name="domain_force">[('user_ids','in',[False,user.id])]</field>
<field name="name">ir.filter: owner or global</field>
<field name="perm_unlink" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record id="ir_filters_portal_public_rule" model="ir.rule">
<field name="domain_force">[('user_ids', 'in', user.ids)]</field>
</record>
<record id="partner_admin" model="res.partner">
<field name="email"/>
</record>
<record id="pf" model="res.country">
<field name="vat_label">VAT</field>
</record>
<record id="public_user" model="res.users">
<field name="group_ids" eval="[Command.link(ref('base.group_public'))]"/>
</record>
<record id="sepa_zone" model="res.country.group">
<field name="code">SEPA</field>
</record>
<record id="south_america" model="res.country.group">
<field name="code">SA</field>
</record>
<record id="user_admin" model="res.users">
<field name="signature" type="html">
<div>Administrator</div>
</field>
<field name="group_ids" eval="[Command.set([])]"/>
</record>
<record id="user_root" model="res.users">
<field name="signature" type="html">
<div>System</div>
</field>
</record>
</odoo>
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="AED" model="res.currency">
<field name="symbol">AED</field>
</record>
<record id="ae" model="res.country">
<field name="state_required">1</field>
<field name="vat_label">TRN</field>
</record>
<record id="cd" model="res.country">
<field name="name">Congo (DRC)</field>
</record>
<record id="cg" model="res.country">
<field name="name">Congo (Republic)</field>
</record>
<record id="ch_and_li" model="res.country.group">
<field name="code">CH-LI</field>
</record>
<record id="eurasian_economic_union" model="res.country.group">
<field name="code">EEU</field>
</record>
<record id="europe" model="res.country.group">
<field name="code">EU</field>
</record>
<record id="gulf_cooperation_council" model="res.country.group">
<field name="code">GCC</field>
</record>
<record id="ir_filters_employee_rule" model="ir.rule">
<field name="domain_force">[('user_ids','in',[False,user.id])]</field>
<field name="name">ir.filter: owner or global</field>
<field name="perm_unlink" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
</record>
<record id="ir_filters_portal_public_rule" model="ir.rule">
<field name="domain_force">[('user_ids', 'in', user.ids)]</field>
</record>
<record id="partner_admin" model="res.partner">
<field name="email"/>
</record>
<record id="pf" model="res.country">
<field name="vat_label">VAT</field>
</record>
<record id="public_user" model="res.users">
<field name="group_ids" eval="[Command.link(ref('base.group_public'))]"/>
</record>
<record id="sepa_zone" model="res.country.group">
<field name="code">SEPA</field>
</record>
<record id="south_america" model="res.country.group">
<field name="code">SA</field>
</record>
<record id="user_admin" model="res.users">
<field name="signature">Administrator</field>
<!-- don't touch admin's groups
<field name="group_ids" eval="[Command.set([])]"/>
-->
</record>
<record id="user_root" model="res.users">
<field name="signature">System</field>
</record>
</odoo>
107 changes: 107 additions & 0 deletions openupgrade_scripts/scripts/base/19.0.1.3/post-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# Copyright 2025 Hunki Enterprises BV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from openupgradelib import openupgrade

from odoo.fields import Command


def _ir_actions_act_window_target(env):
"""
selection value 'inline' was removed, map to 'current'
"""
openupgrade.logged_query(
env.cr,
"UPDATE ir_act_window SET target='current' WHERE target='inline'",
)


def _ir_actions_server_child_ids(env):
"""
Field was changed from m2m to o2m - set parent_id from m2m table,
duplicate child actions that had multiple parents
"""
env.cr.execute(
"""
SELECT action_id, array_agg(server_id)
FROM rel_server_actions GROUP BY action_id
"""
)
for action_id, parent_ids in env.cr.fetchall():
action = env["ir.actions.server"].browse(action_id)
parents = env["ir.actions.server"].browse(parent_ids)
action.parent_id = parents[0]
for parent in parents[1:]:
action.copy({"name": action.name, "parent_id": parent.id})


def _ir_actions_server_html_value(env):
"""
For evaluation_type 'value' and update_field_id.ttype == 'html',
new field html_value is used
"""
for action in env["ir.actions.server"].search(
[
("state", "=", "object_write"),
("evaluation_type", "=", "value"),
("update_field_id.ttype", "=", "html"),
]
):
action.write({"html_value": action.value})


def _ir_filters_user_ids(env):
"""
m2o user_id has been transformed to m2m user_ids
"""
openupgrade.m2o_to_x2m(
env.cr, env["ir.filters"], env["ir.filters"]._table, "user_ids", "user_id"
)


def _res_lang(env):
"""
Char fields date_format, grouping and time_format have been dumbed down to
selection fields. Keep their original value in a legacy column, and map existing
values not in the selection to the default value
"""
ResLang = env["res.lang"]
for field_name in ("date_format", "time_format", "grouping"):
field = ResLang._fields[field_name]
openupgrade.copy_columns(env.cr, {"res_lang": [(field_name, None, None)]})
openupgrade.logged_query(
env.cr,
f"UPDATE res_lang SET {field_name}=%(default)s "
f"WHERE {field_name} NOT IN %(selection)s",
{
"default": field.default(ResLang),
"selection": tuple(
value for value, _string in field._description_selection(env)
),
},
)


def _init_default_user_group(env):
"""
Assign all groups of default_user to implied_ids of default_user_group
"""
default_user = env.ref("base.default_user", raise_if_not_found=False)
if not default_user:
return
env.ref("base.default_user_group").write(
{
"implied_ids": [Command.set(default_user.group_ids.ids)],
}
)


@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(env, "base", "19.0.1.3/noupdate_changes_work.xml")
_ir_actions_act_window_target(env)
_ir_actions_server_child_ids(env)
_ir_actions_server_html_value(env)
_ir_filters_user_ids(env)
_res_lang(env)
_init_default_user_group(env)
Loading