Friday, March 13, 2026
12 changes · 19.0
Resolved issues and error corrections
This fix stops user sessions from being rotated when a websocket connection closes. It keeps session handling consistent for all websocket-related routes and helps avoid unexpected sign-in or connection issues.
Original PR description
In [1], session rotation was disabled for websocket routes. However, the `/websocket/on_closed` route was forgotten. This commit ensures session rotation is also disabled for this route. [1]: https://github.com/odoo/odoo/pull/250826 opw-5445323 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
This fix makes automated point of sale checks wait until the expected number of orders appears before continuing. It helps prevent false build failures caused by timing delays from pending requests or screen animations, improving test reliability without changing customer-facing behavior.
Original PR description
Updated the assertion to use the :count() pseudo-selector directly in the trigger. Instead of synchronously throwing an error as soon as .ticket-screen mounts, the framework will now correctly wait for the exact number of .order-row elements to render, resolving timing issues with pending requests or UI animations. build_error-241246
This fix prevents products used as loyalty rewards from being hidden in the Point of Sale. It helps ensure loyalty programs continue to work correctly and customers can reliably receive the rewards they have earned.
Original PR description
Before this commit, a product used as a loyalty reward could be hidden in the PoS. opw-5918550 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251024 Forward-Port-Of: odoo/odoo#248481
Fixes an issue where the font size control could vanish while editing tables in notes or other rich text content. This keeps formatting tools available during editing, reducing user confusion and interruption.
Original PR description
Since [1], the font size in editor's toolbar is a `button` that contains an `iframe`. An `input` is put within this `iframe` so that when it is focused, the selection in the edited document is not lost. Unfortunately, when an `iframe` is moved in the DOM, it is restarted. In this case, the `iframe` has no source, so it becomes empty, and the content that was added into it `onMounted` is lost. This commit solves this by listening to every `load` events on the `iframe` instead of only the initial one. Steps to reproduce: - Go to a "To Do" note - Create a table with `/table` - Press Enter to confirm the 3x3 size - Select the last two cells of the first column - Move the mouse upwards to the next cell => The font size disappeared [1]: https://github.com/odoo/odoo/commit/a468de9d1099931d8f553c8569359996e7b694f2 task-6003539 Forward-Port-Of: odoo/odoo#252013
The web module's main desktop unit test suite now has more time to complete before being marked as failed. This helps avoid false build failures caused by a growing number of tests and temporary server load, improving reliability for release validation.
Original PR description
Lately, the main unit test suite started a timeout on a regular basis. After a bit of inverstigation, no specific culprit could be identified. In particular, there's no memory consumption difference…
Lately, the main unit test suite started a timeout on a regular basis. After a bit of inverstigation, no specific culprit could be identified. In particular, there's no memory consumption difference between now and a month ago, when the suite was less likely to time out. The reason might simply be the number of tests that keeps growing, and the overall required time for the suite to complete flirting more and more with the limit, hence causing timeouts when the runbot is particularily loaded. This commit thus extends the limit from 50 minutes to 1 hour. Note that this is only required in 19.0, as from 19.1, the suite is split by sub-builds, each one running the unit tests of the tested addons only (instead of a single run in the web sub-build that executes all unit tests). runbot error~238424 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
This update fixes a small error that could stop the system from finding the app manifest used for progressive web app installation. It helps keep the PWA install flow working reliably without changing existing behavior.
Original PR description
Description of the issue/feature this PR addresses:
Fixes a typo in the manifest selector used by the PWA service.
document.querySelector("link[rel=manifest") was missing the closing ], making the selector invalid.
Current behavior before PR:
Calling getManifest() could throw a DOMException due to an invalid CSS selector, preventing manifest retrieval and potentially breaking PWA install flow.
Desired behavior after PR is merged:
getManifest() correctly queries link[rel=manifest], retrieves the manifest URL, and keeps the existing manifest-fetch behavior intact (including test coverage already present in pwa_service.test.js).
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#251376This update fixes a bug where employee skills weren't automatically added to appraisals created by the system's automated scheduling process. The fix ensures that skills are correctly copied to all appraisals, regardless of how they're initially created, improving appraisal accuracy and data consistency. This prevents manual data entry for skills in these appraisals.
Original PR description
Steps to reproduce: ------------------------------------- 1. Install `hr_appraisal_skills` module 2. Create a new employee and assign at least one skill to the employee 3. Set the Next Appraisal Date…
Steps to reproduce: ------------------------------------- 1. Install `hr_appraisal_skills` module 2. Create a new employee and assign at least one skill to the employee 3. Set the Next Appraisal Date to today 4. Go to Scheduled Actions > Appraisal: Run employee appraisal > Run Manually 5. Open the newly created appraisal for the employee Observation: ------------------------------------- In the Skills tab, the employee's skills are not populated even though the appraisal is already in the confirmed stage Issue: ------------------------------------- When the cron `_run_employee_appraisal_plans` creates an appraisal, it is created directly in `pending` state via `create()`. The skill-copying logic only lived in the `write()` override, which triggers on state transitions from 'new' to 'pending'. Since `create()` bypasses `write()`, Employee skills were never copied to cron-created appraisals https://github.com/odoo/enterprise/blob/451dce92a087086fc3d5d5f610626312f32bcd13/hr_appraisal_skills/models/hr_skills.py#L12-L15 Solution: ------------------------------------- Add a `create()` override to call `_copy_skills_when_confirmed` when an appraisal is created directly in the `pending` state, ensuring employee skills are properly copied. opw-5491433 Forward-Port-Of: odoo/enterprise#110170 Forward-Port-Of: odoo/enterprise#107760
This update resolves an issue where changing the 'Kitchen Note' on a POS order after a quantity update would cause an error. The fix ensures that the note update works reliably, regardless of previous quantity adjustments, improving the user experience for order modifications.
Original PR description
**Steps to Reproduce:** - Install `pos_restaurant_preparation_display`. - Open Register for POS "**Restaurant**" Shop. - Choose table > select food-item > send the order. - Update food-item quantity > send the updated order. - Update food-item '**Kitchen Note**' > send the note. **Error:** `TypeError - 'NoneType' object is not subscriptable` **Cause:** When the food quantity is updated, a new preparation entry is created for the increased quantity. During the first iteration, the display and order quantities are already merged correctly. However, in a subsequent iteration, the original key no longer exists in `quantity_data`. As a result, accessing a None value leads to a traceback. **Fix:** This commit skips the merge step when the original quantity entry has already been merged. sentry-7197024946 Forward-Port-Of: odoo/enterprise#110184 Forward-Port-Of: odoo/enterprise#104889
This update clarifies error messages related to Instagram integration (code 9004) within Odoo Enterprise. It provides users with more detailed guidance to troubleshoot common issues, reducing the need to contact support. This improves the user experience and streamlines problem resolution.
Original PR description
Purpose ======= Explain the possible errors for the code 9004, to help users debugging their Odoo servers without creating a ticket. Task-5972197 Forward-Port-Of: odoo/enterprise#110456 Forward-Port-Of: odoo/enterprise#109319
This update fixes a bug that prevented users from removing external members with edit access from spreadsheets after archiving. The fix ensures these warnings are displayed correctly, improving spreadsheet management and reducing potential confusion for users. It resolves three specific warnings related to access rights.
Original PR description
Problem: A bug occurs when an internal user with "Edit" rights to a spreadsheet is archived. Upon archiving, the user transitions to an external user, a state where "Edit" rights are strictly…
Problem: A bug occurs when an internal user with "Edit" rights to a spreadsheet is archived. Upon archiving, the user transitions to an external user, a state where "Edit" rights are strictly prohibited. However, due to a validation error in the access rights wizard, users were unable to fix this. Cause: The validation logic in `documents_sharing.py` performed checks after any action was taken. If an illegal configuration was detected, it set a flag to hide the Save button. Because the check did not distinguish between adding an illegal rule and deleting one, users were blocked from removing the very records causing the validation failure. Solution: The validation checks have been updated to account for the operation- type (addition or deletion). This ensures that while new illegal rules are still blocked, existing illegal rules can be successfully removed to restore the system to a valid state. A test was also added to prevent this problem form happening in the future. This PR applies uses the solution to fix the state of 3 warnings, ensuring they are only displayed when actually relevant. Specifically, it covers: - The warning triggered when removing external users with edit access in `documents_spreadsheets`. - The `has_warning_no_access` warning in documents. - The `has_warning_link_with_more_rights` warning. task-5902391
This update resolves an issue where removing an EPD line in bank reconciliation incorrectly removed associated tax lines. Now, only the EPD line and its corresponding tax line are properly removed, ensuring accurate reconciliation reporting. This improves the reliability of bank statement processing.
Original PR description
When removing an EPD line in the bank rec widget, if the invoice line added to the statement line contained a tax, the invoice line was removed aswell. Now, only the EPD line and its tax line are removed. no-task
This update fixes an issue where fields at the bottom of the barcode editing page were hidden behind buttons. The fix allows users to scroll through the fields, ensuring all data entry options are visible regardless of button display. This enhances usability for barcode operations.
Original PR description
# How to reproduce - Set the barcode of a product - Go to Barcode > Operations > (Select any operation) > New - Click on the cog in the top right and type in the barcode you set for the product - Apply and then edit the item you added - Add options to the page (like Expiration Date) or increase the browser's zoom until the list of fields take the whole page # The problem The fields at the bottom of the page are hidden behind the buttons at the bottom # Why The controls at the bottom are positioned absolutely and with a high z-index, so they hide anything behind them. The form css class fixes this issue by adding a margin-bottom roughly the size of the controls. But this fix does not take into account the fact that the controls can grow in size when the DELETE button is displayed opw-5907564