Tuesday, October 21, 2025
18 changes · saas-18.3
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
Updated an automated payroll test so it remains reliable with recent Chrome changes in how text styling is reported. This helps prevent false test failures and keeps payroll development checks stable without changing user-facing payroll behavior.
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
This update adjusts an internal web interface test so it remains reliable after a small behavior change in Chrome 140. There is no expected functional impact for users; it helps keep Odoo's automated quality checks stable across browser versions.
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 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