Wednesday, July 23, 2025
16 changes · 18.0
New functionality added to Odoo
Adds test coverage for website forms when a submitted field name ends with a backslash. This helps prevent crashes caused by newer request-parsing behavior and keeps website form submissions reliable for unusual inputs.
Original PR description
In that case Werkzeug 3.0.4 and later will drop the entire name (following pallets/werkzeug#2939, cf pallets/werkzeug#3032), we'll end up with a field named `None` on the python side, and then…
In that case Werkzeug 3.0.4 and later will drop the entire name (following pallets/werkzeug#2939, cf pallets/werkzeug#3032), we'll end up with a field named `None` on the python side, and then dispatching will blow up because `None` is not a valid kwarg. The exact semantics of that case are unclear (see also curl/curl#7789), my reading is that [RFC 7578][1] specifies percent-encoding and thus that should be used when encoding and decoding, and `\` should be irrelevant because it's neither `%` nor `"` so it's not a metacharacter for multipart/form-data headers. However the [whatwg living standard][2] rejects full blown percent-encoding, and instead uses percent-encoding on just a highly restricted set of inputs (which includes neither `\` nor `%`). And while it seems like we should be able to ignore RFC 6266 (the content-disposition header) who's to say that there are no real-world deployments which follow its strictures? Meh. Backport from #219478 as I apparently missed this bit when updating #219300 [1]: https://datatracker.ietf.org/doc/html/rfc7578#section-2 [2]: https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data
Enhancements to existing features
Website search results now avoid an unnecessary extra count step when the existing results already provide the needed total. This improves performance for pages such as blogs and forums without changing what users see.
Original PR description
Issue ----- Currently, we call `model.search()` and `model.search_count()` back-to-back, the second of which is unnecessary if there is no limit on the query. Solution ----- If we have no limit, directly take the length of the previously returned results to avoid an extra query. opw-4882609 Forward-Port-Of: odoo/odoo#219949 Forward-Port-Of: odoo/odoo#218252
Resolved issues and error corrections
This update makes an automated test for mail discussion sub-channel search more dependable by avoiding timing issues with elements that load later. It helps reduce false test failures in slower environments, supporting smoother validation and release processes.
Original PR description
The `test_discuss_sub_channel_search` tour was flaky due to unreliable trigger selectors depending on lazy-loaded elements. This commit updates the tour to use a stable trigger (`.o-mail-SubChannelList`) and moves the detailed presence checks inside the `run()` steps with proper awaits. This makes the test more robust against timing issues and lazy loading delays, especially on slower CI environments. [runbot-181951](https://runbot.odoo.com/odoo/error/181951) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Code cleanup and technical improvements
The accounting reconciliation code now uses a shared dedicated check for early payment discounts instead of repeating the same logic. This reduces maintenance risk and helps keep enterprise accounting behavior aligned with the community version.
Original PR description
Supersedes: - https://github.com/odoo/enterprise/pull/88374 (fix branch name to align with community PR) This is repeated code from what already exists in odoo community. OPW-4895365 See: [odoo/odoo#215615](https://github.com/odoo/odoo/pull/215615)
The e-invoicing setup now recognizes newly added Peppol participant identifier codes, including relevant updates for France, the United Arab Emirates, and Latvia. This helps businesses exchange electronic invoices with more partners using the latest supported standards.
Original PR description
Add new relevant codes from the Peppol code list. In particular new codes for FR, AE and LV. Source: https://docs.peppol.eu/edelivery/codelists/v9.2/Peppol%20Code%20Lists%20-%20Participant%20identifier%20schemes%20v9.2.json opw-4932979 Forward-Port-Of: odoo/odoo#218419
This update makes repair-related sale order lines easier to adapt when repair move lines create them. It helps businesses tailor repair billing or sales details through customization without changing the core repair workflow.
Original PR description
Current code does not allow to influence the sale order line created. If you think it is best to create a _prepare method for the values please let me know and I will propose that change. Thank you.
This update prevents peer-to-peer call tests from running when no network is available, since those tests require a local network to work correctly. It helps avoid false test failures in offline or restricted environments, improving development and quality assurance reliability without changing the user experience.
Original PR description
This commit adds a skip to peerToPeer tests for when there is no network as the webRTC API needs to have at least a local network to generate ICE candidates.
This change removes an unnecessary test dependency in the live chat discussion test suite. It helps keep automated checks simpler and more reliable without changing customer-facing behavior.
Original PR description
remove the dependency on `TestPortal` from `test_discuss_full`, as it is not needed. [runbot-226366](https://runbot.odoo.com/odoo/error/226366) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an error that occurred when users tried to show invisible fields on candidate records in Studio. This lets HR and recruitment teams inspect and customize candidate forms without interruption.
Original PR description
To reproduce: ============== 1/ Go to the Candidate form view 2/ Pick any candidate 3/ Open Studio 4/ Click on "Show Invisible Elements" Problem: ========= A traceback occurs because the `hr.candidate` model was not included in the supported models list for showing invisible elements. Solution: ========== Add `hr.candidate` to the supported models to avoid the traceback and properly show invisible elements in Studio. opw-4886130 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change fixes an internal point-of-sale loyalty test so it can be retried reliably after failures. It helps keep automated validation stable and reduces misleading test errors during development, with no expected impact on end users.
Original PR description
Tests in this file are all sorts of fucked up in ways which break retrying, but this one is problematic because it *also* fails on the reg, with a misleading error as on retrying the `setUp` fails because it tries to update `product_b`, which this test overrode (so the record is rolled back, and trying to update it fails with a `MissingError`). The error is completely unforced as the test just wants to have two products in the DB with different taxes, we don't even need local variables. runbot-226343
This fixes a template rendering issue where some content could be skipped when a conditional section appeared alongside a comment. It helps ensure pages and documents generated from templates display the expected information consistently.
Original PR description
Forward-Port-Of: odoo/odoo#212159
Fixed a display issue on eCommerce product pages where the review section button could show the wrong expanded or collapsed state after saving changes in the website editor. This keeps the page controls consistent and avoids confusion for website managers editing product pages.
Original PR description
Problem:
When the product review section is uncollapsed in the web editor and the page is saved, the content becomes collapsed again, but the toggle button incorrectly shows the uncollapsed ("-") state.
Cause:
The `collapsed` class is removed from `.o_product_page_reviews_title` when it is editable. On saving, it renders without the `collapsed` class, so the content appears collapsed while the toggle button remains in the incorrect state.
Solution:
Ensure the `collapsed` class is applied to
`.o_product_page_reviews_title` when the widget starts, keeping the button and content in sync.
Steps to reproduce:
- Enable product ratings
- Open the web editor
- Click "+" to uncollapse the review section
- Save -> The content is collapsed but the toggle button still shows "-"
opw-4843145
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update adjusts an internal automated test for Point of Sale sales flows so it uses the correct test startup process. It helps keep validation runs reliable, reducing false failures during release checks without changing customer-facing behavior.
Original PR description
Replace `start_tour` by `start_pos_tour`. Trying to fix runbot error 230078. opw-4819708
Vietnam localization now allows VietQR generation when the city field is empty but a valid state such as Ha Noi or Hai Phong is provided. This prevents unnecessary payment QR errors and better matches VietQR requirements where merchant city is not always mandatory.
Original PR description
* Problem: Using Vietnam localisation, leave city empty and just input state_id as Hà Nội or Hải Phòng, try to use vietqr code -> Raise error missing city * Solution: Just like https://github.com/odoo/odoo/pull/218984 we should check for state too although according to VietQR document, merchant city is not required see (https://vietqr.net/portal-service/download/documents/QR_Format_T&C_v1.0_VN_092021.pdf and search for term 'Merchant City') 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 Forward-Port-Of: odoo/odoo#219566
This fixes an error that could appear when users or integrations opened signature request records that were not marked as shared. Non-shared requests now safely show no share link instead of causing a system traceback, improving reliability for staff and connected systems.
Original PR description
### Issue Commit [58425a0](https://github.com/odoo/enterprise/commit/58425a0022c79f2c45f23fdd5a5476d8c20a887e) introduced a new field `share_link` in `sign.request` that gets computed for requests…
### Issue Commit [58425a0](https://github.com/odoo/enterprise/commit/58425a0022c79f2c45f23fdd5a5476d8c20a887e) introduced a new field `share_link` in `sign.request` that gets computed for requests that are in the 'shared' state. However this compute method fails for requests not in the 'shared' state leading to a traceback error. This commit fixes it by setting the default as False for the sign.request records that do not have state='shared' so the traceback error is handled. This can be reproduced in v17 and above by: 1. Open any sign.request record that isn't in the shared state 2. Enable Developer Mode 3. Using the debug icon, click on view record data The traceback will be visible here which mentions that the compute method failed to assign It can also be re-produced by using an xml-rpc / json-rpc ORM call to search_read the sign.request records that does not have state = 'shared' ### Before https://github.com/user-attachments/assets/24c07f2a-2398-44b4-8969-30abb576876a ### After https://github.com/user-attachments/assets/e92b1212-5405-4b98-ba41-c81b2ac547d7 [opw-4864159](https://www.odoo.com/odoo/project/49/tasks/4864159) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#90576
An empty, unused file in the Documents app was removed after it had been accidentally left behind during earlier cleanup work. This has no expected impact on users, but helps keep the product codebase tidy and reduces maintenance confusion.
Original PR description
During sharepocalypse, the file was emptied but not deleted, it's not used anymore. Introduced in https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e (18.0). Already removed in https://github.com/odoo/enterprise/commit/bb196623f348795536368287eb1a6e1ac5f5bc44 (saas-18.3).