Tuesday, October 21, 2025
29 changes · 19.0
Enhancements to existing features
Payment terminals will no longer be automatically registered for event handling because they already manage their own events. This reduces unnecessary background handling and helps keep IoT payment terminal behavior clearer and more reliable.
Original PR description
As for printers that can send event whenever they want, payment terminals handle event themselves. We then removed auto event registering for payment terminals. odoo/enterprise#97617 Forward-Port-Of: odoo/odoo#232282
This update applies automated code quality checks and formatting to the website-related modules. It helps keep the website builder and blog code more consistent and easier to maintain, with no expected direct change for end users.
Original PR description
[IMP] web: whitelist website and website blog for the linter The goal of this commit is to enable tooling (eslint, prettier) on the `website` and `website_blog` modules. task-5110180 ------------------------------------------------------------------------------------------------------------------------ [LINT] html_builder, *: lint website related files *: html_editor, website, website_blog The goal of this commit is to lint the website related js files. task-5110180
This update tidies how the Stripe expense integration handles return responses after a user action. It is a small maintenance improvement that helps keep the expense card flow clearer and easier to maintain without changing core business behavior.
Resolved issues and error corrections
App icons created in Web Studio are now automatically resized before being saved. This prevents oversized images from taking unnecessary space in caches and the database, helping keep requests lighter and performance more consistent.
Original PR description
Before this commit, the IconCreator images were sent as is in their full size. Downstream it was problematic because apps' icons were bigger than necessary, bloating the different caches, the database, and the request. After this commit, icon are resized to a max of 64x64 pixels. Forward-Port-Of: odoo/enterprise#97626 Forward-Port-Of: odoo/enterprise#94480
Code cleanup and technical improvements
The VoIP app code and related tests were updated to follow standard linting rules. This is an internal maintenance change that helps keep the codebase consistent and easier to maintain, with no expected change to user workflows.
Documentation and clarification updates
Acsone, represented by Tobias Zehntner, has been added to the contributor agreement records. This confirms the legal paperwork needed for contributions is in place and keeps the project’s contributor list up to date.
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#232278
This fixes missing payroll group settings on certain Swiss payroll employee fields. It helps ensure payroll information is shown and managed consistently for the correct employee payroll group, reducing configuration errors.
Original PR description
The payroll group was missing on some payroll fields. Related runbot issue: https://runbot.odoo.com/odoo/runbot.build.error/233445 task-5179821 Forward-Port-Of: odoo/enterprise#97611
Opening the Helpdesk ticket list when there are no tickets now works correctly instead of crashing. This improves stability for teams starting with an empty ticket queue or after clearing all tickets.
Original PR description
When accessing the Helpdesk ticket list view with zero tickets, the view previously crashed due to improper handling of folded sample data. This commit ensures that sample data folding does not trigger errors when the view is empty, improving overall stability. Steps to reproduce: 1. Navigate to Helpdesk > Teams > Tickets. 2. Ensure there are no tickets. 3. Switch to list view. Task-4971510 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226253
New user signatures now place the user's name in a layout block that avoids unwanted extra spacing. This prevents line breaks in the editor from duplicating paragraph spacing, making default signatures look cleaner for new, demo, and admin users; existing user signatures are not changed automatically.
Original PR description
Prior to this commit, the default signature for users was their name wrapped in a `p`. This is not what we want, because a `HTMLParagraphElement` natively has a margin-bottom, and when a user creates a newline from a paragraph in the HTML Editor, the paragraph is cloned. After this commit: the user name is wrapped in a `div` instead. This does not update existing users signatures. To switch to a `div`, they will have to select the desired lines, and change their type from "Paragraph" to "Normal". Demo and admin users are updated too, because lxml `document_fromstring` would wrap text content in a `p` during record creation. task-5149570
Demo user signatures for Laurie Poiret and Maggie Davidson now use a layout that avoids unwanted extra spacing. This reduces manual cleanup when using or adapting these sample records.
Original PR description
Adapt signatures for Laurie Poiret and Maggie Davidson so that they are wrapped in a `<div>` instead of a `<p>`, because lxml `document_fromstring` would wrap text content in a `p` during record creation. Ideally all user data records should do that for their signature field. This commit only updates the main ones. `p` in a signature is not desired because it has a native margin-bottom, and the user has to change it to a `div` in order not to have it. Making `div` the default container for signatures simplifies that tedious process. task-5149570
This fixes an eLearning display issue where highlighted text in course articles appeared correctly in normal view but disappeared in fullscreen mode. Learners now see the same formatted content in both viewing experiences, improving consistency and readability.
Original PR description
**Steps to reproduce:** - Go to eLearning course on the website - Edit an article - Add the highlighting effect on the text - Save the changes - The text is properly displayed in normal article - Go to the fullscreen version - The highlighting is not present in this version **Issue:** This is an ordering issue caused by the dynamic rendering of fullscreen slides. When in normal mode, the content is initialized and then the `TextHighlight` widget is started. But the rendering of the slides in fullscreen mode is delayed and occurs after the widget is applied. **Fix:** Recreate and restart the widget on `_renderSlide` in the `slides_course_fullscreen_player`` opw-4978798 related: https://github.com/odoo/odoo/commit/f64c9f27f1a9106bc009ad2f696845f2c5c58066 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232209 Forward-Port-Of: odoo/odoo#225150
Spacing was improved for event website menu options shown in debug mode, making labels and fields easier to match. This reduces confusion for administrators configuring event pages and event types.
Original PR description
The PR fixes the display of the fields displayed when the debug mode is activated and used to show buttons in the menu of event website pages. Previously, it was difficult to determine what were the labels of the fields. To make it clearer, the spaces between the label-field couples have been increased. Task-4750239 Forward-Port-Of: odoo/odoo#214135
Fixed an issue that could cause an error when refreshing appointment availability for bookings assigned to a staff member. This improves reliability for users managing appointment slots and prevents interruptions during scheduling.
Original PR description
This commit fixes an issue where the refresh with appointment based on staff user was raising a traceback as it also tried to compute the max capacity possible. Related commit 3cca7e47ab58f8a7d4e9196dbf60f7068348216b task-5118860 Forward-Port-Of: odoo/enterprise#97634 Forward-Port-Of: odoo/enterprise#95862
A previously disabled automated test for website editor animation options has been re-enabled after its timing issue was resolved. This helps ensure hover-based animation settings remain reliable without changing the user-facing website experience.
Original PR description
In commit 22c4ecff46d34a37549dfa3feda8cfe12cf00407, the test was disabled because it had non-deterministic failures It was failing because the preview (that was made by the hover before the click) took sometimes long enough that `waitForEndOfOperation` was executed before preview finished, so it only waited for the end of the preview, not the end of the commit made by the click. Thus the `waitDomUpdated` that followed did not wait for the update caused by the commit (thus had nothing to wait for). And the assertions failed as the sidebar was not updated yet. In order to wait enough, the helper `waitSidebarUpdated` has been introduced in commit 143c40bdb7eac35126d51ac85fb89e37ecb75f13. In this commit, we just un-skip the test (which was updated to use that helper) task-4367641 Forward-Port-Of: odoo/odoo#226814
This fixes a test setup issue where a website form tour could stall because the editor component was not loaded in the test bundle. The change makes the test helper check that the editor is available before applying its setup, improving reliability of automated validation without changing user-facing behavior.
Original PR description
Steps to reproduce
==================
Run the test test_contactus_form_email_stay_dynamic
The ready "odoo.isTourReady('...')" code was always falsy
Cause of the issue
==================
website_form_editor.js import @html_editor/../tests/tours/helpers/editor
it itself import @html_editor/editor
Since the editor is not part of the bundle when loading the tour, nothing is loaded
Solution
========
As it not that easy to include the editor in the web.assets_tests bundle,
we check if the editor module is present before patching it.
When actually running the tour, it will be present.
runbot-231561
Forward-Port-Of: odoo/odoo#230595This update fixes inconsistencies in employee payroll fields and makes payroll API tests independent from demo data. It helps improve build reliability and reduces the risk of payroll-related validation issues in Australian localization workflows.
Original PR description
- Remove test dependency on demo data - Fix inconsistency on employee fields runbot-231643 runbot-230983
Picking operation reports now show products grouped in the expected location order, such as stock shelves or warehouse areas. This makes printed or viewed operation details easier for warehouse teams to follow and reduces confusion during receipts, deliveries, and other stock movements.
Original PR description
Steps to reproduce: - Create an operation (Receipt, Delivery, etc..) - Add move lines with different locations (WH/Stock, WH/Stock/Shelf 1, etc..) Issue: Products are not sorted based on picking operation's location. Iterations on the picking operations were on the move_line directly. In 18.2, it was changed to iterate on the move itself, but the sorting was disregarded therefore it was added again with some modifications to cope with the new iterations. The change was made on this PR: See https://github.com/odoo/odoo/pull/152280 Task: 4570203 (Unreleated but addressed on this task) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Canned responses included in the Mail app setup and demo data are now shared with the appropriate user group. This ensures users can see and use the default OdooBot responses as intended.
Original PR description
**Description of the issue this PR addresses:** Modify Canned Response master and demo data **Current behavior before PR:** Before this PR, canned responses created by OdooBot in master and demo data were not shared effectively, so they were not visible to anyone. **Desired behavior after PR is merged:** This PR ensures canned responses created by OdooBot are shared properly, by assigning a user group, ensuring that everyone can see them. task-[5069111](https://www.odoo.com/odoo/project/1519/tasks/5069111) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231976 Forward-Port-Of: odoo/odoo#228006
This fix restores missing timing information in IoT driver events so event retrieval works reliably again. It prevents errors that could interrupt real-time device updates and helps keep connected operations running smoothly.
Original PR description
In odoo/odoo#232282, `time` was removed from registered events, leading to `KeyError` when trying to fetch longpolling events. Forward-Port-Of: odoo/odoo#232452
Point of Sale settings now show the EPOS printer test button whenever EPOS printing is enabled, even before an IP address has been saved. If no IP address is set, users receive a clear notification prompting them to add it, reducing confusion during printer setup.
Original PR description
Currently it is only visible if the epos ip is set, but if the user 1) Opens the settings 2) Sets the epos ip 3) Doesn't defocus and clicks on "Save" He never gets to see the test button. This PR makes the "test" button for epos printers always visible in the PoS settings if the "epos" setting is activated. If the ip is not set it displays a notification asking to set it
This fixes a flaky automated test by ensuring each breadcrumb navigation step waits for the expected page label before continuing. It helps avoid false test failures caused by timing differences on slower or busier machines, improving confidence in release validation.
Original PR description
Depending on scheduling / machine load, it's possible for the "Back to the sale order" step to run before the "Back to the task" step's effect have completed, and thus trigger on the exact same breadcrumb, leading to *not* returning to the SO and on to not finding the `order_line` field and a failure on the next step. Fix this specific instance of breadcrumb confusion by checking that the breadcrumb label is the one we expect as precondition. https://runbot.odoo.com/odoo/runbot.build.error/231766
Users can now turn debug mode on or off from the command palette while using the Documents app. This ensures the app uses the latest navigation setting instead of an outdated value, so the URL updates correctly.
Original PR description
Issue: In the documents app toggling debug mode through the command palette (ctrl-k) does not work. Manually editing the URL works as expected. Cause: A patch on `router.stateToUrl` for the documents app rebuilds the URL to create clean, shareable links. When doing so, it attempted to preserve the debug status by referencing the global `odoo.debug`. This global object did not reflect client-side state changes. The command palette correctly provides the intended future state to the router. The patch was ignoring this incoming state and using the outdated global value, causing the generated URL to be incorrect. Solution: Modify the patch to use the `state` argument provided to `stateToUrl`, which contains the correct, up-to-date information for the navigation. Task-5095056 Forward-Port-Of: odoo/enterprise#96275
Fixes an issue where changing the shape of a GIF image in the website/editor could trigger an error instead of applying or safely skipping the change. This improves reliability for users editing pages with animated images.
Original PR description
Steps to reproduce: =================== 1- Add an image of type GIF. 2- Try to change its shape. → Traceback occurs. Cause: ====== The `process` image function can return a callback function when GIF…
Steps to reproduce:
===================
1- Add an image of type GIF.
2- Try to change its shape.
→ Traceback occurs.
Cause:
======
The `process` image function can return a callback function when GIF transformation must be skipped:
https://github.com/odoo/odoo/blob/7f95cc6094b914c57b6e36ad072ebb2c9c3b324b/addons/html_editor/static/src/main/media/image_post_process_plugin.js#L78
It can also return an object `{ url, newDataset }`: https://github.com/odoo/odoo/blob/7f95cc6094b914c57b6e36ad072ebb2c9c3b324b/addons/html_editor/static/src/main/media/image_post_process_plugin.js#L224
Only the object case was handled:
https://github.com/odoo/odoo/blob/7f95cc6094b914c57b6e36ad072ebb2c9c3b324b/addons/html_editor/static/src/main/media/image_post_process_plugin.js#L231
As a result, when a function was returned, the image source was set to `null`, because `processed` was a function and didn't have a `url` or `newDataset`, causing a crash here:
https://github.com/odoo/odoo/blob/22c83301337e40699b11621053af627f5bfd505b/addons/html_builder/static/src/plugins/image/image_shape_option_plugin.js#L412
Solution:
=========
Ensure that only the `url` and `dataset` are returned, since the same
function is called elsewhere expecting those values.
opw-5137667
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#231370Fixed an issue in Discuss where inviting someone from a self chat could fail if the related conversation included guest members. This keeps the invitation flow working reliably for users collaborating with guests.
Original PR description
Steps to reproduce: 1. Open Discuss 2. Create a channel/chat with at least one guest member 3. Open self chat 4. Open the `Invite People` 5. Select any user from the invitation list => An error is thrown Cause: To display the `Invite` button text, the code filters thread correspondents by `partner_id`, but guest members have no `partner_id`, resulting in a crash. This PR fixes this issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue in the mail discussion tools where additional related data could be handled incorrectly unless provided in one specific format. The change makes the system more reliable when loading or displaying mail-related discussion information.
Original PR description
Follow up of https://github.com/odoo/odoo/pull/232266 extra_fields is not necessarily a list, any format supported by _format_fields should be supported.
Users with Belgian reports installed no longer see access errors when the Accountant app is not installed. The affected company fields are now hidden unless users have the right accounting access, preventing disruption in daily use.
Original PR description
This commit fixes the access right problem for `l10n_be_region_id` and `l10n_be_company_type_id` when `accountant` is not installed. When `accountant` is not installed and users have `l10n_be_reports` installed, an access error was raised when these fields were accessed. A group `account.group_account_user` is added to these fields such that they become invisible when when `accountant` is not installed. task-5156687
Product image lookup scheduling was simplified to avoid duplicate or inefficient background jobs. This makes the process of fetching product images more reliable while keeping overall scheduled task creation efficient across the system.
Original PR description
Remove `_check_image_cron_is_not_already_triggered` because: - It doesn't work in batch mode due to `self.cron_id.id`. - It increases the cost of creating a cron trigger because the reference lookup (`ref`) makes at least one extra query. (We want to keep cron trigger creation efficient since it is used everywhere.) - Because of this constraint, there is an extra commit in `_trigger_fetch_images_cron` that is inefficient and error-prone, serving no purpose. Keep the intended effect of the constraint by removing the existing cron trigger before the new one is created, ensuring the time offset is respected. Forward-Port-Of: odoo/enterprise#97411
The web module test for resizable panels was updated to handle a small browser measurement difference introduced in Chrome 140. This keeps automated testing stable without changing how users experience the application.
Original PR description
In Chrome 140, a fix [^0] has been applied regarding the `offsetParent` property with a fixed position element. Due to this fix, a resizable panel's test failed by 1px. As this difference doesn't have a real functional impact, we adapted the test to accept both the pre/post fix values. Note: that it is also related to a clarification [^1] in the CSS spec [^2]. [^0]: https://chromium-review.googlesource.com/c/chromium/src/+/6774502 [^1]: https://github.com/w3c/csswg-drafts/issues/12352 [^2]: https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetparent Forward-Port-Of: odoo/odoo#232458
Fixed an issue where website pages could remain shifted to the side after hiding a sidebar-style header. This keeps page content properly aligned and avoids a confusing visual layout problem for website editors and visitors.
Original PR description
Steps to reproduce the issue: - In edit mode, change the header template to use the "Sidebar" header (=> since it is a sidebar, the page content is shifted to the right) - Go to the theme tab and toggle the "Show Header" option so the header is removed => Bug: the page content is still shifted as if the sidebar were still present. This happens because the page still has padding-left for the header, although there's no header. task-5131064 Forward-Port-Of: odoo/odoo#231487 Forward-Port-Of: odoo/odoo#229860