Daily updates from Odoo
Tuesday, October 21, 2025
103 changes
18 changes
Resolved issues and error corrections
App icons created in Studio are now automatically resized before being saved. This prevents oversized images from increasing database size, cache usage, and request payloads, helping keep the system more efficient without changing the user workflow.
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
This update improves the spacing of menu-related settings shown in debug mode for event website pages. The clearer layout makes it easier for administrators to match each label with its field when configuring event page menu tabs.
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
Changing the shape of a GIF image in the editor no longer causes an error. This improves reliability for users editing website or HTML content 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-prThis fixes an issue where IoT event updates could fail because required timing information was missing. Businesses using IoT-connected devices should see more reliable event delivery and fewer interruptions when the system checks for new device activity.
Original PR description
In odoo/odoo#232282, `time` was removed from registered events, leading to `KeyError` when trying to fetch longpolling events.
Fixed an issue where required matrix questions in surveys could fail if their description also included a table. This ensures respondents can complete affected surveys without errors, improving reliability for survey creators and participants.
Original PR description
A conflict occurs if a matrix question is set to "Mandatory answer" (questionRequired = True) and a table is also added to its description. The issue is that when the system evaluates a required matrix, it gets the subQuestionsIds by looking for the first table within the question's wrapper. If a table exists in the description, the system incorrectly tries to retrieve the IDs from that table. This action throws a traceback because the descriptive table does not contain any sub-question data. This commit fixes the issue by being more specific when looking for the table containing the subQuestionsIds. It adds a specific class to this table and uses it in the selector. An attribute selector, like 'table[data-sub-questions]', could also have been used as an alternative. opw-4931881 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229909
This update fixes an automated website test related to hiding the sidebar header. It helps ensure the website editing experience remains reliable in the saas-18.4 version without changing functionality for end users.
Original PR description
Tour added in that [commit], was previously failing. This commit aims to fix it. Original commit hasn't been merged in `19.0` yet, so this fix applies only to `saas-18.4` . [commit]: https://github.com/odoo/odoo/commit/a5455bf27cb21762d79636cb7dd133c88441bccb runbot-233438
OdooBot's predefined canned responses are now shared with the appropriate user group in standard and demo data. This ensures users can actually see and use these ready-made replies, improving consistency and saving time in conversations.
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
The Documents app now correctly switches debug mode when users use the command palette shortcut. This prevents confusion where the shortcut appeared not to work, while keeping shared document links accurate.
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
This change removes a browser option that was causing point of sale connections to IoT devices to fail in some older Chrome versions. The option was unnecessary for Odoo's secure device communication, so removing it improves compatibility without changing the user workflow.
Original PR description
This reverts commit 1a934ae which added the `"targetAddressSpace": local` option to IoT fetch requests. This is because of two reasons: 1. It caused errors on older versions of Chrome that implemented the obsoleted 'Private Network Access' standard. 2. It was not actually required in the first place, it is only needed in situations where a HTTP resource is accessed from HTTPS using a domain that resolves to a local IP. In Odoo we only ever do this for HTTPS -> HTTPS requests, where it works automatically. task-5157145 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232378 Forward-Port-Of: odoo/odoo#232110
This change removes a browser request option that caused errors in some older Chrome versions when connecting to IoT devices. IoT and point-of-sale hardware connections should continue to work as before, with fewer compatibility issues for affected users.
Original PR description
This reverts commit 6d09dc6 which added the `"targetAddressSpace": local` option to IoT fetch requests. This is because of two reasons: 1. It caused errors on older versions of Chrome that implemented the obsoleted 'Private Network Access' standard. 2. It was not actually required in the first place, it is only needed in situations where a HTTP resource is accessed from HTTPS using a domain that resolves to a local IP. In Odoo we only ever do this for HTTPS -> HTTPS requests, where it works automatically. task-5157145 Forward-Port-Of: odoo/enterprise#97679 Forward-Port-Of: odoo/enterprise#97500
Inventory transfers now list each source document only once, even when several items come from the same receipt or origin. This prevents duplicated references in transfer records, making warehouse documents clearer and easier to review.
Original PR description
### Behavior: #### Current: During the assignment of a picking, if several of its moves have the same origin, it will repeat that origin in its own origin. #### Expected: Only have one time each…
### Behavior: #### Current: During the assignment of a picking, if several of its moves have the same origin, it will repeat that origin in its own origin. #### Expected: Only have one time each origin. ### Steps to reproduce: From Inventory * Enable two step transfer for the warehouse From Barcode * create and validate new receipts with "Product A" * create and validate a second new receipts with "Product A" and other products From Inventory/Operations/Transfers/Receipts * Open the corresponding receipts * In "source Document" (Field: origin, Model : stock.picking) we can see that the reference from second receipts is repeated. ### Observation: In the case of already existing origins it will not duplicate them but it's missing if several item comes from the same origin. https://github.com/odoo/odoo/commit/0caa44ca97d9d197811a03ad2ff227df68d4437a#diff-55c6314416a6a400da6acd5018d161a55eeeb0e3008fec8828121e3dd12be0ebR1410 opw-4970159 Forward-Port-Of: odoo/odoo#223251
This fix makes product image fetching more reliable by replacing a fragile scheduling check with a safer cleanup step before creating a new scheduled task. It also reduces unnecessary processing when scheduled tasks are created, helping keep background operations 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
This fix removes an outdated requirement that an eCommerce website must be publicly accessible for Google Merchant Center product feeds. Feeds now use access tokens instead, reducing unnecessary setup restrictions while keeping authorized access in place.
Original PR description
Initially, a constraint was added to ensure the eCommerce site was publicly accessible, allowing Google to access the feed without requiring authentication. However, the updated version of GMC no longer relies on this constraint. Instead, it uses an access token to authorize feed access. A previous attempt ([^1]) to remove this constraint targeted the wrong model. This commit corrects that mistake. [^1]: https://github.com/odoo/odoo/pull/225536 Forward-Port-Of: odoo/odoo#232477
Shipping notification emails for Gelato orders now include the correct tracking link when an order ships in a single parcel. This prevents customers from being sent to a broken tracking page and helps them follow deliveries more reliably.
Original PR description
After receiving the shipping webhook from Gelato, we send a shipping notification with the tracking information to the customer. This commit fix the tracking url for single parcel, which was pointing to an inexistant url. opw-4637331 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232468 Forward-Port-Of: odoo/odoo#232071
This fixes an automated Payroll test that was failing because newer Chrome versions report text styling slightly differently. The change keeps payroll testing reliable without changing business features or user workflows.
Original PR description
Since either 140 or 141[^0] Chrome uses compact serialization rules for text-decoration, as a result of w3c/csswg-drafts#12486. This was merged [on August 12th][CL-6824265] and Chrome 139 was cut on August 5 so couldn't have had this change. The new serialization rule means values which can be ommitted from a shorthand (default or fallback) should be, so the default `text-decoration-line` and a `text-decoration-color` matching the `color` won't be serialized in `text-decoration` anymore. Instead of matching the shorthand, match the actual stored properties. [^0]: 140 was not deployed on chrome next so it may or may not have been broken then [CL-6824265]: https://chromium-review.googlesource.com/c/chromium/src/+/6824265 Note: this commit is a backport of odoo/enterprise@eddbdb2d9593b331c5ef641b7747ec61c736d84d Forward-Port-Of: odoo/enterprise#97719
A web interface test was adjusted to account for a minor Chrome browser behavior change that can shift a resizable panel measurement by one pixel. This keeps automated checks reliable without changing how users experience the product.
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
Code cleanup and technical improvements
This update applies automated linting cleanup to the VoIP codebase, improving consistency and maintainability without changing business functionality. It helps reduce future development risk in calling, softphone, and related test areas.
Documentation and clarification updates
The contributor agreement records were updated to include Acsone and Tobias Zehntner. This keeps Odoo's legal contributor documentation current and confirms contribution rights for future work.
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
16 changes
Resolved issues and error corrections
Payroll now checks the correct document template separately for each payslip, even when no template is available in some cases. This helps prevent incorrect or missing payroll document generation when processing multiple payslips.
Original PR description
Since the function that will return the template can return None in some cases, we need to check for each payslip what is the template.
This fix improves the spacing between labels and fields in event website menu settings shown in debug mode. It makes it easier for administrators to understand which option belongs to which label when configuring event page menus.
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
This change removes a browser-specific setting from local IoT device requests in Point of Sale because it caused errors in older Chrome versions and was not needed for Odoo's secure connections. It helps keep POS hardware and customer display interactions working consistently without changing business workflows.
Original PR description
This reverts commit 1a934ae which added the `"targetAddressSpace": local` option to IoT fetch requests. This is because of two reasons: 1. It caused errors on older versions of Chrome that implemented the obsoleted 'Private Network Access' standard. 2. It was not actually required in the first place, it is only needed in situations where a HTTP resource is accessed from HTTPS using a domain that resolves to a local IP. In Odoo we only ever do this for HTTPS -> HTTPS requests, where it works automatically. task-5157145 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232289 Forward-Port-Of: odoo/odoo#232110
This update removes an unnecessary browser request setting used when connecting Odoo Point of Sale to local IoT hardware. It helps avoid connection errors in older Chrome versions while keeping existing secure local device communication working as expected.
Original PR description
This reverts commit 6d09dc6 which added the `"targetAddressSpace": local` option to IoT fetch requests. This is because of two reasons: 1. It caused errors on older versions of Chrome that implemented the obsoleted 'Private Network Access' standard. 2. It was not actually required in the first place, it is only needed in situations where a HTTP resource is accessed from HTTPS using a domain that resolves to a local IP. In Odoo we only ever do this for HTTPS -> HTTPS requests, where it works automatically. task-5157145 Forward-Port-Of: odoo/enterprise#97624 Forward-Port-Of: odoo/enterprise#97500
The Documents app now correctly responds when users turn debug mode on or off from the command palette. This keeps navigation links accurate and avoids confusion when switching modes without manually editing the URL.
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
The Accounting journal dashboard cards now have a slightly taller minimum height. This makes cards without graphs better align with those that include graphs, creating a cleaner and less confusing dashboard layout.
Original PR description
The min height for the kanban journal dashboard in Accounting makes it looks currently like this is an unwanted behavior. This PR slightly increase it to match the cards having graphs on it. task-4792156 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
Fixed an issue where required matrix questions in surveys could fail if their description included a table. This prevents errors for respondents and ensures surveys with richer formatting continue to work correctly.
Original PR description
A conflict occurs if a matrix question is set to "Mandatory answer" (questionRequired = True) and a table is also added to its description. The issue is that when the system evaluates a required matrix, it gets the subQuestionsIds by looking for the first table within the question's wrapper. If a table exists in the description, the system incorrectly tries to retrieve the IDs from that table. This action throws a traceback because the descriptive table does not contain any sub-question data. This commit fixes the issue by being more specific when looking for the table containing the subQuestionsIds. It adds a specific class to this table and uses it in the selector. An attribute selector, like 'table[data-sub-questions]', could also have been used as an alternative. opw-4931881 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229909
This fixes duplicate screenshots and videos being created when automated tests fail. It makes failure evidence more reliable and avoids extra processing or crashes in the test system, helping development teams diagnose issues faster.
Original PR description
Because both `_handle_console` and `_handle_exception` take a screenshot and save the screencast before setting the test to failure, both operations are duplicated when `_wait_code_ok`…
Because both `_handle_console` and `_handle_exception` take a screenshot and save the screencast before setting the test to failure, both operations are duplicated when `_wait_code_ok` unconditionally does the same on test failure. Do a bit of rejiggering to fix things up: - in `_wait_code_ok`, only take a screenshot for general errors, under the assumption that the log/exception code already took a screenshot for other cases (with a possibly better timing) - only save the screencast in `_wait_code_ok`, saving the screencast later should be no issue, we just might get a few more frames Also fix a screencast issue revealed by this double saving: in case where the screencast was not saved fast enough by the first trigger, `_wait_code_ok` would try to save it again and blow up as the screencast info would be half destroyed already. And finally remove the saving of screencast frames to base64 files, save them as PNG directly: writing out the files costs orders of magnitude more than base64 decoding, so we can decode upfront and avoid a bunch of faffing about, and that way if the entire thing crashes before we can `save` the screencast we do get all the frames as readable PNGs.
This fix removes an outdated requirement that the online store be publicly accessible for Google Merchant Center product feeds. Feeds now rely on access tokens, so businesses can keep the intended access setup while still allowing authorized Google feed retrieval.
Original PR description
Initially, a constraint was added to ensure the eCommerce site was publicly accessible, allowing Google to access the feed without requiring authentication. However, the updated version of GMC no longer relies on this constraint. Instead, it uses an access token to authorize feed access. A previous attempt ([^1]) to remove this constraint targeted the wrong model. This commit corrects that mistake. [^1]: https://github.com/odoo/odoo/pull/225536
OdooBot's preconfigured canned responses are now shared with the appropriate user group, making them visible to users as intended. This fixes an issue where default and demo canned responses existed but could not be seen or used by anyone.
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
Shipping notification emails for Gelato orders now use the correct tracking link when an order has a single parcel. This prevents customers from being sent to a broken tracking page and improves the post-purchase delivery experience.
Original PR description
After receiving the shipping webhook from Gelato, we send a shipping notification with the tracking information to the customer. This commit fix the tracking url for single parcel, which was pointing to an inexistant url. opw-4637331 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232395 Forward-Port-Of: odoo/odoo#232071
This fix prevents an error when settling invoices in Point of Sale if a customer's related company record was not fully loaded. Staff can now complete invoice settlement more reliably without being blocked by missing background customer data.
Original PR description
Before this commit, it was possible that commercial_partner_id was not loaded, which caused an error when settling an invoice. This commit fixes the issue by avoiding the need to load the full partner record. Since only the partner ID is required to load the account move, it is now read directly from the raw data, which already includes the ID. opw-5112883
The product barcode lookup process now avoids duplicate scheduled image-fetch jobs by replacing any existing job before creating a new one. This keeps background scheduling efficient and reduces the risk of unnecessary processing or timing errors.
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
Odoo now checks only actual email messages when deciding whether to block a sender for sending too many repeated messages. This prevents normal users from being incorrectly blocked because other internal message types were counted as emails.
Original PR description
When detecting loops with _detect_loop_sender if the count of these messages exceeds the LOOP_THRESHOLD, the next email from that user is blocked, even if the number of new emails alone hasn't yet crossed the threshold due to mail messages that are not email triggering the loop detection. This happens because it searches for messages in the mail.message model that share the same model name and author irrespective of the message type. To correct this, the function's search criteria must be modified to explicitly filter for messages where the message_type is set to 'email'. opw-5122962 Forward-Port-Of: odoo/odoo#232026
Code cleanup and technical improvements
This update applies standard code quality tooling across the VoIP area without changing customer-facing functionality. It helps keep the calling features easier to maintain and reduces the risk of future issues from inconsistent code style.
Documentation and clarification updates
The contributor list has been updated to include Acsone and Tobias Zehntner after confirming the required contributor agreement. This keeps Odoo's contribution records current for legal and compliance purposes.
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
4 changes
Resolved issues and error corrections
This fix improves how product image fetch jobs are scheduled by replacing a fragile duplicate-check mechanism with a safer cleanup before scheduling. It reduces unnecessary processing overhead and helps ensure image fetch timing works as intended, especially when multiple records are handled at once.
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.
This fixes an issue where users could not turn debug mode on or off from the command palette while using the Documents app. The app now uses the latest navigation state when building links, so the debug setting updates correctly without requiring manual URL changes.
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
This fixes an internal payroll test that failed because newer Chrome versions changed how certain text styling details are reported. The change keeps payroll test checks reliable without affecting payroll features or the user experience.
Original PR description
Since either 140 or 141[^0] Chrome uses compact serialization rules for text-decoration, as a result of w3c/csswg-drafts#12486. This was merged [on August 12th][CL-6824265] and Chrome 139 was cut on August 5 so couldn't have had this change. The new serialization rule means values which can be ommitted from a shorthand (default or fallback) should be, so the default `text-decoration-line` and a `text-decoration-color` matching the `color` won't be serialized in `text-decoration` anymore. Instead of matching the shorthand, match the actual stored properties. [^0]: 140 was not deployed on chrome next so it may or may not have been broken then [CL-6824265]: https://chromium-review.googlesource.com/c/chromium/src/+/6824265 Note: this commit is a backport of odoo/enterprise@eddbdb2d9593b331c5ef641b7747ec61c736d84d
Code cleanup and technical improvements
This update applies automated code quality cleanup to the VoIP area without changing business functionality. It helps keep the calling interface and related tests easier to maintain, reducing the risk of future issues.
12 changes
Enhancements to existing features
The appraisal form now gives employee and manager feedback sections more usable space. This makes longer appraisal comments easier to read and reduces wasted space from the previous scrollbar styling.
Original PR description
Make the Employee/Manager feedback areas feel roomier and remove the visual inset on their scrollbars. This improves readability of long appraisals and avoids wasted space. task-5176134
Users can now copy alias email addresses directly from relevant configuration screens. This makes it faster and less error-prone to share or reuse incoming email aliases for helpdesk, PLM, and quality workflows.
Original PR description
This PR made the following changes: - Add the alias_email field to the view, using the `CopyClipboardButton` widget to enable copying the alias email to the clipboard. - Added the custom CSS using the `copy_alias_email` class to hide the copy icon provided by the `CopyClipboardButton`. - Also, make sure that alias_name, alias_domain_id, and the copy button appear on the same line. - Also removed some classes from the field and div, and used row col instead of them to align fields properly in a single line. Task-4812573
Resolved issues and error corrections
Icons created in Studio are now reduced to a maximum of 64 by 64 pixels before being saved. This keeps app icons lightweight, reducing storage, cache size, and request overhead without changing how users create icons.
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
The spreadsheet sale management field sync now handles undo and redo actions without crashing. This improves reliability for users editing linked sales spreadsheet data and reviewing version history.
Original PR description
Fix an issue where field sync would crash when used with UNDO/REDO. Task: 4854879 Forward-Port-Of: odoo/enterprise#97424 Forward-Port-Of: odoo/enterprise#92883
This fix adds the missing payroll group setting to several Swiss payroll employee fields. It helps ensure those payroll details are correctly organized and displayed, reducing configuration or validation issues during payroll processing.
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
Updated an HR Payroll automated test so it remains reliable with newer Chrome browser behavior. This helps keep payroll development checks stable and avoids false test failures unrelated to product functionality.
Original PR description
Since either 140 or 141[^0] Chrome uses compact serialization rules for text-decoration, as a result of w3c/csswg-drafts#12486. This was merged [on August 12th][CL-6824265] and Chrome 139 was cut on August 5 so couldn't have had this change. The new serialization rule means values which can be ommitted from a shorthand (default or fallback) should be, so the default `text-decoration-line` and a `text-decoration-color` matching the `color` won't be serialized in `text-decoration` anymore. Instead of matching the shorthand, match the actual stored properties. [^0]: 140 was not deployed on chrome next so it may or may not have been broken then [CL-6824265]: https://chromium-review.googlesource.com/c/chromium/src/+/6824265 Forward-Port-Of: odoo/enterprise#97667
This fixes automated test behavior by skipping an Early Payment Discount scenario when the full accounting app is not installed. It prevents false test failures in batch payment checks, helping keep validation results reliable without changing business functionality.
Original PR description
Some new tests would test for the application of Early Payment Discounts in the bank reconciliation widget, but without the accountant module installed, that doesn't make much sense as a payment with move is automatically created for those cases, rendering the test useless. runbot error 233509
This update prevents batch payment tests from failing when the Accountant module is not installed. It improves test reliability across different system setups without changing business features or user workflows.
Original PR description
Issue: some tests may fail when "accountant" module is not installed. Solution: Handle the case when "accountant" module is not installed separately as it is done in previous versions. runbot-231231,231238
The Documents app now correctly updates debug mode when users use the command palette shortcut. This avoids confusion where the URL did not reflect the requested mode unless edited manually.
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
This update adjusts demo employee signatures so names use a cleaner layout by default. It avoids extra spacing that previously appeared in signatures, reducing manual cleanup for users setting up or reviewing these 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 Forward-Port-Of: odoo/enterprise#97229
Code cleanup and technical improvements
VoIP and WhatsApp now rely on a shared stored user reference instead of separate user lookups. This keeps the underlying communication features aligned with the main platform and reduces maintenance risk without changing the visible user experience.
Original PR description
Enterprise counter-part. task-5173021 https://github.com/odoo/odoo/pull/232173
This update applies automated linting cleanup across the VoIP interface and related tests. It helps keep the codebase consistent and easier to maintain without changing day-to-day user workflows.
28 changes
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
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
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
17 changes
Enhancements to existing features
This update lets account report expressions be copied along with account reports. It makes duplicating and adapting financial reports easier, reducing manual setup work and helping maintain consistency.
Original PR description
This commit is a backport of [this commit](https://github.com/odoo/odoo/commit/9c0baadc4bb58a75d17ef6963a5acd5cf6c34036) initially targetting saas-18.1 which enables the copy of account report expressions. --- task-4728887 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
All Finnish tax report lines now have assigned codes. This helps export templates consistently identify each line, reducing the risk of missing or mismatched data in tax report exports.
Original PR description
The aim of this commit is adding code for all the tax report lines. Before, some lines didn't have any code set on it, now all these lines have a code. The change is motivated by the tax report export where we use the code as key in the dict given to the export template. task-5135868 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update makes the Latin American check payment search view point explicitly to the correct internal view. It reduces the chance of configuration conflicts when other modules contain similarly named views, helping ensure consistent behavior.
Original PR description
Description of the Issue/Feature this PR Addresses: To eliminate the risk of XML ID collisions. Using an unqualified external ID in a ref attribute can cause Odoo to load a view from an unintended module if the XML IDs are duplicated. Current Behavior Before PR: The search view uses an unqualified XML ID in the ref attribute, which relies on global resolution and can resolve to the wrong view. Desired Behavior After PR is Merged: The ref attribute uses the fully qualified external ID `l10n_latam_check.view_account_payment_search.` This ensures deterministic view loading by explicitly linking the reference to the correct view within the l10n_latam_check module. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes and improves Odoo's internal Hoot testing tools and related web test infrastructure. It helps developers identify failed tests and server errors more clearly, reducing the risk of undetected issues while keeping changes limited to the testing ecosystem.
Original PR description
## Pull Request HOOT 38 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now recognizes Shopee orders that have been delivered but are still waiting for the buyer to confirm receipt. This prevents those delivery orders from being incorrectly shown as errors, giving teams a more accurate view of fulfillment status.
Original PR description
When the delivery order is delivered but not yet confirmed by the buyer, an error state is set in the delivery order. 'TO_CONFIRM_RECEIVE' should be included in the delivery status. It refers that the package is delivered but not confirmed by the buyer. It should not be regarded as an error state in Odoo. task_id: 4965896
The test framework now detects processes that are still running after a test finishes and logs them during server shutdown. This helps prevent automated test runs from hanging and improves reliability for release validation.
Original PR description
In some case a process could remain aive at the end of a tests In addition to possible race condition, this can also cause a program to remain stuck at the end of the tests. This commit proposes to - catch all remaining processes at the end of a base case. - log a message if a process is found at the shutdown of the server. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231942
A small internal adjustment was made to the Restaurant Point of Sale area to make a related enterprise change easier and safer to apply. This does not change day-to-day user behavior, but helps ensure the linked update can target the right screen element reliably.
Original PR description
In this commit: - We are adding a class to use XPath on the element in the related PR. related PR: - https://github.com/odoo/enterprise/pull/82282 task-4657597
Email loop checks now count only actual email messages, preventing users from being blocked because of unrelated internal messages. This helps ensure legitimate incoming emails continue to be processed unless they truly exceed the loop threshold.
Original PR description
When detecting loops with _detect_loop_sender if the count of these messages exceeds the LOOP_THRESHOLD, the next email from that user is blocked, even if the number of new emails alone hasn't yet crossed the threshold due to mail messages that are not email triggering the loop detection. This happens because it searches for messages in the mail.message model that share the same model name and author irrespective of the message type. To correct this, the function's search criteria must be modified to explicitly filter for messages where the message_type is set to 'email'. opw-5122962
Fixed an issue where mandatory matrix questions in surveys could crash if their description included a table. Surveys now correctly identify the matrix answer data, allowing users to complete these questions without errors.
Original PR description
A conflict occurs if a matrix question is set to "Mandatory answer" (questionRequired = True) and a table is also added to its description. The issue is that when the system evaluates a required matrix, it gets the subQuestionsIds by looking for the first table within the question's wrapper. If a table exists in the description, the system incorrectly tries to retrieve the IDs from that table. This action throws a traceback because the descriptive table does not contain any sub-question data. This commit fixes the issue by being more specific when looking for the table containing the subQuestionsIds. It adds a specific class to this table and uses it in the selector. An attribute selector, like 'table[data-sub-questions]', could also have been used as an alternative. opw-4931881 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229909
SEPA Direct Debit mandate emails for sending and expiration now respect each customer's preferred language. This avoids English-only messages and improves communication clarity for international customers.
Original PR description
Sepa Direct Debit mandate: Sending and expiration emails were sent in English regardless of the customers' language. opw-4876792
This update adjusts an internal web interface test so it remains valid after a small browser behavior change in Chrome 140. There is no expected impact on users; it helps maintain reliable quality checks for the resizable panel feature.
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
Form validation errors now show only one dialog even if users switch browser tabs repeatedly. This avoids confusing stacks of repeated error messages and keeps the form experience clearer.
Original PR description
On a form view, when there is a validation error and the user switches browser tabs multiple times, the dialog with the validation error keep popping multiple times causing the page to have multiple dialogs on top of one another. This commit solves this issue by preventing the form controller from creating multiple dialogs in case of a save error. task-5180610 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents errors when setting up quality points in manufacturing environments that do not use work orders. It ensures operation-specific checks only run when the relevant work order functionality is installed, improving reliability for affected configurations.
Original PR description
**Issue:** The attribute operation_id for quality.point is defined in the mrp_workorder module. However, quality_mrp module does not list mrp_workorder in its dependencies. As a result in a system where quality_mrp is installed but mrp_workorder is not, the following error is raised when evaluating the constrain for quality points mesured on Operations. `"'quality.point' object has no attribute 'operation_id'"` **Proposed solution:** Override the constraint in quality_mrp_workorder to include conditions related to operation_id, ensuring that it is only evaluated when the field is available.
This fix ensures that when a customer is selected after an online payment line is added in Point of Sale, the customer information is correctly saved once the payment is completed. This helps keep POS orders accurate and avoids missing customer details on paid transactions.
Original PR description
Before this commit, if a partner was selected after adding an online payment line, the partner was not synced after completing the online payment. opw-5098127 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The donation form now waits until currency information is ready before processing a donation click. This prevents rare crashes on slow connections and reduces accidental double submissions by showing a loading state while the form is preparing.
Original PR description
This fixes a very rare race condition in the `test_01_donation` tour... but it is actually surprising it is not more frequent than it is. Steps to reproduce: - Simulate a slow network (e.g. using Chrome DevTools) - Load a page with a donation snippet - Quickly fill in the donation form and click the submit button => You'll sometimes get a crash. Or a more precise one: - Add a 1 minute delay to the `/website/get_current_currency` route - Load a page with a donation snippet - Fill in the donation form and click the submit button once the page is fully loaded. => You'll definitely get a crash. This commit makes that button's handler async-protected, meaning it will now properly wait for what is needed (the currency) before proceeding, but it will also display a loading effect for the duration and prevent double clicking. Once the form is submitted, the loading effect is removed for stability safety. In master it can probably be improved. runbot-220885
Code cleanup and technical improvements
This update applies automated code cleanup to the VoIP area without changing customer-facing features. It helps keep the calling interface easier to maintain and reduces the risk of future issues.
Documentation and clarification updates
The corporate contributor agreement documentation for ForgeFlow was updated. This keeps Odoo's legal contribution records current and supports continued collaboration with the partner.
Original PR description
PR: https://github.com/odoo/enterprise/pull/97338
5 changes
Enhancements to existing features
This update includes VoIP-related components in automated code quality checks. It helps maintain consistency and reduce the risk of future issues in those areas, with no direct change for end users.
Resolved issues and error corrections
A spelling mistake in Odoo Studio’s field selection was corrected from “Multine” to “Multiline.” This makes the interface clearer for users when adding or configuring fields.
Original PR description
This commit fixes a typo in one of the newFields name: 'Multine' -> 'Multiline'
French VAT report submissions to ASPOne now better match the required data format. Address fields are updated and length limits are enforced for postal codes and city names, reducing the risk of rejected submissions.
Original PR description
This commit check that all the information that we send to aspone follow the constraint. By checking the xsd file, here what has been modified: - AdresseType is depreciated so we add AdresseRepetabilite - Adding a comment to remove a template not used in master - postal_code needs to have maximum 17 character - city needs to have maximum 35 character task-5169258
Code cleanup and technical improvements
This update applies code quality tooling to the VoIP area without changing its intended business behavior. It helps keep the calling features easier to maintain and reduces the risk of future issues from inconsistent code style.
This update applies automated code quality checks to the VoIP area. It keeps the phone-related code easier to maintain without changing expected business behavior.