Wednesday, September 9, 2026
12 changes · 19.0
Resolved issues and error corrections
This update cleans up references to an old developer option that no longer exists. It helps avoid confusion for administrators and developers by keeping configuration behavior aligned with current Odoo functionality.
Original PR description
The feature was removed in odoo/odoo#115076 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 stops non-product display lines from sales orders being linked to manufacturing stock movements. It prevents incorrect traceability and keeps manufacturing records tied only to real sale order lines.
Original PR description
Issue: ====== before this commit, user was able to select a display SOL and at MO confirmation the SOL was copied to the stock move, so we end up with a stock move linked to a display SOL, which is not correct. Solution: ========= - add a domain on the SOL field as first guard layer - add check on the SOL on MO confirmation to prevent copying a display SOL to the stock move opw-6473017 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286534
This fix restores protection for the company’s designated project documents folder so it cannot be archived accidentally. It helps prevent disruption to project document organization and keeps the expected folder structure available to users.
Original PR description
The company's project folder is supposed to be [impossible](https://github.com/odoo/enterprise/blob/20cc61e69aa3f6a59de1e962b25ce11fa402bf22/documents_project/models/documents_document.py#L44) to archive, by using the `_unlink_except_company_folders` logic. However, the method that adds the company field to the list of fields to check was missing, so it was still possible to archive a folder set as projects folder.
This fixes unstable automated tests by preventing unnecessary password hash refreshes during test logins. It keeps test sessions consistent when several requests happen at the same time, reducing false failures and improving confidence in test results.
Original PR description
The test harness patches the CryptContext object to spend less time hashing to decrease total test runtime. Because the hash parameters have changed, every first login (per transaction) per user will result in a hash rotation. The session_id is also rotated when the password hash rotates. When multiple requests are sent to the server while a session rotation is underway, the session datastore holds either a valid, or expired, or logged-out user session. This is a source of indeterminism in tests that can be prevented by always returning None value for replacement hash. REF Runbot; https://runbot.odoo.com/odoo/error/242811 REF Runbot; https://runbot.odoo.com/odoo/error/233722 Forward-Port-Of: odoo/odoo#287259 Forward-Port-Of: odoo/odoo#285710
This fixes a spelling mistake in the Helpdesk Auto Assignment group name. The change improves clarity in the interface and avoids confusion for users managing helpdesk settings.
Original PR description
This commit fixes the typo in the "Auto Assignment" group. task-6542450 Forward-Port-Of: odoo/enterprise#130880 Forward-Port-Of: odoo/enterprise#130841
This update aligns how Odoo uses PDF processing libraries across supported Ubuntu and newer library versions. It helps prevent document handling issues caused by differences between PDF library APIs, improving reliability without changing business workflows.
Original PR description
Align pypdf usage with the PyPDF2 1.26 API used on Ubuntu Jammy, Odoo 17.0's main supported Ubuntu version, and add the missing compatibility mapping for newer pypdf versions. Forward-Port-Of: odoo/enterprise#130971
Confirmed purchase orders now allow users to update line descriptions consistently, even when the product column is visible. This removes an interface inconsistency that could prevent teams from correcting or clarifying purchase details after confirmation while still keeping locked states protected.
Original PR description
Steps to reproduce the bug: - Create and Confirm a purchase order with any product and a description (name) on the order line - Try to edit the description (name) field Problem: The description field…
Steps to reproduce the bug:
- Create and Confirm a purchase order with any product and a description (name) on the order line
- Try to edit the description (name) field
Problem:
The description field was not editable on a confirmed purchase order when the product_id column was visible, but became editable when product_id was hidden.
The `ProductLabelSectionAndNoteField` widget renders both `product_id` and the description (`name`) in a single cell. When `props.readonly` is true (because `product_id` has `readonly="state in ('purchase', 'to approve', 'done', 'cancel')"`) and the order state is not draft (`isProductClickable` is true), the template rendered the description textarea with a hardcoded `readonly="1"` attribute, making it impossible to edit regardless of the actual intended readonly state for the description.
When `product_id` was column-invisible, the `name` field rendered via its own `section_and_note_text` widget, which correctly used `sectionAndNoteIsReadonly` (blocking only `cancel`, `done`, `posted`) hence the inconsistency.
Solution:
Replace `readonly="1"` with `t-att-readonly="sectionAndNoteIsReadonly"` on the description textarea so its editability follows the same logic as the other cases: blocked only for terminal states (`cancel`, `done`, `posted`), not for `purchase` or `to approve`.
opw-5474986
Forward-Port-Of: odoo/odoo#272277
Forward-Port-Of: odoo/odoo#272102Adds a regression test to ensure inventory screens can skip cleanup work without disabling scheduled stock maintenance. This helps preserve background data cleanup while keeping interactive inventory pages responsive when the skip setting is enabled.
Original PR description
## Purpose Protect the existing separation between interactive stock-quant cleanup and scheduled maintenance. `stock.skip_quant_tasks` lets users open inventory screens without waiting for quant…
## Purpose Protect the existing separation between interactive stock-quant cleanup and scheduled maintenance. `stock.skip_quant_tasks` lets users open inventory screens without waiting for quant maintenance. The scheduler must continue to merge duplicate quants, reconcile reservations and remove eligible zero quants when this setting is enabled. This was the explicit intent of [the original change](https://github.com/odoo/odoo/commit/207ba01819577cf6a2a686fae39dd3d673aec6dd). ## Change Add a regression test covering both values of the setting: - `action_view_quants` and `action_view_inventory` skip maintenance when enabled and call it when disabled. - `_run_scheduler_tasks` calls maintenance in both cases. The final diff contains only the regression test. Runtime behavior is unchanged from the base branch. ## Incident scope Related to opw-6523071. Captured incident stacks show inventory-screen actions entering quant maintenance. They do not establish that the background scheduler caused those requests. The older local restore contains no `stock.skip_quant_tasks` record; the setting at the time of the incident remains unverified. The initial scheduler guard has been removed because it disabled the maintenance path that the setting deliberately preserves. This is a regression-test proposal, not a performance fix for the reported incident. The previous benchmark of an omitted query is not evidence of a faster maintenance implementation. Any optimization of scheduled cleanup requires separate evidence and must retain necessary maintenance. ## Validation The targeted Odoo test passed: 1 test, 0 failures and 0 errors. It checks both menu entry points and the scheduler with the parameter enabled and disabled. `git diff --check` passed. opw-6523071
The AI Copywriter dialog now translates its alternative writing mode labels, so users see those options in their selected language. This improves clarity for multilingual users and makes the editing experience more consistent across Odoo.
Original PR description
Description of the issue/feature this PR addresses: The alternativemodes on the AI Copywriter dialog are not translated Current behavior before PR: <img width="1079" height="250" alt="image" src="https://github.com/user-attachments/assets/fced9432-b557-44de-9b7c-a31547b7a16b" /> Desired behavior after PR is merged: <img width="1078" height="250" alt="image" src="https://github.com/user-attachments/assets/1499836a-924e-425c-b328-27a378eae62a" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287175 Forward-Port-Of: odoo/odoo#230740
Fixed an unwanted horizontal scrollbar that appeared when users inserted content into a spreadsheet, especially on smaller screens. The dialog now uses the right styling for selectors and templates, making the modal cleaner and easier to use.
Original PR description
Opening "Insert in Spreadsheet" displayed an unwanted horizontal scrollbar in the spreadsheet selector. On small viewports, it could also produce a second scrollbar alongside the scrollable modal. The selector reused the `o-spreadsheet-templates-dialog` class, whose styles belong to `documents_spreadsheet`. This applied template-only max-height and overflow rules to the selector and made `spreadsheet_edition` rely on styles from a dependent module. Give selector dialogs their own class and keep the template-specific styles on the template dialog. Move the shared pager layout to `spreadsheet_edition` under a dedicated class, and update both pager consumers and the dashboard document selector. Task: 6526781 Forward-Port-Of: odoo/enterprise#130610 Forward-Port-Of: odoo/enterprise#130114
Code cleanup and technical improvements
The accounting test suite was tidied by removing duplicate helper code and obsolete commented-out tests. This is an internal maintenance change that makes future updates easier without changing how users work with the product.
Original PR description
This commit cleans up the test suite within the `account_accountant` module by removing redundant methods and old commented code. no-task Forward-Port-Of: odoo/enterprise#130723 Forward-Port-Of: odoo/enterprise#130644
Documentation and clarification updates
A new individual contributor license agreement was added for a contributor. This confirms the legal permissions needed for their future contributions to be accepted by the project.
Original PR description
Adding my signed Individual Contributor License Agreement (v1.0) under `doc/cla/individual/khalmuratovm.md` so that my future contributions can be accepted.