Wednesday, October 22, 2025
17 changes · 18.0
Enhancements to existing features
This change improves how sales orders find their related projects by adding a database index. It can reduce delays when working with sales orders linked to many projects, without changing user-facing behavior.
Original PR description
This commit adds an index on `project.project. reinvoiced_sale_order_id`, because the search in `sale.order. _compute_project_ids` might not be selective enough based on `sale_order_id`, which is a related field using `sale_line_id`. Since it's related, there is only a where clause on `sale_line_id IS NOT NULL`, which might not be selective enough and leads to a Seq. Scan of the `project_project` table. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Saudi e-invoices now preserve the negative amount on tax-exempt invoice lines instead of sending it as a positive value. This prevents avoidable ZATCA validation warnings and helps ensure invoices with refunds, discounts, or negative exempt lines are reported accurately.
Original PR description
Adding a negative line with 0% tax on an invoice will make the validation succeed with a warning Steps to reproduce (with a SA company setup): - Create an invoice - Add a negative line with 0% tax - Confirm and send to Zatca Issue: The following warning can be observed in chatter [202] BR-O-08 : [BR-O-08]-In a VAT breakdown (BG-23) where the VAT category code (BT-118) is ' Not subject to VAT' the VAT category taxable amount (BT-116) shall equal the sum of Invoice line net amounts (BT-131) minus the sum of Document level allowance amounts (BT-92) plus the sum of Document level charge amounts (BT-99) where the VAT category codes (BT-151, BT-95, BT-102) are 'Not subject to VAT'. This occurs because in the e-invoice, the tax base is transmitted in absolute value opw-5072577 Forward-Port-Of: odoo/odoo#231737
Code cleanup and technical improvements
This change reorganizes how inventory accounting prepares product revaluation data. It makes the process easier for custom extensions to adapt without changing standard behavior for everyday users.
Original PR description
This allows to make it hookable by custom addons This was split from https://github.com/odoo/odoo/pull/160527 cc @pfertyk @sys-odoo @Whenrow --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228204
Miscellaneous changes
**Issue** When an invoice is issued in a currency different from the company currency, the VIES summary report incorrectly displays the total value as if it were already converted. This results in incorrect totals in the report. **Steps to Reproduce:** 1. Install the Accounting app and the l10n_cz_reports_2025 module. 2. Go to Accounting > Customers > Invoices. 3. Create a new invoice using a currency other than CZK. 4. Add a product with Code Supply set to Gold and Transaction Code set
Original PR description
**Issue** When an invoice is issued in a currency different from the company currency, the VIES summary report incorrectly displays the total value as if it were already converted. This results in…
**Issue** When an invoice is issued in a currency different from the company currency, the VIES summary report incorrectly displays the total value as if it were already converted. This results in incorrect totals in the report. **Steps to Reproduce:** 1. Install the Accounting app and the l10n_cz_reports_2025 module. 2. Go to Accounting > Customers > Invoices. 3. Create a new invoice using a currency other than CZK. 4. Add a product with Code Supply set to Gold and Transaction Code set to 0 Goods. Confirm the invoice. 5. Navigate to Accounting > Reporting > VIES Summary Report. 6. Observe that the total value is not correctly converted to the company currency. **Expected Behavior:** The total amounts in the VIES summary report should be correctly converted to the company currency if the invoice was created in a foreign currency. **Actual Behavior:** Amounts are displayed in the invoice currency without conversion, leading to incorrect totals when the invoice currency differs from the company currency. **Root Cause** The report fetches raw invoice data without handling currency conversion. Specifically, it retrieves the unconverted total value, even when the invoice currency differs from the company’s. **Fix** To solve the issue the balance field is used, which correctly reflects the value in the company currency. opw-4688638 Forward-Port-Of: odoo/enterprise#82978
This fix prevents module updates from failing when default tracking sources or mediums have been renamed or duplicated by users. It helps keep CRM live chat and UTM tracking data stable during upgrades without disrupting existing customizations.
Original PR description
Steps to reproduce: 1) Install utm module. 2) In link tracker edit utm named LinkedIn or any and add another with same name. 3) update the module. We get an error that utm_medium or utm_source should be unique. create goes through `_get_unique_names` method so its only a problem when updating the record. 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#202567
The HTML editor toolbar no longer appears when users select non-editable content inside an editable area, such as protected report elements. This reduces confusion and prevents users from seeing editing options that do not apply, while still allowing toolbar editing for icons.
Original PR description
Before this commit: The toolbar appeared even when selecting a contenteditable false element within the editable area. For instance, while editing a report, clicking on a non-editable element like a delivery slip would still show the toolbar. After this commit: The toolbar is hidden when the selection is within contenteditable false elements or consists only such elements. Exception: The toolbar remains visible for icons, as they are editable by the toolbar. Tests are added. task-4309925 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The blog sidebar's "Add some" tag link now opens the correct backend tag management page instead of sending users to the homepage. This helps website editors quickly add or manage blog tags without hitting a broken navigation path.
Original PR description
Scenario:
- go on frontend to a blog post without tag
- edit the page and in Customize enable the sidebar
- click on "Add some" link in tag section
Result: the link is like /odoo/action-/1?menu_id=451 and redirects to
the homepage.
Cause: there is no action variable set in the view from 16.0 up to master,
not having the action worked in URL that contained the model and record id
before 18.0 update (9cf0b8c256589ccd71b01bd28bd2e595848ff45e) but it
doesn't work with /action-{action_id}/{res_id}.
Fix: using the model route directly (that is what we would be redirected
if we used the old URL path).
opw-4706629
opw-4783643Long mailing list names now stay within their designated area instead of covering nearby fields. This keeps the Marketing mailing list view readable and easier to use when lists have lengthy names.
Original PR description
Issue: When you create a long name for your maling list, the name overflows over the other fields in the view. Repro: Go to marketing -> mailing lists -> create a fairly long name -> notice name overflows in the view. Cause: Small bootstrap issue, name field not limited to it's container. Fix: Added a simple w-100 to limit the field to 100% of it's container. opw-5153270 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change makes an automated mail test more consistent by setting a visual border value explicitly. It helps prevent environment-specific differences from causing build failures, improving reliability for future updates.
Original PR description
Problem: Runbot build fails due to different resulting `border-color` values. Cause: The default `border-color` can change depending on the environment, leading to non-deterministic behavior. Solution: Specify the `border-color` explicitly to ensure consistent results. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Spanish point-of-sale receipts now correctly display the company's state name instead of empty brackets. This avoids confusing or incomplete receipt details for businesses using simplified invoices in Spain.
Original PR description
**Steps to reproduce:** - Set a spanish company, set the state - Set the "Simplified Invoice" journal in the settings - Go to PoS and make a purchase - On the receipt, empty brackets are shown where the state should be **Why the fix:** Before this commit, we checked that the company had a state set, and if it had, we displayed *state_id[1]* between brackets. Even if the state_id existed, this is not the correct structure for the state_id, so *state_id[1]* did not exist, and we displayed only the brackets. We now display the correct state name, still between brackets. opw-5098212
The website editor now correctly applies speed changes made with the slider for animated background shapes. This restores expected visual customization behavior when users design pages with animated snippets.
Original PR description
Steps to reproduce: - Drop a snippet - Add a background shape (e.g. Rainy 05) - Use the slider to change the speed - Nothing happens This commit is adapting `CSS_ANIMATION_RULE_REGEX` as it was too restrictive, the space after the colon is now optional. task-5170549
This change fixes how Odoo's web test tools handle custom responses during automated testing. It helps ensure tests behave as intended when a developer supplies a complete response, reducing misleading test results and improving development reliability.
Original PR description
Before this commit, when an 'onRpc' handler would return a 'Response' object, it would still be wrapped in a JSON-RPC payload (under the 'result' key) if the "content-type" header specified that it was a JSON-RPC. However, if a 'Response' object is returned by the handler, it usually means that the response should be that object as-is, as it was created with the desired final parameters. This commit ensures that 'Response' values are returned as they are, instead of being wrapped in a JSON-RPC payload object. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an Accounting issue where grouping customer invoices by sent status showed every invoice in both the Sent and Not Sent groups. Users can now rely on this grouping to accurately review which invoices have or have not been sent.
Original PR description
### Issue: The groups "Sent" and "Not Sent" display all the invoices. ### Steps to reproduce: - Go in Accounting > Customer > Invoices - Create a custom GroupBy with "Sent" - Unfold the groups: all invoices appear in each group ### Cause: `web_read_group` returns the groups with their length and the domain corresponding. When unfolding `web_search_read` uses the given domain to get the records to display. Here the issue comes from the domain returned, it contains `['move_sent_values', '=', 'sent']`, but `move_sent_values` is a computed field that doesn't have a `_search` method so the domain doesn't filter on this field. ### Solution: Add the method `_search_move_sent_values` to search on `is_move_sent`. opw-5164650
This fixes a formatting issue where page numbers could split across two lines in folder-style report footers when using the Montserrat font. Keeping the page number on one line improves the professional appearance and readability of generated reports.
Original PR description
The folder layout is using the same footer than the `external_layout_standard` but when using Montserrat, the page number wraps in 2 lines on the folder layout. It's missing a `text-nowrap` class. task-4942402 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The blog archive preview test no longer depends on the English name for October. This prevents the test from failing when the website is used in another language, improving reliability for multilingual sites.
Original PR description
Before this commit the blog_tags_with_date tour tried to select the October option by label. In other locales the month label differs and the tour could not find it, so the tour aborted at that step. Steps to reproduce: - Change the website language to one where October has another name. - Run the blog_tags_with_date preview tour. The tour now selects the first month option by index, independent of labels. runbot-233321
A typo in the Web Studio field name was corrected from "Multine" to "Multiline". This improves clarity for users configuring views and helps avoid confusion when selecting field types.
Original PR description
This commit fixes a typo in one of the newFields name: 'Multine' -> 'Multiline' Forward-Port-Of: odoo/enterprise#97713
Fixed a visual issue in the timesheet month view where text could spill into the timer and total/footer areas when users increased text size and scrolled horizontally. This keeps timesheet information easier to read and avoids confusing overlapping content.
Original PR description
Steps to reproduce: - Open timesheets and change to Month scale. - Increase text size a little bit. - Scroll to the right side Issue: - You can see runover text being visible in timer button cell of Total row and Footer row. Reason: - It is due to z-index problem as z-index-* is deprecated from https://github.com/odoo/odoo/pull/165568 (from saas-17.4+). Fix: - Replace it with Bootstrap z-index class notated as z-*(-1 to 3) task-4949182