Friday, October 10, 2025
12 changes · saas-18.3
Enhancements to existing features
Tax calculation helpers now handle proportional distribution internally instead of relying on callers to prepare values in advance. This reduces the risk of rounding or sign-related inconsistencies in accounting calculations and makes future maintenance safer.
Original PR description
At the moment, `_distribute_delta_amounts_smoothly` requires the factors to be pre-nomalized. However, normalizing the factors robustly requires more logic than just dividing by the sum of factors, especially if the factors have different signs. This commit moves the normalization into `_distribute_delta_amounts_smoothly` itself meaning the calling code doesn't need to take care of it anymore. task-none
Resolved issues and error corrections
Users visiting an embedded course link that points to a course category instead of a lesson no longer see an error page. The system now redirects them safely to the course homepage, improving reliability for website visitors.
Original PR description
When users try to access a `slide ID` that is not included in `channel_slides_ids`, a traceback occurs. Steps to reproduce: --- - Install `website_slides` module - Go to the Website and click on the…
When users try to access a `slide ID` that is not included in `channel_slides_ids`, a traceback occurs. Steps to reproduce: --- - Install `website_slides` module - Go to the Website and click on the `Courses` menu. - Then go to `/slides/embed/<int:slide_id>` route. (http://localhost:8069/slides/embed/7) - The error will occur. Traceback: --- `ValueError: 7 is not in list` At [1], `slide_content_ids` contains the IDs of `channel content`. However, we are trying to access a slide from the `channel category` in URL. As a result, at [2], when attempting to find the index of the slide in `slide_content_ids`, an error occurs because the slide ID actually belongs to `slide_category_ids` and is not present in `slide_content_ids`. Solution: --- Added a special case for category slides — if the slide is a category, redirect to the channel homepage. [1]- https://github.com/odoo/odoo/blob/482bb19e103de9ddbe1b1942b94b33d3da38889b/addons/website_slides/controllers/main.py#L120 [2]- https://github.com/odoo/odoo/blob/482bb19e103de9ddbe1b1942b94b33d3da38889b/addons/website_slides/controllers/main.py#L121 sentry-6572999628 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225374
This fixes a timing issue that could make a stock barcode test fail randomly when validating an operation right after saving changes. The validation step now waits for the right screen state, improving automated test reliability without changing day-to-day user behavior.
Original PR description
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; -…
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; - We validate the operation. The validation is done by a barcode scan (`OBTVALI`) but since [1](https://github.com/odoo-dev/enterprise/commit/b3a855a870d1861515abaff8683081a39f95558f), barcodes scanned when the user is somewhere else than in the barcode lines view are skipped. With a little bit of bad luck, the tour scans `OBTVALI` while the save from the form view is not finished yet and thus, the scanned barcode is ignored. To reproduce that, run the test `test_scrap_change_source_location` locally in debug mode and add a throttling (eg.: Fast 4G) before to run the tour. To solve the issue, finetune the `validateBarcodeOperation` default trigger, so the error won't happen in this tour and other similar contexts. Runbot build error: [232331](https://runbot.odoo.com/odoo/runbot.build.error/232331) Forward-Port-Of: odoo/enterprise#96542
The Documents app no longer shows an unused tooltip field on document tags, reducing confusion for users managing tag settings. The field remains safely in the background for compatibility in this stable version, but is marked as deprecated for future removal.
Original PR description
The 'tooltip' field was introduced on document tags categories, but after couple of refactors it ended up unused on document tag. As we cannot remove fields from the data model in stable, this commit removes tooltip from the view and marks it as deprecated in the code. opw-4567814 ## Stems from https://github.com/odoo/odoo/pull/210147 https://github.com/odoo/enterprise/pull/79496 # Merge plan - hide `tooltip` in stable - remove `tooltip` in master Forward-Port-Of: odoo/enterprise#86504
This fixes an issue where dragging from text inside a table cell could select the whole cell before all of its content was selected. Users now get more accurate table selection behavior when editing content, reducing accidental cell selections.
Original PR description
Current behavior before PR: - Create an m x n table. - Write some text in a cell. - Put cursor at the end of text. - Try to select cell by moving mouse rightwards. Notice that the cell is selected although the cell content is not fully selected. Desired behavior after PR: This PR backports commit [1] to ensure that single cell is selected only if the cell content is fully selected. [1]: https://github.com/odoo/odoo/commit/09d369e118f622f30149f46702f58c656a3cee04 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230133 Forward-Port-Of: odoo/odoo#230071
This fixes an incorrectly configured error message in the Expenses app. Users should now see the intended warning instead of a broken or confusing error when this situation occurs.
Original PR description
in 953fac5, the new error was not given the proper arguments Forward-Port-Of: odoo/odoo#229488
The point of sale scan button now opens the camera even when an order is selected on the ticket screen. This helps staff scan QR codes without needing extra navigation, reducing friction during checkout or order handling.
Original PR description
Before this commit: = - The scan button did not function when an order was selected. After this commit: = - The scan button now opens the camera to scan a QR code even when an order is selected. Task: 4778136 Forward-Port-Of: odoo/odoo#211875
This update removes an automated test that was causing random failures in Odoo's build checks for version 18 releases. It does not change customer-facing website shop behavior, but helps keep validation runs more reliable for maintenance releases.
Original PR description
Versions -------- - 18.0 - saas-18.2 - saas-18.3 - saas-18.4 Issue ----- The `test_toggle_contact_us_button_visibility` causes random errors in runbot. Cause ----- Unsure, but with commit 26d22fc975e3f removing jQuery from `VariantMixin`, the random error no longer seems to pop up. Solution -------- Remove the test for versions before 19.0. runbot-145473 Forward-Port-Of: odoo/odoo#230728
This fix ensures that pricing rules based on another pricelist must actually specify which pricelist to use. It prevents incorrectly calculated prices when rules are created outside the standard screens, improving pricing reliability across sales and point of sale flows.
Original PR description
Before this commit, only a view-level required attribute ensured that pricelist items with `base=='pricelist'` have a `base_pricelist_id` set. Creating pricelist items from a custom view or the API or the shell could result in missing values for this field, causing `_compute_base_price` to incorrectly assume that `base=='list_price'`` This commit introduces a new constraint ensuring any pricelist whose price is `base`d on an "Other Pricelist" has a value for `base_pricelist_id`. Note: in the views, `base_pricelist_id` is required if `compute_price == 'formula' and base == 'pricelist'` but the first condition is not neeeded because `_onchange_compute_price` sets `base` to `'list_price'` when `compute_price!='formula'` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230438
Social Marketing previews now correctly recognize URLs that include comma-separated values in their parameters. This prevents links from being cut off in post previews, helping users verify and publish accurate social content.
Original PR description
**Steps to reproduce:** - Go to `Social Marketing` app. - Click on `New Post`. - Select Facebook for preview (should not matter). - Write a message with an URL which have comma-separated parameters. (e.g 'TEST URL https://example.be:8080/path/res-123/ext/?param1=v1,v2,v3') - URL is cut on the first comma in the preview. **Issue:** URL regex did not match URLs containing comma-separated query parameters, causing them to be truncated. **Fix:** Updated the regex to include commas. opw-5042131 Forward-Port-Of: odoo/enterprise#94220
Cashiers can now type password digits directly on a keyboard when the number entry popup is open, instead of being limited to the on-screen buttons. This makes cashier switching and password entry faster and more convenient in Point of Sale.
Original PR description
Before this commit, when the NumberPopup was open (for example, when entering the cashier password), the keyboard input was ignored because the overlay manager blocked all keyboard events while any popup was active. As a result, it was only possible to use the on-screen number buttons. After this commit, the keyboard input is allowed when a NumberPopup is open, enabling users to type the password directly using the keyboard. opw-5152235 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230626
Fixes a problem that could show an error after users validated the last available batch payment during bank reconciliation. When no batch payments remain, the screen now switches to matching existing entries so accounting users can continue their workflow without interruption.
Original PR description
Issue: Error is raised when there are no batch payments found in `saveSearchState()` Purpose of this PR: We display the match existing entries if there are no batch payments found. Steps to Reproduce on Runbot: install accounting make a batch payment reconcile single batch payment with statement line while on Batch Payments Tab opw-4807527 Forward-Port-Of: odoo/enterprise#87388