Thursday, February 5, 2026
14 changes · 18.0
Enhancements to existing features
This update streamlines the partner creation process in Point of Sale. When a user searches for a partner and no exact match is found, the search term is automatically populated into the name or phone field on the creation form, saving the user time and effort. The input field is also automatically focused for immediate use.
Original PR description
If a user searches for a partner and no match is found, clicking "Create" will now automatically transfer the search term into the appropriate field (name or phone) in the creation form. The matched input is also auto-focused. Task-4991076 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
Resolved issues and error corrections
This update ensures popover animations in our tests run consistently, preventing rare timing issues that could cause unexpected behavior. By adjusting the animation timing, we've stabilized the testing process and reduced the risk of test failures. This improves the reliability of our software development.
Original PR description
Because the popover had his animation enabled in tests, it could in very rare occasion end too fast and call it's finished callback, triggering extra repositionning (and thus extra expect.steps). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Documentation and clarification updates
This pull request updates the list of authorized members for the Adhoc Corporate Legal Agreement (CLA). This ensures compliance with Odoo's legal requirements and allows for continued contributions from these key partners. No changes to the Odoo system itself were made.
Original PR description
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 ensures that invoice currency rates are consistently rounded to the same decimal places, improving the accuracy of financial reporting. Previously, rounding behavior was inconsistent, which could lead to discrepancies in currency calculations. This change enhances the reliability of our accounting data.
Original PR description
task-5231229
This update fixes an issue where removing the last image from a paragraph in the HTML editor would leave the paragraph unusable. The fix ensures the paragraph remains editable by filling the parent block after the image is removed, improving the user experience.
Original PR description
Problem: When removing an image that is the only element inside a base paragraph, the paragraph remains empty and it becomes difficult to place the cursor inside it. Solution: This issue is already fixed in later versions. The fix consists in filling the parent block when its last remaining element (the image) is removed, so the paragraph stays editable. Steps to reproduce: - Add an image inside a paragraph. - Remove the image. - Observe that the HTML field collapses and the cursor is hard to place. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where task titles and descriptions generated from sales orders were incorrectly formatted. Now, task titles accurately reflect the sales order line description, and descriptions include all relevant details, regardless of whether the sales order line had a single-line or multi-line description. This ensures consistent and accurate task information within the system.
Original PR description
Steps to reproduce: - - Create a sales order with a service product that generates a task. - Add a multi-line description to the sales order line. - Confirm the order to generate the task. - View the generated task’s title, description. Issue: - - Task titles were generated in the format sales order name + first line of the product description, and the description contained only the remaining lines. Fix: - - If the sales order line has a single-line description, it is used as the task title. - If the sales order line has a multi-line description or no description, the product name is used as the task title, and the sales order line description is used as the task’s description. Commits 588c3be420a542d8594b26ecc200ca68e35d15fc, c3877b2acd74f1f798d0046b168418300f9e27ca, and 18edce4d859935bd1425144e4c835acabc5f68f4 previously attempted to fix this issue. task-4903208
This update corrects a visual issue where datetime fields continued to display time even after the 'Show time' option was disabled in Studio. The fix ensures that the 'Show time' setting accurately controls the display of time in datetime fields, improving the user experience.
Original PR description
How to reproduce : - Pick any field in any model with the datetime type (Creating a new one in studio also works) - The field must not be set to readonly - Go to the form view - Go into Studio - Uncheck the checkbox for "Show time" - Close Studio The problem : The time is still shown Why: The service that manages the formatting for the datetime input does not take the "Show time" attribute into account. This commit (https://github.com/odoo/odoo/commit/08934cd399e95459234cb569a80876ca1fbc69e8) mentions the fact that to correctly handle the showTime option, the formatDate and formatDateTime must be imported from "@web/views/fields/formatters". 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 resolves a bug where users were unexpectedly logged out in Firefox due to a strict interpretation of redirect rules by the browser. The fix disables automatic session saving when requesting images, preventing Odoo from creating a new session and sending a misleading cookie. This ensures consistent session management across browsers.
Original PR description
## Problem A logout occurs when an image in the chatter is requested through a third-party security proxy (like Cisco Secure Email or Microsoft SafeLinks) via a boomerang redirect following this…
## Problem
A logout occurs when an image in the chatter is requested through a third-party security proxy (like Cisco Secure Email or Microsoft SafeLinks) via a boomerang redirect following this flow:
- A user (Person A) opens an Odoo record. The chatter contains an image previously sent by a correspondent (Person B) whose email client or mail server rewrote the image URL to point to a security proxy.
- Firefox tries to load the image. The URL points to `cisco.com/...`. (for example)
- The proxy scans the link and redirects the browser back to the original Odoo URL: `odoo.com/web/image/...`.
- Firefox follows the strict (now deprecated) `rfc6265bis` rule: it looks at the whole redirect chain.
Since it sees a cross-site hop (cisco.com), it flags the final request as cross-site.
-> Because Odoo's session_id is `SameSite=Lax`, Firefox refuses to send
the cookie on this "false" redirect
- Odoo receives the request at `/web/image` without a session_id.
- Odoo creates a new, empty session to process the request.
- At the end of the request, because save_session is True by default, Odoo sends a `Set-Cookie: session_id=NEW_EMPTY_ID` header in the response.
- The browser receives this `Set-Cookie` header, and this time *applies a different policy*: it considers the header as same-origin, allowing it to overwrite the previously valid session cookie with this new one that corresponds to a fresh, unauthenticated session.
- The user is instantly logged out of their current Odoo tab.
## Context on Web Compatibility
This "redirect chain consideration" was a controversial part of the `RFC6265bis` draft.
Chrome and Safari never fully implemented it because telemetry showed it broke ~1% of the web. In March 2024, the HTTP Working Group (HTTPWG) officially decided to remove this requirement from the spec (reverting to a more permissive model) because it was deemed not web-compatible. Firefox, however, still enforces this strict behavior in many versions.
## How to we fix this
We set `routing={'save_session': False}` on the `/web/image controller`.
- This prevents Odoo from sending the `Set-Cookie` header if the session is dirty or new.
- Even if Firefox sends the request without a cookie, Odoo won't "reply" with a new session ID.
- The user's legitimate session cookie remains untouched in the browser.
## Sources
- HTTPWG Decision (March 2024): https://github.com/httpwg/http-extensions/issues/2104
- Reverting RFC6265bis: https://github.com/httpwg/http-extensions/pull/2750
opw-5184217
opw-4698750
opw-5166151
Forward-Port-Of: odoo/odoo#242061This update corrects a bug where a duplicate skill was incorrectly added to an employee's resume after a validation error occurred during the skill selection process. The fix ensures that changes made to the virtual record are properly discarded when a validation error is detected, preventing unintended skill additions.
Original PR description
Steps to reproduce: --------------------------------- 1. Install `hr_skills` module 2. Open the Employees app and open any employee record 3. Go to the Resume tab 4. In the Skills section, click Add…
Steps to reproduce: --------------------------------- 1. Install `hr_skills` module 2. Open the Employees app and open any employee record 3. Go to the Resume tab 4. In the Skills section, click Add for any skill type 5. Select a skill that is already added to the resume 6. Click Save & Close in the Select Skills wizard 7. A validation error is displayed, click Close 8. Close the Select Skills wizard. Observation: --------------------------------- After closing the wizard, another default skill is added to the resume even though a validation error was raised. Issue: --------------------------------- In the following code: https://github.com/odoo/odoo/blob/57c1c510425dcd491c794a0262063db398348640/addons/hr_skills/static/src/fields/skills_one2many/skills_one2many.js#L79-L82 During record save, the validation error scenario was not handled properly. When a validation error occurred, changes made to the virtual record were not discarded, causing the initial (invalid) changes to be incorrectly retained instead of being rolled back Solution: --------------------------------- When a validation error occurs while adding a skill, discard all changes made to the virtual record before throwing the error. This ensures that no unintended skill is added. opw-5423196 Forward-Port-Of: odoo/odoo#240697
This update optimizes the process of exporting the general ledger as an Excel file. By batching the export, the system avoids running into memory issues, leading to a more reliable and efficient experience for users generating these reports. This enhancement ensures faster and more stable report generation.
Original PR description
Batch the xlsx export of the general ledger to avoid memory errors task-5476982 Forward-Port-Of: odoo/enterprise#103329
This update resolves a technical error that prevented the correct display names from being set for spreadsheet cell threads. The change ensures that only one display name is retrieved, preventing a system crash and improving spreadsheet functionality. This resolves a minor internal issue.
Original PR description
**Before this change** We were trying to set the `display_name` of one spreadsheet cell thread record to a set of more than one `display_name`s coming from a set of potentially multiple spreadsheets. **After this change** We use `record` instead of `self` when calling `_get_spreadsheet_record` so that it can only return a set of 1 `display_name`, preventing the crash that occurs when trying to set that field value. opw-5380947
This update resolves an issue where the bank reconciliation widget incorrectly displayed the previous partner's name after a partner was removed from the liquidity line. The fix uses a direct database update to clear the partner name field, ensuring the UI accurately reflects the current bank statement. This improves the user experience and data accuracy.
Original PR description
When a user removes the partner from the liquidity line in the bank reconciliation widget, the 'partner_name' field on the statement line is not cleared. This results in the UI displaying the old name even though the partner is removed. in the first time i wanted to fix the issue with the standard ORM (e.g., `self.st_line_id.partner_name = False`) but it triggered a traceback. This occurs because `bank.rec.widget` is a virtual model defined with `_table_query = "0"`. When the ORM propagates the write operation, it attempts to query this virtual table `SELECT ... FROM (0)`. the fix now is a raw SQL update to set `partner_name` to NULL on the `account_bank_statement_line` to bypasses the ORM's dependency tracking for the virtual model. The cache is then explicitly invalidated to update UI. opw-5400705
This update resolves a performance issue in the tests related to importing attachments for the l10n_co_dian module. The change optimizes the test process to prevent it from taking too long, ensuring smoother development and testing. This improves the overall stability and efficiency of the Colombian localization updates.
Original PR description
This PR adapts the test "test_dian_import_vendor_xml" to align with the changes introduced by this PR : https://github.com/odoo/odoo/pull/245577 We patch the attachments import to not exceed the tests time. task-5500236 --- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr)
This update resolves a technical issue that caused a SQL error when creating invoices with non-deductible tax values in Odoo. The fix prevents the error by skipping the problematic SQL query when invoice lines are not yet saved, ensuring smoother invoice creation.
Original PR description
**Steps to reproduce:** * Install **account_asset** and **l10n_be**. * Enable **developer mode**. * Using **Studio**, add the field **non_deductible_tax_value** to invoice lines. * Create a new invoice. * Select a partner and add a product with **21% VAT** applied. * Do not save the invoice before adding the line. **Observed behavior:** * A **SQL syntax error** occurs: `WHERE tdq.base_line_id IN ()`. * The error is triggered when accessing the non-deductible tax value on unsaved records. **Cause:** * `_compute_non_deductible_tax_value()` executes SQL query with `tuple(self.ids)`. * For unsaved records, `self.ids` is empty, creating invalid SQL `IN ()` syntax. * This path is only reached for **non-deductible taxes**. **Fix:** * Skip the SQL query when no record IDs are available. * Return a default value for unsaved records. opw-5896716