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
114 changes: 57 additions & 57 deletions docsource/modules190-200.rst

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="uom.product_uom_cm" model="uom.uom">
<field name="unece_code">CMT</field>
</record>
<record id="uom.product_uom_cubic_foot" model="uom.uom">
<field name="unece_code">FTQ</field>
</record>
<record id="uom.product_uom_cubic_inch" model="uom.uom">
<field name="unece_code">INQ</field>
</record>
<record id="uom.product_uom_cubic_meter" model="uom.uom">
<field name="unece_code">MTQ</field>
</record>
<record id="uom.product_uom_day" model="uom.uom">
<field name="unece_code">DAY</field>
</record>
<record id="uom.product_uom_dozen" model="uom.uom">
<field name="unece_code">DZN</field>
</record>
<record id="uom.product_uom_floz" model="uom.uom">
<field name="unece_code">OZA</field>
</record>
<record id="uom.product_uom_foot" model="uom.uom">
<field name="unece_code">FOT</field>
</record>
<record id="uom.product_uom_gal" model="uom.uom">
<field name="unece_code">GLL</field>
</record>
<record id="uom.product_uom_gram" model="uom.uom">
<field name="unece_code">GRM</field>
</record>
<record id="uom.product_uom_hour" model="uom.uom">
<field name="unece_code">HUR</field>
</record>
<record id="uom.product_uom_inch" model="uom.uom">
<field name="unece_code">INH</field>
</record>
<record id="uom.product_uom_kgm" model="uom.uom">
<field name="unece_code">KGM</field>
</record>
<record id="uom.product_uom_km" model="uom.uom">
<field name="unece_code">KMT</field>
</record>
<record id="uom.product_uom_kwh" model="uom.uom">
<field name="unece_code">KWH</field>
</record>
<record id="uom.product_uom_lb" model="uom.uom">
<field name="unece_code">LBR</field>
</record>
<record id="uom.product_uom_litre" model="uom.uom">
<field name="unece_code">LTR</field>
</record>
<record id="uom.product_uom_meter" model="uom.uom">
<field name="unece_code">MTR</field>
</record>
<record id="uom.product_uom_mile" model="uom.uom">
<field name="unece_code">SMI</field>
</record>
<record id="uom.product_uom_milliliter" model="uom.uom">
<field name="unece_code">MLT</field>
</record>
<record id="uom.product_uom_millimeter" model="uom.uom">
<field name="unece_code">MMT</field>
</record>
<record id="uom.product_uom_minute" model="uom.uom">
<field name="unece_code">MIN</field>
</record>
<record id="uom.product_uom_oz" model="uom.uom">
<field name="unece_code">ONZ</field>
</record>
<record id="uom.product_uom_pack_6" model="uom.uom">
<field name="unece_code">P6</field>
</record>
<record id="uom.product_uom_qt" model="uom.uom">
<field name="unece_code">QTL</field>
</record>
<record id="uom.product_uom_square_foot" model="uom.uom">
<field name="unece_code">FTK</field>
</record>
<record id="uom.product_uom_square_meter" model="uom.uom">
<field name="unece_code">MTK</field>
</record>
<record id="uom.product_uom_ton" model="uom.uom">
<field name="unece_code">TNE</field>
</record>
<record id="uom.product_uom_unit" model="uom.uom">
<field name="unece_code">C62</field>
</record>
<record id="uom.product_uom_yard" model="uom.uom">
<field name="unece_code">YRD</field>
</record>
</odoo>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Copyright 2026 Don Kendall
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(env, "account_edi_ubl_cii", "20.0.1.0/noupdate_changes.xml")
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---Models in module 'account_edi_ubl_cii'---
---Fields in module 'account_edi_ubl_cii'---
account_edi_ubl_cii / account.move / has_grouped_lines (boolean) : NEW
account_edi_ubl_cii / account.tax / ubl_cii_tax_exemption_reason (char): NEW
account_edi_ubl_cii / res.partner / peppol_eas (selection) : DEL selection_keys: ['0002', '0007', '0009', '0037', '0060', '0088', '0096', '0097', '0106', '0130', '0135', '0142', '0151', '0183', '0184', '0188', '0190', '0191', '0192', '0193', '0195', '0196', '0198', '0199', '0200', '0201', '0202', '0204', '0208', '0209', '0210', '0211', '0213', '0216', '0218', '0221', '0225', '0230', '0235', '0240', '0244', '0245', '0246', '9910', '9913', '9914', '9915', '9918', '9919', '9920', '9922', '9923', '9924', '9925', '9926', '9927', '9928', '9929', '9930', '9931', '9932', '9933', '9934', '9935', '9936', '9937', '9938', '9939', '9940', '9941', '9942', '9943', '9944', '9945', '9946', '9947', '9948', '9949', '9950', '9951', '9952', '9953', '9955', '9957', '9959', 'AN', 'AQ', 'AS', 'AU', 'EM']
account_edi_ubl_cii / res.partner / peppol_endpoint (char) : DEL
account_edi_ubl_cii / res.partner / routing_endpoint (char) : NEW hasdefault: compute
account_edi_ubl_cii / res.partner / routing_scheme (selection) : NEW selection_keys: ['0002', '0007', '0009', '0037', '0060', '0088', '0096', '0097', '0106', '0130', '0135', '0142', '0151', '0183', '0184', '0188', '0190', '0191', '0192', '0193', '0195', '0196', '0198', '0199', '0200', '0201', '0202', '0204', '0208', '0209', '0210', '0211', '0213', '0216', '0218', '0221', '0225', '0230', '0235', '0240', '0244', '0245', '0246', '9910', '9913', '9914', '9915', '9918', '9919', '9920', '9922', '9923', '9924', '9925', '9926', '9927', '9928', '9929', '9930', '9931', '9932', '9933', '9934', '9935', '9936', '9937', '9938', '9939', '9940', '9941', '9942', '9943', '9944', '9945', '9946', '9947', '9948', '9949', '9950', '9951', '9952', '9953', '9955', '9957', '9959', 'AN', 'AQ', 'AS', 'AU', 'EM'], hasdefault: compute
account_edi_ubl_cii / uom.uom / unece_code (char) : NEW
---XML records in module 'account_edi_ubl_cii'---
ir.config_parameter: account_edi_ubl_cii.disable_pdf_in_xml (noupdate switched)
NEW ir.model.constraint: account_edi_ubl_cii.constraint_uom_uom_unece_code_unique
NEW ir.ui.view: account_edi_ubl_cii.uom_uom_view_form_inherit
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="analytic_plan_projects" model="account.analytic.plan" forcecreate="0">
<field name="name">Project Plan</field>
</record>
</odoo>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Copyright 2026 Don Kendall
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(env, "analytic", "20.0.1.2/noupdate_changes.xml")
27 changes: 27 additions & 0 deletions openupgrade_scripts/scripts/analytic/20.0.1.2/upgrade_analysis.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---Models in module 'analytic'---
---Fields in module 'analytic'---
analytic / account.analytic.distribution.model / analytic_distribution (json) : now required
analytic / account.analytic.line / x_plan1_id (many2one) : NEW relation: account.analytic.account
---XML records in module 'analytic'---
account.analytic.plan: analytic.analytic_plan_projects (noupdate switched)
decimal.precision: analytic.decimal_percentage_analytic (noupdate switched)
NEW ir.access: analytic.access_account_analytic_account
NEW ir.access: analytic.access_account_analytic_applicability
NEW ir.access: analytic.access_account_analytic_distribution_model
NEW ir.access: analytic.access_account_analytic_plan
NEW ir.access: analytic.analytic_applicability_comp_rule
NEW ir.access: analytic.analytic_comp_rule
NEW ir.access: analytic.analytic_distribution_model_comp_rule
NEW ir.access: analytic.analytic_line_analytic
NEW ir.access: analytic.analytic_line_comp_rule
ir.actions.act_window: analytic.account_analytic_line_action (deleted domain)
ir.actions.act_window: analytic.account_analytic_plan_action (deleted domain)
DEL ir.model.access: analytic.access_account_analytic_account
DEL ir.model.access: analytic.access_account_analytic_applicability
DEL ir.model.access: analytic.access_account_analytic_distribution_model
DEL ir.model.access: analytic.access_account_analytic_line
DEL ir.model.access: analytic.access_account_analytic_plan
DEL ir.rule: analytic.analytic_applicability_comp_rule (noupdate)
DEL ir.rule: analytic.analytic_comp_rule (noupdate)
DEL ir.rule: analytic.analytic_distribution_model_comp_rule (noupdate)
DEL ir.rule: analytic.analytic_line_comp_rule (noupdate)
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="mail_template_data_unregistered_users" model="mail.template">
<field name="body_html" type="html">
<t>
Dear <t t-out="object.name or ''">Mitchell Admin</t>,<br/> <br/>
You added the following user(s) to your database but they haven't registered yet:
<ul><t t-foreach="invited_users" t-as="invited_user"><li t-out="invited_user or ''">demo@example.com</li></t></ul>
Follow up with them so they can access your database and start working with you.
<br/><br/>
Have a nice day!<br/>
--<br/>The <t t-out="object.company_id.name or ''">YourCompany</t> Team
</t>
</field>
<field name="email_layout_force_footer" eval="True"/>
<field name="email_layout_force_header" eval="True"/>
<field name="email_layout_xmlid">mail.mail_notification_layout</field>
</record>
<record id="mail_template_user_signup_account_created" model="mail.template">
<field name="body_html" type="html">
<t>
Dear <t t-out="object.name or ''">Marc Demo</t>,<br/><br/>
Your account has been successfully created!<br/>
Your login is <strong><t t-out="object.email or ''">mark.brown23@example.com</t></strong><br/>
To gain access to your account, you can use the following link:
<div style="margin: 32px 0px 32px 0px;"><a t-attf-href="/web/login?auth_login={{object.email}}" t-attf-style="background-color: {{object.company_id.email_secondary_color or '#875A7B'}}; padding: 8px 16px 8px 16px; text-decoration: none; color: {{object.company_id.email_primary_color or '#FFFFFF'}}; border-radius: 5px; font-size:13px;">
Go to My Account
</a></div>
Thanks,<br/>
<t t-if="user.signature"><br/><div>--<br/><t t-out="user.signature or ''">Mitchell Admin</t></div></t>
</t>
</field>
<field name="email_layout_force_footer" eval="True"/>
<field name="email_layout_force_header" eval="True"/>
<field name="email_layout_xmlid">mail.mail_notification_layout</field>
</record>
<record id="portal_set_password_email" model="mail.template">
<field name="body_html" type="html">
<t>
Dear <t t-out="object.name or ''">Marc Demo</t>,<br/> <br/>
Welcome to <t t-out="object.company_id.name">YourCompany</t>'s Portal!<br/><br/>
An account has been created for you with the following login: <t t-out="object.login">demo</t><br/><br/>
Click on the button below to pick a password and activate your account.
<div style="margin: 16px 0px 16px 0px; text-align: center;"><a t-att-href="object.partner_id._get_signup_url()" t-attf-style="display: inline-block; padding: 10px; text-decoration: none; font-size: 12px; background-color: {{object.company_id.email_secondary_color or '#875A7B'}}; color: {{object.company_id.email_primary_color or '#FFFFFF'}}; border-radius: 5px;"><strong>Activate Account</strong></a></div>
<t t-out="ctx.get('welcome_message') or ''">Welcome to our company's portal.</t>
</t>
</field>
<field name="email_layout_force_footer" eval="True"/>
<field name="email_layout_force_header" eval="True"/>
<field name="email_layout_xmlid">mail.mail_notification_layout</field>
</record>
<record id="set_password_email" model="mail.template">
<field name="body_html" type="html">
<t><t t-set="company_name" t-value="object.company_id.name or ''"/><t t-set="website_url" t-value="object.get_base_url()"/>
Hi <t t-out="object.name or ''">Marc Demo</t>,<br/><br/>
<em>This link is valid for <t t-out="(object.env['ir.config_parameter'].sudo().get_int('auth_signup.signup.validity.hours') or 144)//24">link_validity_days</t> days </em><br/>
<b><t t-out="company_name"/></b> uses <a href="https://odoo.com" t-attf-style="color: {{object.company_id.email_secondary_color or '#875A7B'}};">Odoo</a>
to run its business. You have been invited by <b><t t-out="object.create_uid.name or ''">OdooBot</t></b> to connect.
<br/><br/>
Once accepted, you can reconnect through: <br/>
<ul><li>Login: <a t-attf-href="/web/login?login={{ object.email }}" target="_blank" t-out="object.email or ''">mark.brown23@example.com</a></li><li>Link: <a t-att-href="website_url" t-out="website_url or ''">http://yourcompany.odoo.com</a></li></ul>
<br/>
<div style="margin: 16px 0px 16px 0px;"><a t-att-href="object.partner_id._get_signup_url()" t-attf-style="background-color: {{object.company_id.email_secondary_color or '#875A7B'}}; padding: 8px 16px 8px 16px; text-decoration: none; color: {{object.company_id.email_primary_color or '#FFFFFF'}}; border-radius: 5px; font-size:13px;">
Accept invitation
</a></div>
<br/>
Enjoy Odoo!<br/><br/>
--<br/>The <t t-out="company_name"/> Team</t>
</field>
<field name="email_layout_force_footer" eval="True"/>
<field name="email_layout_force_header" eval="True"/>
<field name="email_layout_xmlid">mail.mail_notification_layout</field>
</record>
</odoo>
20 changes: 20 additions & 0 deletions openupgrade_scripts/scripts/auth_signup/20.0.1.0/post-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Copyright 2026 Don Kendall
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(env, "auth_signup", "20.0.1.0/noupdate_changes.xml")
openupgrade.delete_record_translations(
env.cr,
"auth_signup",
[
"mail_template_data_unregistered_users",
"mail_template_user_signup_account_created",
"portal_set_password_email",
"set_password_email",
],
["body_html"],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---Models in module 'auth_signup'---
---Fields in module 'auth_signup'---
auth_signup / res.users / state (selection) : selection_keys added: [inactive] (most likely nothing to do)
---XML records in module 'auth_signup'---
mail.template: auth_signup.mail_template_data_unregistered_users (noupdate switched)
mail.template: auth_signup.mail_template_user_signup_account_created (noupdate switched)
mail.template: auth_signup.portal_set_password_email (noupdate switched)
mail.template: auth_signup.set_password_email (noupdate switched)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---Models in module 'auth_signup'---
---Fields in module 'auth_signup'---
auth_signup / res.users / state (selection) : selection_keys added: [inactive] (most likely nothing to do)
# NOTHING TO DO: keys were added, the existing values stay valid
---XML records in module 'auth_signup'---
mail.template: auth_signup.mail_template_data_unregistered_users (noupdate switched)
mail.template: auth_signup.mail_template_user_signup_account_created (noupdate switched)
mail.template: auth_signup.portal_set_password_email (noupdate switched)
mail.template: auth_signup.set_password_email (noupdate switched)
# DONE: post-migration: load noupdate_changes.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="mail_template_totp_invite" model="mail.template">
<field name="email_layout_xmlid">mail.mail_notification_light</field>
</record>
<record id="mail_template_totp_mail_code" model="mail.template">
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px; font-size: 13px;">
Dear <t t-out="object.partner_id.name or ''"/><br/><br/>
<p>Someone is trying to log in into your account with a new device.</p>
<ul><t t-set="not_available">N/A</t><li>Location: <t t-out="ctx.get('location') or not_available"/></li><li>Device: <t t-out="ctx.get('device') or not_available"/></li><li>Browser: <t t-out="ctx.get('browser') or not_available"/></li><li>IP address: <t t-out="ctx.get('ip') or not_available"/></li></ul>
<p>If this is you, please enter the following code to complete the login:</p>
<t t-set="code_expiration" t-value="object._get_totp_mail_code()"/>
<t t-set="code" t-value="code_expiration[0]"/>
<t t-set="expiration" t-value="code_expiration[1]"/>
<div style="margin: 16px 0px 16px 0px; text-align: center;"><span t-out="code" style="background-color:#faf9fa; border: 1px solid #dad8de; padding: 8px 16px 8px 16px; font-size: 24px; color: #875A7B; border-radius: 5px;"/><p><small>Expires in <t t-out="expiration"/>.</small></p></div>

<p style="margin: 16px 0px 16px 0px;">
If you did NOT initiate this log-in,
you should immediately change your password to ensure account security.
</p>

<p style="margin: 16px 0px 16px 0px;">
We also strongly recommend enabling the two-factor authentication using an authenticator app to help secure your account.
</p>

<p style="margin: 16px 0px 16px 0px; text-align: center;"><a t-att-href="object.get_totp_invite_url()" style="background-color:#875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px;">
Activate my two-factor authentication
</a></p>
</div>
</field>
<field name="email_layout_xmlid">mail.mail_notification_light</field>
</record>
</odoo>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2026 Don Kendall
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(env, "auth_totp_mail", "20.0.1.0/noupdate_changes.xml")
openupgrade.delete_record_translations(
env.cr,
"auth_totp_mail",
["mail_template_totp_mail_code"],
["body_html"],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---Models in module 'auth_totp_mail'---
---Fields in module 'auth_totp_mail'---
---XML records in module 'auth_totp_mail'---
mail.template: auth_totp_mail.mail_template_totp_invite (noupdate switched)
mail.template: auth_totp_mail.mail_template_totp_mail_code (noupdate switched)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---Models in module 'auth_totp_mail'---
---Fields in module 'auth_totp_mail'---
---XML records in module 'auth_totp_mail'---
mail.template: auth_totp_mail.mail_template_totp_invite (noupdate switched)
mail.template: auth_totp_mail.mail_template_totp_mail_code (noupdate switched)
# DONE: post-migration: load noupdate_changes.xml
Loading
Loading