Thursday, July 17, 2025
16 changes · 18.0
New functionality added to Odoo
This change adds a new startup script intended to make launching Odoo easier. It may help users or administrators start the system more consistently, but the submitted description does not provide enough detail to confirm broader business impact.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Enhancements to existing features
Nilvera API request logs are now simplified into a consistent single-line format that is easier to read and analyze in monitoring tools. The logs no longer include request parameters or payloads, reducing the risk of exposing sensitive information while preserving key performance details.
Original PR description
This change streamlines the Nilvera API request logs to a single-line format, making them easier to parse and visualize in tools like Grafana. The new format includes only the HTTP method, URL, response status, and request duration, removing parameters and payloads to avoid leaking sensitive information and to ensure user privacy. No task Forward-Port-Of: odoo/odoo#218045
Resolved issues and error corrections
This fix stops hidden Turnstile verification data from being added to sales order notes when customers complete the extra checkout step. It keeps checkout records cleaner and avoids confusing, unnecessary technical text appearing in order details.
Original PR description
Scenario:
- enable extra step in website ecommerce
- enable turnstile
- do the checkout process until after "extra step" step
- go check the sale order
Result: there is a big "turnstile_captcha: {1000 character hash}" that is
logged each time the customer filled the "extra step" step.
Cause:
turnstile if enabled is activated for all website_form and will add a
turnstile_captcha parameter.
For other website.form, the captcha is removed from the params when
calling:
request.env['ir.http']._verify_request_recaptcha_token('website_form')
but the custom route /website/form/shop.sale.order doesn't do that so
the captcha is logged in note.
Fix:
Recaptcha is already disabled on the extra_step with the class:
s_website_form_no_recaptcha, so it makes sense to just have the
same behavior for turnstile.
opw-4934132
Forward-Port-Of: odoo/odoo#219269Miscellaneous changes
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214036
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214036
The Demo payment provider now receives the same default outstanding account setup as other online payment providers. This makes test payment flows more consistent and reduces manual configuration during demonstrations or testing.
Original PR description
Purpose: Set default outstanding account for `Demo` payment provider as well,
as it is a test version of an Online Payment Provider.
Followup on commit: https://github.com/odoo/odoo/pull/213554/commits/24f06192f4c6f747d2096603b6895481483138ab
task-4907646This fixes a wording mismatch in website sale email checks so the text uses lowercase "order" as it appears in the email body. The change helps keep automated validation aligned with the actual customer-facing email content and prevents avoidable build failures.
Original PR description
in the email body it is 'order' not 'Order' , check the error in the runbot build error log build_error-223173 Forward-Port-Of: odoo/odoo#219388
Several country accounting templates now classify bank suspense accounts as current assets instead of current liabilities. This keeps balance sheet totals from being overstated while bank statement lines are unreconciled and prevents issues when reselecting suspense accounts on bank journals.
Original PR description
Since V14, suspense accounts are classified as current assets. They were previously classified as current liabilities while the liquidity accounts were current assets. It would artificially inflates the current assets and current liabilities as long as the bank statements lines weren't reconciled. We noticed that the belgian default suspense account is still classified as current liability. On the bank Journal, there is a domain so only current assets type can be set as default suspense account. There is no issue at the package installation but if the suspense account is removed from the journal, it can't be added back afterwards. task-4829826 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change gives a long-running website test more time to complete because embedded page checks can load slowly in some setups. It helps reduce false test failures, improving confidence in release validation without changing customer-facing behavior.
Original PR description
## Version 18.0+ ## Issue Task 4141409 introduced long tests to simulate complete flow. As this test relies on many iframe checks and these iframes being slow to load, the test time limit is reached. The test fails on Single App and Community but not with Enterprise might be related to performances linked to modules interactions. runbot-223225
Survey invitation emails now correctly use the subject line set on the related email template. This ensures businesses can customize survey invitation messaging consistently instead of having it overwritten by the default survey subject.
Original PR description
Description of the issue/feature this PR addresses: When a user updates the subject on a template used for a survey, it does not pull the subject from the template. It uses the default subject that…
Description of the issue/feature this PR addresses:
When a user updates the subject on a template used for a survey, it does not pull the subject from the template. It uses the default subject that is used when computing the subject for a survey email that is sent out. This bug came as a part of [this commit](https://github.com/odoo/odoo/commit/220e0271bf43e914950b8ae0d4a1cca5f3ea6d9c).
I've used an elif condition over here as opposed to calling super which was being done before so that the default of Participate to X survey still becomes the default subject.
opw-4654411
Steps to reproduce on runbot:
1. Go to mail templates and search for Survey
2. Open the Survey: Invite template
3. Update the subject on this template
4. Open the Surveys app and select any survey
5. Click on Share and then enable send by email
6. The subject here will default to "Participate to {Survey Name}"
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#211153This fix restores missing company setup screens for Greek electronic invoicing that were accidentally left out during earlier changes. It helps prevent disruption for businesses using Greece EDI features and keeps the stable version consistent.
Original PR description
On the previous GR EDI improvements PR, the import for the company XML views was forgotten to be put back after a refactor. This causes issues, as removing views is problematic on stable version. task-4781479
This change ensures an existing view-related test is included when localization checks run on their own. It helps catch localization-related errors earlier in automated testing, reducing the chance of issues appearing after changes are merged.
Original PR description
This test is not run during the l10n standalone tests leading to error in nightly that are not detected before the merge. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Automation rules that update records now safely do nothing when no update path has been configured. This prevents scheduled automation from failing with an error, helping CRM and other automated workflows continue running reliably.
Original PR description
When executing an automation rule with an "Update Record" action, if no update path is configured, an error occurs. **Steps to reproduce:** 1. Install the **CRM** and **Automation Rules** modules. 2.…
When executing an automation rule with an "Update Record" action, if no update path is configured, an error occurs.
**Steps to reproduce:**
1. Install the **CRM** and **Automation Rules** modules.
2. Create a new **automation rule**:
- Model = Lead, Trigger = After Creation
3. Add an **action**. Type = Update Record (do not configure the update path)
(Tip: select another action type and switch back to reset the path.)
5. Create a new lead.
6. Run the scheduled action: Automation Rules: check and execute.
**Error:**
```
AttributeError: 'bool' object has no attribute 'split'
....
ValueError: AttributeError("'bool' object has no attribute 'split'") while
evaluating 'model._cron_process_time_based_actions()'
```
**Cause:**
In `_traverse_path`, the `update_path` is expected to be a string for `.split()`, but if not configured, it is `False`, leading to the traceback. - [1]
[1] - https://github.com/odoo/odoo/blob/5842c9f4821772fe44cfe7244162edec1ffff88e/odoo/addons/base/models/ir_actions.py#L701
**Fix:**
This commit ensures that no action is performed if the update path is not defined, avoiding the traceback.
sentry-6722927119The messaging “Seen by” popup no longer shows a potentially misleading date for when someone last viewed a channel. This avoids confusion where older messages could appear to have been seen recently, even when that was not accurate.
Original PR description
Before this commit, the “Seen by” tooltip displayed each member’s channel-level `last_seen_dt`, which for older messages could misleadingly be interpreted as “seen today” even if the user hadn’t actually viewed it recently. Furthermore `last_seen_dt` isn’t kept up to date client-side (and only gets fetched on reload), thus causing more confusion. This commit removes the date from the “Seen by” popup. Tracking a true per-message “seen at” timestamp for every user would require significantly more complex modeling and will be revisited later if necessary. task-4630168
This update keeps appointment, planning, leave planning, and WhatsApp-related tests working reliably on newer Python and Debian versions. It reduces false failures caused by date handling and formatting differences, helping ensure smoother upgrades and ongoing quality checks.
Original PR description
Forward-Port-Of: odoo/enterprise#90352
Manual discounts now carry over when optional products are added to a subscription order. This prevents user-entered discounts from being replaced by automatic pricing rules, helping quotes and orders stay accurate.
Original PR description
**Current Behavior:** Manual discounts are not retained when adding optional products to the order. **Steps to Reproduce:** 1) Install the sale_subscription module. 2) Create a subscription with a…
**Current Behavior:** Manual discounts are not retained when adding optional products to the order. **Steps to Reproduce:** 1) Install the sale_subscription module. 2) Create a subscription with a recurring plan. 3) Add a product to the Optional Products section. 4) Manually set a discount on the optional product. 5) Click on the Add to Order Lines (cart) button. 6) A new SOL is created. **Issue:** The newly created SOL does not retain the manually set discount. **Cause:** - When the user clicks the Add to Order Lines button, the `add_option_to_order` method is triggered. This method creates a new sale order line (SOL) using values from `_get_values_to_add_to_order`. - In the current implementation, this method is overridden for subscription orders to exclude the discount value from the returned data. https://github.com/odoo/enterprise/blob/42d829ea6e6a98f251cfffc8fb67b5320a5ada12/sale_subscription/models/sale_order_option.py#L17-L21 - This forces a recomputation of the discount based on pricelist rules, which unintentionally removes any manually set discount. **Solution:** - Only remove the discount value from the returned data and trigger recomputation if there is no manual discount. - This ensures that any user-defined discount is preserved when creating the order line. opw-4840735 Forward-Port-Of: odoo/enterprise#89381
Fix crash when autofilling columns which where created by autofill. Task: 4719884 Forward-Port-Of: odoo/enterprise#86439 Forward-Port-Of: odoo/enterprise#83314
Original PR description
Fix crash when autofilling columns which where created by autofill. Task: 4719884 Forward-Port-Of: odoo/enterprise#86439 Forward-Port-Of: odoo/enterprise#83314