Wednesday, September 16, 2026
32 changes · master
Resolved issues and error corrections
Updated website builder test checks so they continue to pass with newer Chrome behavior. This helps keep quality checks stable without changing the website features users see.
Original PR description
In Chrome 152, single-value `background-size` properties may be serialized or expanded to include implicit dimensions (e.g., appending `auto` like `100px auto`), causing strict exact-string test assertions to fail. This commit updates `website` builder test expectations to use regex prefix matching or substring inclusion so tests remain reliable across different Chrome versions. Note: this is a followup of https://github.com/odoo/odoo/pull/285591 where I missed one occurence during forward-port. My bad. runbot-946570 Forward-Port-Of: odoo/odoo#288519
This fix restores the correct spacing around status bars when they appear inside dialog windows. It improves visual consistency and prevents cramped layouts in affected Odoo forms.
Original PR description
| Master | This PR | |--------|--------| | <img width="1016" height="393" alt="image" src="https://github.com/user-attachments/assets/5c60052d-c95b-4351-8ed5-ae122d4db5d6" /> | <img width="1006" height="312" alt="image" src="https://github.com/user-attachments/assets/6b88796f-5eb9-4fb8-b685-b59feed796e9" /> | This PR fixes an oversight from Commit[^1] which omitted the scenario of a statusbar rendered within a dialog. As we relied on the padding utility class for this scenario, we need to set the CSS variable in the dialog context as well. [^1]: https://github.com/odoo/odoo/commit/95e354c75386dc514e8fd0905ab8d348c7fb6ecd task-6578339 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Message previews in Odoo Mail now prevent links and mentions from triggering their own actions when clicked. This helps users reliably open the intended conversation or related record from previews without accidental navigation or unwanted interactions.
Original PR description
Prior to this commit, clicking links or mentions in the message preview could trigger their actions instead of opening the related record. This could happen when clicking the preview from the messaging menu, while links and mentions in the chat bubble preview could also be clicked directly. This commit prevents clicking links and mentions from triggering their actions in message previews in both the messaging menu and chat bubbles. The links and mentions keep their visual appearance, but clicking the preview now only opens the related record in messaging menu and does nothing in bubble preview. Task-6569382 https://github.com/user-attachments/assets/8565bfa2-848f-424e-8378-bcacc43dfba8 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The change prevents installation failures when using Dutch VAT reporting by making shared VAT payment warning settings available outside the Belgian localization. This helps affected companies install and use the reporting module without duplicate setup logic or broken views.
Original PR description
*: account_reports, l10n_be_reports --- Description of the issue this commit addresses: Since commit 8a2d22f9fdac, the Dutch VAT payment wizard view references a warning field and configuration action defined only by the Belgian localization. Installing l10n_nl_reports therefore fails during view validation. --- Desired behavior after this commit is merged: This commit moves the shared field and action to the generic QR payment wizard, making them available to both localizations without duplication --- task-6578161
This fixes an unwanted gap between the control panel and the settings form in Odoo Enterprise. The change makes the settings page layout appear more consistent and polished for users.
Original PR description
In Enterprise, the spacing between the control panel and the settings form view is not wanted. COM: https://github.com/odoo/odoo/pull/288107 task-6570898
This update cleans up several manufacturing and inventory screens so key status information is clearer and visual icons are more consistent. It also fixes a display issue where draft manufacturing orders were missing their status indicator, helping users scan work orders and stock operations more reliably.
Original PR description
1) the state of an MO now stays on one line in the work order kanban view 2) the icon of package is changed to package_2 in the smart button and kanban view 3) remaining time and date is hidden on a work order card in the kanban view 4) fixed a bug where draft manufacturing orders didn't have a state bubble in the MO kanban view --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Manufacturing and work order cards now display key status information more consistently and with cleaner visuals. This makes it easier for users to scan production status, identify draft orders, and recognize package-related actions without visual clutter.
Original PR description
1) the state of an MO now stays on one line in the work order kanban view 2) the icon of package is changed to package_2 in the smart button and kanban view 3) remaining time and date is hidden on a work order card in the kanban view 4) fixed a bug where draft manufacturing orders didn't have a state bubble in the MO kanban view
This fixes an issue where translated labels for partner additional identifiers were not displayed correctly in views. The change ensures labels are translated before rendering, reducing test failures and preventing confusing untranslated text for users.
Original PR description
Problem: Failing tests revealed that the lazy translated labels of the additional identifiers from the multi id latam refactor were not finding translations in the t-out of the views. Markupsafe is resolving the lazy translation first without an env which resulted in the error of not finding a translation. Solution: Resolve the lazy translation of the labels with an established helper method in Python before it hits Markupsafe. Related PR: https://github.com/odoo/enterprise/pull/117163 runbot-build-error-947021 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Planning and Sales Planning apps now correctly create a new planning entry from the Plan dialog when users click an empty schedule cell. This prevents an error message and lets teams continue scheduling work without interruption.
Original PR description
Before this commit, when clicking on an empty cell and when the "Plan" dialog was opened, the "Create New" button produced a traceback. This was because the "assign_slot" rpc was called in "props.onSelected" instead of "props.onCreateEdit". Because "onCreateEdit" not overriden in the planning module, it was defaulting to "onSelected". We fix this by overriding "onCreateEdit" in the planning module and calling the "create" method of the model. task-6574764 version: 20.0
Company-paid expenses now open the related accounting move correctly even when no supplier bill exists or is expected. The update also removes an obsolete internal option in expense handling, reducing maintenance overhead without changing day-to-day workflows.
Original PR description
## [FIX] hr_expense: Fix existing bill view
Fix an issue where company paid expenses
would refuse to display the move if there was no linked bill, even for cases where there would be no existing bill ever
## [IMP] {hr,sale}_expense: Remove deprecated parameter
Remove the check parameter as it is not used anywwhere anymore
Related: https://github.com/odoo/enterprise/pull/131561The website cookie policy now lists the timezone cookie alongside the existing language preference cookie. This helps ensure visitors receive a more complete explanation of essential cookies used before consent is requested.
Original PR description
The cookie policy page must disclose every cookie stored on a visitor's device, including the essential ones set before any consent is given. Add tz to the existing "Preferences (essential)" row next to frontend_lang, and extend that row's purpose to mention the timezone. task-6470891
The chat input request button now uses the standard filled secondary button style instead of a custom border. This keeps the Discuss interface visually consistent with the product theme and improves polish for users.
Original PR description
Drops the inline `border-black` override in favour of proper theme btn styling. task-6528352 | Before | After | |--------|--------| | <img width="392" height="639" alt="image" src="https://github.com/user-attachments/assets/99990e51-b9d9-4b1d-b76a-6ad89422cc18" /> | <img width="390" height="648" alt="image" src="https://github.com/user-attachments/assets/06b64fed-82ca-44cf-b3d8-af7a5a0d6556" /> |
This fixes an internal accounting test so it only checks identifiers that belong to the accounting area. It helps keep automated validation accurate and reduces false failures in development, with no expected change for end users.
Original PR description
The xmlids are defined in `account_reports` runbot-946593
Expense policy limits for job positions are now displayed in the company currency, matching how those limits are configured. This helps avoid confusion when reviewing or applying employee expense rules, especially in multi-currency contexts.
Original PR description
Display job position expense limits using the company currency to match how the limit amount is configure. Also clean up the limit model by moving it to its own file. task-[6445873](https://www.odoo.com/odoo/project/967/tasks/6445873) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The meeting-ready banner is no longer shown in one-to-one direct messages, where inviting others is not applicable. This prevents users from seeing an empty invitation link and keeps the chat experience clearer.
Original PR description
The "Your Meeting is Ready" banner offers to add more people to the call and shows a permanent invitation link to share with them. It is meant for conversations that can grow. In a DM there is nobody else to add, and DMs have no invitation link, so the link input rendered empty. Hide the banner for chat conversations. <img width="2742" height="689" alt="meeting-banner-dm-before-after" src="https://github.com/user-attachments/assets/7eaa527d-8260-4c8c-9425-343cca974d9b" />
The quotation document kanban card layout now has better spacing, making it easier to scan and read. This small visual fix improves the sales quotation builder experience without changing any business workflow.
Original PR description
The kanban card lacks spacing. task-6566640 | Before | After | |--------|--------| | <img width="1307" height="254" alt="image" src="https://github.com/user-attachments/assets/aff159f8-cddc-4b44-b98a-5609c0bf5748" /> | <img width="1363" height="274" alt="image" src="https://github.com/user-attachments/assets/23d135ae-79b0-4287-9d5c-81e44716324c" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an unwanted extra line that could appear in list views when no footer totals were shown, especially with sample data or empty results. The change makes the interface look cleaner and avoids visual confusion for users reviewing lists such as Contacts.
Original PR description
Since 50b1ceabf1b2, the list view redesign gives the footer cells a top border, and at the same time drops their padding when they are empty, so that a footer without any aggregate takes no space. Both rules contradict each other: the row is squashed to a zero height, but its border keeps being painted. And since the table borders are collapsed, that border is painted by the table itself, so it also ignores the opacity the sample mode applies to the footer. Hence the line, especially visible with sample data where everything else is faded out. Only draw the separator when the footer actually holds something, the way the x2many list footers already do in form views. Steps to reproduce: - go to Contacts - add a favorite filter matching no record - go back to the list view: the sample data is displayed, and a stray line is drawn right under the last row
This fix ensures Odoo resets an internal performance counter for the registry itself, not just individual models. It matters for large combined test runs because it prevents Python from disabling a cache that can slow or destabilize extended testing.
Original PR description
reset_classes_tp_versions_used() was only ever fed model classes (registry.values() / self.values()), never the Registry class itself. Since Registry._lock (among others) gets patched on every HttpCase setUpClass/tearDownClass, the shared Registry class silently exhausts CPython 3.13's per-type version-tag budget (1000) over a long test run, permanently disabling its attribute cache, while the periodic reset kept "succeeding" on every other class. This causes issues particularly when testing all the modules in Odoo Community + Enterprise in a single go (not like in runbot)
This update reduces excess spacing around the form view control area and status bar for a cleaner, more balanced layout. It also adjusts the chatter area spacing so the page background and content alignment look more consistent across Odoo editions.
Original PR description
There is too much spacing under the control panel when we are in a form view and the community spacing doesn't work with the background. This commit reviews the spacing of the o_form_statusbar and control_panel, adapted in community and enterprise to a better visual balance. This change requires us to adapt the chatter spacing, removing the margins on the inner element to rely on a padding on the .o-mail-Chatter-topbar instead. task-6531145 Enterprise PR: https://github.com/odoo/enterprise/pull/130825 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The spreadsheet command palette now hides actions that users cannot access from the regular spreadsheet menu. This prevents users from seeing unavailable options and keeps the experience consistent across the interface.
Original PR description
Some items are displayed in the command palette while being hidden in the spreadsheet interface. With this revision, we synchronize the availability of a menu item between the topbar menu and the command palette. Task-6352180 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 Forward-Port-Of: odoo/odoo#273294
The help text for leave type pay rates now explicitly explains that unpaid leave should be configured at 0%. This reduces confusion for HR users when setting up leave policies and helps avoid incorrect payroll-related configuration.
Original PR description
- Update the help tooltip of the pay_rate field on leave types to explicitly mention the 0% configuration for unpaid leaves, preventing user confusion. task-6574198
This update fixes the setup for Latin American check tests so they no longer depend on unnecessary country-specific data. It makes the test suite simpler and more reliable, reducing the risk of false failures during development and quality checks.
Original PR description
Some tests were relying on latam documents or AR master data for no good reason. It only make sense to tests the third party checks with an Argentinean company. Most of the tests should run on a company of any localization. We create two separate setup to reflect that fact, and remove some useless complexity where we can. runbot-947000
This fix ensures Odoo correctly recognizes when a field has no real unsaved change after a user retypes the same value in a different format. It prevents the Save and Discard buttons from remaining stuck on screen when there is nothing left to save, reducing user confusion in forms.
Original PR description
**Description of the issue/feature this PR addresses:** Fixes #287978 In `useInputField` (`input_field_hook.js`), `onChange` and `commitChanges` only trigger the `FIELD_IS_DIRTY` bus event with…
**Description of the issue/feature this PR addresses:** Fixes #287978 In `useInputField` (`input_field_hook.js`), `onChange` and `commitChanges` only trigger the `FIELD_IS_DIRTY` bus event with `false` when the newly typed value actually differs from the value already stored on the record. When the typed text parses to the *same* value as what is already on the record (e.g. retyping `6,250` after the field already holds `6,25`), the code takes the `else` branch, which only resets the displayed text and never notifies the bus that the field is no longer dirty. `form_status_indicator.js` keeps whatever `fieldIsDirty` state it last received from that bus event, and shows the Save/Discard buttons whenever `root.dirty || fieldIsDirty`. Since nothing ever fires `FIELD_IS_DIRTY(false)` in that `else` branch, `fieldIsDirty` stays stuck at `true`. `Discard` correctly resets `root.dirty`, but has no way to reset `fieldIsDirty`, so the Save/Discard buttons keep showing even though the record is clean. **Current behavior before PR:** 1. Edit a field to a new value, click away (value committed, indicator shows Save/Discard as expected). 2. Edit the same field again, this time typing different text that parses to the *same* value (e.g. `1.20` when the field already holds `1.2`), click away. 3. Click **Discard**. The record is reverted, but the Save/Discard buttons remain visible. They stay stuck until the page is reloaded. **Desired behavior after PR is merged:** Retyping different text that parses to the same value clears the field's dirty state like any other case where the field ends up unchanged, so Discard (or any other action) correctly hides the Save/Discard buttons once there is nothing left to save. Forward-Port-Of: odoo/odoo#288030
Adjusted spacing around the form view control panel and chatter area to create a cleaner, more balanced layout. This fixes excessive empty space and keeps the interface visually consistent across Enterprise messaging and WhatsApp-related views.
Original PR description
*: mail_enterprise, whatsapp There is too much spacing under the control panel when we are in a form view and the community spacing doesn't work with the background. This commit reviews the spacing of the o_form_statusbar and control_panel, adapted in community and enterprise to a better visual balance. This change requires us to adapt the chatter spacing, removing the margins on the inner element to rely on a padding on the .o-mail-Chatter-topbar instead. task-6531145 Community PR: https://github.com/odoo/odoo/pull/287003
The spreadsheet command palette is now consistently available from the top bar across all spreadsheet-related actions, not just document views. This fixes an access gap and makes spreadsheet tools easier to reach in different workflows.
Original PR description
The command palette was made available as a topbar menu item but it was only exposed in the document action. Task-6352180 Forward-Port-Of: odoo/enterprise#122423
The Peruvian POS electronic invoicing tests now use the correct sales journal when checking receipts. This keeps automated validation aligned with recent accounting changes and helps prevent false test failures.
Original PR description
Since the POS accounting refactor in odoo/odoo#256889 pos.config.journal_id is the journal used to create invoices, so it has to be a sale journal. Before that it was the journal for session entries and invoice payments, which allowed general journals, and invoices went to invoice_journal_id. runbot-error-947223
This fix prevents an error when a check template filters accounts and the filter returns no results. Businesses can now use such templates without unexpected interruptions or tracebacks during accounting report processing.
Original PR description
When a check template has a domain on account.account that would give no result, it would throw a traceback because min cannot operate on an empty result. Forward-Port-Of: odoo/enterprise#131540
The appraisal process no longer requires a final assessment to be completed. This reduces unnecessary blockers for HR teams and managers when an appraisal can be closed or managed without that final text.
Original PR description
Forward-Port-Of: odoo/enterprise#131393
When the website generator cannot find an attachment, the error log now includes the missing file name. This makes troubleshooting faster because support teams no longer have to rely on an attachment ID that may be empty or unhelpful.
Original PR description
When an attachment is not found, we should log the filename as well as often the attachment id is None and tells us nothing. Forward-Port-Of: odoo/enterprise#131370
The spreadsheet insertion dialog no longer shows an unwanted horizontal scrollbar or duplicate scrolling on small screens. This makes the insert flow cleaner and easier to use, while keeping spreadsheet template styling separate from selector dialogs.
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#131450 Forward-Port-Of: odoo/enterprise#130114
Direct debit mandates now receive a sensible default type when the system cannot find an exact match. This prevents missing selections in cases where only one mandate option exists and the field may be hidden from users.
Original PR description
When no good match is found for the mandate_type, we still want to default on something. In particular when only one concrete implementation of the mandate exists, the field will be hidden since there is only one possible value. task-none
A website test was adjusted so it consistently uses a mock service instead of accidentally calling the real external image API. This reduces false test failures and helps keep the release process stable without changing customer-facing functionality.
Original PR description
The `test_media_dialog_undraw` test monkeypatches `HTML_Editor.media_library_search` to avoid calling the real undraw API during the tour. However, the "routing" ormcache may already hold the controller endpoint built with the original (unpatched) method, if it was resolved by an earlier request served by the same worker. Invalidate the "routing" ormcache after patching so the requests are routed to the patched methods. Same change as done in #271536. https://runbot.odoo.com/odoo/error/939933 Forward-Port-Of: odoo/odoo#288246