Friday, September 11, 2026
24 changes · master
Resolved issues and error corrections
The website theme color editor now keeps edit buttons visually stable when users navigate with the keyboard. This prevents a small but distracting layout jump, improving usability and polish in the website editor.
Original PR description
Steps to reproduce: - Open the website editor. - Open the theme color picker. - Focus an edit color preset button with the keyboard. => The button shifts when it receives focus. Before this commit, a transparent border reserved space outside focus. Since [1], the focus indicator uses a `box-shadow`, so that border disappeared on focus and changed the button size. After this commit, the obsolete border is removed and the button keeps a stable size when focused. [1]: 8f41224083f198c5d86cdf6f43824b42bdc73d36 task-6259086
Inventory screens for batch and wave operations were adjusted to make navigation and setup clearer. Users will see cleaner filtering in planning views, a visible transfer line image, and easier side-by-side source location settings.
Original PR description
Batches and waves were previously merged (see odoo/odoo#280326).Some details on the UX still needs refinements: - On `stock_picking_batch_action`, there is no `groupby` but instead a `search_default_...` filter that needs to be removed for the gantt view. - The 'Batch Transfer Line' image (prev. Wave Picking) is transparent although they are accessible from this view. - Have side by side the two Source Location settings in the Operation Type form view task-6542620
Fixes a visibility issue where the Update BoM action could be hidden on manufacturing orders when the PLM module was installed. This ensures users can access the action in the appropriate production stages, reducing workflow confusion.
Original PR description
This PR fixes a bug introduced in the PR: https://github.com/odoo/odoo/pull/277276 where Update BoM action on MO now shows when the MO is also in `progress` or `to_close` states but when the module `mrp_plm` is installed the `invisible` attribute of the button is overridden missing the new states. After this PR, the override is now updated to have the new states where the action should also appear.
This fixes an issue in Documents where clicking an already selected item in kanban view could stop showing its details. Users can now repeatedly click a selected document without losing the expected selected, focused, and inspected state.
Original PR description
Reproduce * Open Documents on kanban view * Select a record, it is selected, focused and inspected * Click on the record again, it should remain in the same state but is in fact not inspected anymore. * Click on the record again, it should still be selected, focused and inspected and isn't. Cause: render sequence change on updating records from owl3 refactor. Task-6562749
A field grouping setting has been moved from the general HR area to Payroll, so it is managed in the right place. This helps keep employee payroll information organized under the correct module and reduces configuration confusion.
The Belgian salary contract demo data now includes the CP200 category in the basic demo setup. This helps ensure demo scenarios better reflect expected Belgian payroll conditions and avoids issues when using or testing the sample data.
This fix prevents an error when users open the My Events portal page in community-only installations. The event date used for sorting is now available in the community event module, so event registrations can be listed reliably without requiring enterprise add-ons.
Original PR description
Purpose ======= Fix the SQL error when accessing '/my/events' without the enterprise addons. Specification ============= The 'event_begin_date' field is only stored when 'event_enterprise' is installed meaning the 'order by' done on the field when loading the '/my/events' page would fail with an SQL error. => Moving the 'store' on the field from the enterprise module to community. This was previously not spotted as the 'event_enterprise' was auto-installed because all its dependencies were also auto-installed if the enterprise addons was found. Task-6560355 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The product catalog order line now correctly receives stock-related details such as tracking and minimum quantity information. This prevents missing or incorrect information when working with sale order lines in field service planning flows.
Original PR description
- https://github.com/odoo/odoo/pull/287603 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue in Documents where clicking an already selected file in the kanban view could incorrectly remove its inspected state. This keeps the file selection experience consistent and avoids confusion when users review documents.
Original PR description
Reproduce * Open Documents on kanban view * Select a record, it is selected, focused and inspected * Click on the record again, it should remain in the same state but is in fact not inspected anymore. * Click on the record again, it should still be selected, focused and inspected and isn't. Cause: render sequence change on updating records from owl3 refactor. Task-6562749
Event registrations in the customer portal now sort more reliably by event start date. This helps users see events in the expected order and avoids confusion when browsing registrations.
Original PR description
Moving the store on 'event_begin_date' from 'event_enterprise' to 'event (cf com PR) Task-6560355
New employee versions now appear immediately in the correct place on the timeline based on their effective date. This prevents confusion when HR users add current, past, or future versions and removes the need to refresh the page to see the right order.
Original PR description
**Issue** Creating a new employee version places the timeline tab at the wrong end of the timeline instead of its correct chronological position. It only corrects itself after a page refresh. **Steps to reproduce** 1. Open an employee record. 2. Click the **+** button on the timeline to add a new version. 3. Select an effective date (e.g., between two existing versions) or in the future. 4. The new tab appears at beginning of the timeline instead of in chronological order. **Solution** Override `getSortedItems` in the timeline widget to explicitly sort elements by date during the render cycle. This ensures dynamically added versions are instantly placed in their correct chronological position. Added UI tests to verify the ordering. task-6525190
This fixes a purchase stock test setup issue that occurred only in empty databases without demo data. It helps ensure Odoo's automated checks can run reliably in minimal installations, reducing false test failures for developers and maintainers.
Original PR description
Steps to reproduce ------------------ 1. install purchase_stock in a database without demo data 2. run any test in TestReorderingRule 3. observe the error: can't write on invisible field 'tracking' Note: This fix is only relevant when you run the test on an empty database, the demo data enables the Lots & Serial Numbers. Forward-Port-Of: odoo/odoo#286519
This fixes the Record button used for creating or capturing web tours after an internal refactor changed where the recorder is accessed. Business users and testers can again start recording tours from the tour list without hitting a broken action.
Original PR description
… refactor The button called `tour_service.startTourRecorder()`, but that method moved to `TourRecorderPlugin`, exposed on `TourPlugin` as `recorder`. closes odoo/odoo#287203 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 prevents test sessions from being unexpectedly rotated during login checks. It makes automated test results more consistent and reduces false failures, helping teams trust test outcomes without changing customer-facing behavior.
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#287350 Forward-Port-Of: odoo/odoo#285710
This fix stops manufacturing orders from copying display-only sales order lines onto stock moves. It helps keep manufacturing and inventory records accurate by preventing non-product sales lines from being selected or carried forward.
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#287491 Forward-Port-Of: odoo/odoo#286534
Users who request a French PDP migration will now see a clear, consistent message instead of misleading timing information. This helps reduce confusion by avoiding the previous promise that availability would happen "tomorrow" when that was not reliable.
Original PR description
Currently when the user requested a migration, we don't show it in any way to the user, and the only timeline we give ("available tomorrow") is completely false. Because we don't have any field we could use for this client-side (maybe from 19.3 we can use the catch-all-json field) So just make the message same for everybody.
no-task
Forward-Port-Of: odoo/odoo#285599
Forward-Port-Of: odoo/odoo#283594Website builder users can now click inside editable navigation link text without the cursor jumping to the start of the link. This makes editing menu links smoother and prevents small but frustrating text editing interruptions.
Original PR description
Problem: Clicking inside a navigation link in website builder causes the caret to jump to the start of the link element. Cause: `LinkPlugin` unconditionally reset the selection to the start of non-editable link elements, ignoring whether the anchor node was inside an editable child element. Solution: Do not reset selection if the anchor node is inside a `contenteditable` element. Steps to reproduce: - Open website builder. - Click inside a navbar link to place the caret. => Caret no longer jumps to the start of the link. opw-6535386 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287479 Forward-Port-Of: odoo/odoo#286527
This update corrects how the Belgian payroll expense module connects to the employee form. It helps ensure mobility budget benefits can be archived without errors caused by the form referencing the wrong underlying view.
Original PR description
…rm view Fix the inherit-id of the hr.employee form view in l10n_be_hr_payroll_expense module to match the correct view id. The previous inherit-id was incorrect, which could lead to issues when trying archive mobility budget benefit task-6542045
Campaigns created from an existing marketing automation template now correctly link their generated mailings to the new campaign. This ensures the Mailings button shows the real number of mailings, helping users verify campaign setup at a glance.
Original PR description
Issue ------ Wrong mailing count in the mailing stat button in the campaign form. How to reproduce ------ 1. Open marketing automation 2. Click `New` to create a new campaign 3. Choose an existing template 4. See the `Mailings` stat button The mailing stat button shows 0 but it must display the number of mailings that are used in that campaign. Fix ------ When loading a template, and after the activites and mailings have been created, set the campaign_id of the created mailings to newly created campaign. task-6564215
The website mega menu now keeps proper side spacing when viewed on mobile. This prevents menu content from touching the screen edge, improving readability and the overall mobile website editing experience.
Original PR description
Steps to reproduce: - Open a website in mobile preview. - Add a mega menu and select the "Odoo Menu" template. - Open the mega menu. => Its content touches the left edge of the mobile panel. Before this commit, the mega menu rework [1] removed the horizontal padding override required by nested `.container` elements. After this commit, mega menu containers keep the expected grid gutter on mobile. [1]: https://github.com/odoo/odoo/commit/ff5423bc3aa75e47b210ce98f3efba8c75459a5a
This fix moves a shared styling helper into the core web module so pages can build correctly even when the editor module is not installed. It prevents styling errors on bare databases and removes an unintended dependency between modules.
Original PR description
Since Commit[1], `bootstrap_review_frontend.scss` calls `increase-contrast()`, which web never defined: it lives in web_editor, now html_editor. This hidden dependency went unnoticed as long as the editor module was auto-installed on every database. The issue surfaced as a side effect of Commit[2] which added `http_routing` to html_editor's dependencies. `http_routing` is not auto-installed, so `html_editor` no longer gets installed on a bare database and `increase-contrast()` is undefined. [1]: https://github.com/odoo/odoo/commit/7c69596e7997 [2]: https://github.com/odoo/odoo/commit/bff477da4753 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a display issue where feature icons could become hard to read when a website used a dark color palette. Icons now keep the right contrast whether they use a custom background color or the default shaped icon background, improving readability and visual consistency.
Original PR description
Steps to reproduce: - Select a dark website color palette. - Drag and drop a "Features" snippet onto the page. => The icons use dark text over their dark `bg-o-color-3` backgrounds. Before this commit, [1] gave shaped icons a dark fallback color to make their default light backgrounds readable. The shaped icon selector was more specific than `bg-o-color-*`, so it also overrode the contrast color computed for explicit backgrounds. After this commit, the fallback applies only without a `bg-*` class. Explicit backgrounds keep their automatically contrasted color while icons with the default background remain readable. [1]: c5e16ae task-6485048 Forward-Port-Of: odoo/odoo#287386
Fixed a visual spacing issue in Marketing Automation timelines that could show an unwanted gap after a related kanban view update. This keeps campaign timelines looking consistent and easier to read for users.
Original PR description
Make the gap reset rule more specific, so no gap shows up after the nested kanban fix in community. COM: https://github.com/odoo/odoo/pull/287428 task-6527607
This update adjusts automated tests so they behave correctly when Odoo is configured to use a custom database notification function. It prevents false test failures in messaging and Viva.com payment flows without changing behavior for end users.
Original PR description
# [FIX] bus: adapt test to custom imbus & cron_trigger notifications Similar as to https://github.com/odoo/odoo/pull/178986, When a custom postgresql function is used (`ODOO_NOTIFY_FUNCTION` environment variable is set), testing to listen to imbus should be skipped # [FIX] pos_viva_com: adapt test to custom imbus notifications Similar as to https://github.com/odoo/odoo/pull/178986, When a custom postgresql function is used (`ODOO_NOTIFY_FUNCTION` environment variable is set), the webhook confirmation notification cannot be relied upon to reach the client via `listen imbus` in time. This makes the client fall back to polling `viva_com_get_payment_status` with the real session id, which the test's mock doesn't expect, causing the tour to time out.