Tuesday, July 29, 2025
45 changes · saas-18.4
Enhancements to existing features
An obsolete internal flag used during the website builder transition has been removed. This simplifies the website code now that the new builder is fully in place, with no expected change for end users.
Original PR description
Previously, in the [html_builder refactoring] `useMysterious` tag was used to separate 2 instances of the website: the old and the new one. Now, we do not need this flag anymore as the new website builder has already been merged and this flag isn't used anywhere anyway. Related to task-4367641 [the html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddb
The Discuss test suite now skips peer-to-peer call checks when no network is available. This avoids false failures in automated testing environments and helps keep development and release validation more reliable.
Original PR description
This commit adds a skip to peerToPeer tests for when there is no network as the webRTC API needs to have at least a local network to generate ICE candidates. Forward-Port-Of: odoo/odoo#220093 Forward-Port-Of: odoo/odoo#219587
The EMV QR Configuration fields are now shown in their own EMV QR Settings tab instead of being duplicated across existing bank-related tabs. This makes bank account setup clearer and reduces confusion for users managing QR payment information.
Original PR description
Before this PR: - `EMV QR Configuration` fields appears on both `Bank Information` tab and `Note` tab. After this PR: - `EMV QR Configuration` fields are moved to a separate `EMV QR Settings` tab to avoid duplication. Task : 4936165 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218969
The Knowledge editor now restores extra bottom spacing that was lost after the editor migration. This makes longer articles easier to edit by allowing users to scroll the end of the content into a more comfortable reading and writing position.
Original PR description
With version 18.1, we migrated from legacy HTML editor to the new one. As part of this upgrade, we revised the templates and reworked the wysiwyg helper. During the migration, several CSS classes were altered or removed. One issue that emerged is that the CSS rules intended to add bottom padding to the editor area are still present in the stylesheet but no longer apply to any element. These rules were especially helpful when working with long-form content, as they allowed users to scroll further and bring the end of the text closer to the center of the screen - improving readability and enhancing the editing experience. To fix this, we'll update the relevant CSS selector to ensure the padding is correctly applied to the editable area. See: odoo/enterprise#67083 Task-4636494 Forward-Port-Of: odoo/enterprise#90770 Forward-Port-Of: odoo/enterprise#86223
VoIP calls now clear their session consistently when the call status changes to ended. This reduces duplicated handling in different call-ending paths and helps keep call data tidy and reliable.
Original PR description
Instead of clean session in every function that can end a call, it's better that we do it when call model state is changed. Forward-Port-Of: odoo/enterprise#91188
The accounting dashboard now prevents users from clicking “Fetch Transactions” repeatedly for the same bank. This helps avoid duplicate requests to banking providers and reduces the chance of synchronization errors.
Original PR description
The button `Fetch Transactions` shown on a bank in the accounting dashboard can possibly be clicked multiple times in a row by a user. This would cause several calls to the provider causing potential errors. This commit prevents the user from being able to fetch transactions multiple times by removing this button once clicked. task-4900188 Forward-Port-Of: odoo/enterprise#89127
Resolved issues and error corrections
Fixed an issue where changing a blog post author in the website editor did not properly refresh the displayed author avatar. This helps editors see accurate author information while preparing or updating blog content.
Original PR description
The test that check avatar update on author's changes has been skipped during the merge of the initial website builder refactor, and was not re-enabled. During this time, the change to use classes for actions has been merged but broke the patch in `website_blog`. This commit adapts the patch to apply to the action instead of the plugin Actions to classes: b4b215325db61fbbe9793545293c8b6fbc99f310 Website refactor: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641
Features or functions removed from Odoo
An old internal test that was not part of the standard test process has been removed because recent changes made it fail when run separately. This has no expected impact on users or business workflows, but it reduces maintenance noise for developers.
Original PR description
`test_parse_inline_template` has never been run "officially" since it's not in a module's test directory, which is where the built-in test harness looks things up. Miraculously it actually worked…
`test_parse_inline_template` has never been run "officially" since it's not in a module's test directory, which is where the built-in test harness looks things up. Miraculously it actually worked still if one managed to get it run (via some other test harness), however with #212315 it's now broken: - #212315 unconditionally looks up the `test_tags` during `__init__` - way back when test tags were added in b356b190338e3ee032b9e3a7f670f76468965006, a default value for test tags was only set on classes defined somewhere within the `odoo.addons` namespace, this was kept on all subsequent updates (even after the `module` was removed from the test tags and moved to a separate attribute) As a result, when running `test_parse_inline_template` the initialisation of each test now fails with an `AttributeError` right in the `__init__`. Can't be arsed to move the test to a place where it's run, and clearly nobody's cared in the last 4 years. Forward-Port-Of: odoo/odoo#220832 Forward-Port-Of: odoo/odoo#220768
Code cleanup and technical improvements
Product attribute demo data has been consolidated and cleaned up to avoid duplicate entries across sales, point of sale, restaurant, matrix, and online shop demo setups. This makes demo data more consistent and easier to reuse across Odoo modules, with no expected impact on live business operations.
Original PR description
Clean product attributes to avoid duplicates, and move them to product module for reuseability Was initially a part of https://github.com/odoo/odoo/pull/205187 but moved for simplicity --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Fixes an issue in the website editor where changing a table of contents navigation from side to top could cause it to be covered by the main website header while scrolling. This keeps page navigation visible and reliable for editors and visitors after layout changes.
Original PR description
To reproduce the issue: - Open Website and start editing - Drop a table of content snippet and click on its navbar - Change the navbar's position from left to top - Scroll down => Website's main navbar appears on top of the table's navbar and hides it. We change the snapshot system's logic to refresh the table of content interaction when we change the position (i.e. switch class from s_table_of_content_horizontal_navbar to s_table_of_content_vertical_navbar). This commit follows the [html_builder refactoring]. Related to task-4367641 [html_builder refactoring]: odoo/odoo@9fe45e2b7ddb
Agents will no longer see a misleading warning when leaving a live chat that has already ended. This reduces confusion in the Discuss sidebar and keeps the warning focused on cases where leaving would actually end an active live chat.
Original PR description
Before this PR, when leaving a live chat from the discuss sidebar action as an agent, the user was always getting a warning that this action would end the livechat, even when the livechat has already ended! task-4926337 Forward-Port-Of: odoo/odoo#220754
This fix moves dashboard editing style rules to the correct view so they only apply where needed. It helps ensure dashboards look and behave properly when users edit them, without affecting the read-only view.
Original PR description
Some css rules required for the edition mode of dashboards was mistakenly added on the wrong (readonly) view. Task: 4962437 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
The color picker now displays the correct theme colors after they are changed in the Theme tab. This makes the editing experience more reliable because users see the same colors in the interface that are applied to their content or website.
Original PR description
Before this commit, updating the theme colors in the "Theme" tab would not correctly update the interface of the colorpicker, but the colors would be applied properly. This commit adds a props to the colorpickers in order to use the correct theme colors (Odoo or Website Theme) depending on which should be used. task-4367641
The website editor now stops live page interactions as soon as editing begins, preventing public-view behavior from interfering with editing tools. This helps keep pages stable and avoids potential editing glitches when website builder plugins initialize.
Original PR description
**[FIX] website: stop interactions on page edit** Since [1], interactions are restarted (stopped and started again) when the first normalize is triggered in edit. This means that all the plugins are…
**[FIX] website: stop interactions on page edit**
Since [1], interactions are restarted (stopped and started again) when
the first normalize is triggered in edit. This means that all the
plugins are started while the interactions are still in their "public"
state, potentially causing issues down the line.
By stopping all interactions as soon as the website builder switches to
edit, we ensure that the DOM is in a valid state for the edition
plugins.
Note that some edit interactions trigger some plugins shared methods
(in the website edit service, either through the `shared` object, or
through the `applyAction` method, whose action itself might then call a
shared method).
This is the reason why we do not restart them immediately. They will be
restarted with the 1st normalize anyways, which happens just after the
plugins' setup.
[1]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2The website editor no longer shows the eCommerce categories option in a mega menu when no product categories exist. This avoids confusing website editors with an option that cannot be used.
Original PR description
To reproduce the issue: 1. Delete all ecommerce categories if you have any. 2. Open website and add a Mega Menu 3. Start editing and click on the mega Menu 4. eCommerce categories option is available which shouldn't be the case as we currently don't have any category. This commmit follows the [html_builder refactoring]. Related to task-4367641 [html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddb
This update fixes broken website media replacement test flows after recent website builder changes. It re-enables the related automated test and ensures SVG images can support shapes, helping keep website editing behavior reliable.
Original PR description
test_01_replace_media tests was broken and disabled after the new website builder changes.This PR adapts the tour steps accordingly and re-enables the related test. Additionally, In this PR[1] we prevent adding shape for SVG image. now we support the shape on SVG image. [1]: https://github.com/odoo/odoo/pull/128084
Fixed the portal invitation email preview so it uses the contact's details instead of relying on incomplete portal user information. This prevents an error when staff preview the Portal: User Invite template and ensures the recipient name is shown correctly.
Original PR description
[FIX] portal: display template for portal invite Steps to reproduce: ---- - Install portal module - Grant a portal access to a contact - Go to the email template (Portal: User Invite) for the contact - Click on Preview -> Traceback Issue: --- The display was based on the user itself referencing to a partner. And there was no name for the portal users. Fix: --- Changed the view so now the different values are based on the partner.Also added the name to this function based on the partner name. opw-4444729 Forward-Port-Of: odoo/odoo#211548 Forward-Port-Of: odoo/odoo#194322
When users add a website block containing images, the image quality setting now appears immediately without requiring another edit first. This makes image optimization controls available at the expected moment and avoids confusion during page editing.
Original PR description
Since `html_builder`, when a block contains an image, its quality cannot be updated before another change is done. This commit specifies the mimetype of the image before the first transformation so that the quality option can properly evaluate its visibility condition. Steps to reproduce: - Drop a block with an image (or several images, or a background image) - Select the image (or the block with a background image) => The Quality option did not show up. task-4367641
Invoice analytic allocations now add up exactly to the original invoice line amount, avoiding small rounding differences such as a one-cent mismatch. This improves accounting accuracy and prevents confusion when reviewing analytic items.
Original PR description
**PROBLEM** Sometimes, the sum of the generated analytic lines for an invoice line doesn't equal the amount on the invoice line. For example, in invoice line with a price of 182.25, with an analytic…
**PROBLEM** Sometimes, the sum of the generated analytic lines for an invoice line doesn't equal the amount on the invoice line. For example, in invoice line with a price of 182.25, with an analytic distribution split into 98% and 2%, the generated analytic lines amount to 182.26 (off by 0.01) because of rounding. **STEP TO REPRODUCE** 1. install the accounting module and enable the Analytical Accounting option. 2. create an invoice, with a line with a price of 182.25, and a distribution of 98%/2%. 3. confirm the invoice. 4. go to Accounting/Analytics Items and notice the sum of analytical line is 182.26 instead of 182.25. **CAUSE** We only apply rounding after having calculated all the analytic line amounts. This mean we will sum the rounding error. In our example, the computation is like so: 98% of 182.25 = 178.605 rounded to 178.61 2% of 182.25 = 3.645 rounded to 3.65 178.61 + 3.65 = 182.26 **FIX** We compute the last analytic line for each plan, relatively to the other. `last_line_amount = invoice_price - sum(rounded_other_line_amount)` This ensure that the sum of analytic lines is always equal to the invoice price. opw-4848784 Forward-Port-Of: odoo/odoo#220614 Forward-Port-Of: odoo/odoo#214736
This fix prevents website forms from failing when a field is renamed and visibility rules are involved. It avoids an error caused by invalid circular dependencies, helping users keep editing forms without interruptions.
Original PR description
This PR ensures to fix the traceback-error of the circular field dependency in the form.
This fix prevents an error when users create an Analytic Distribution while working with multiple companies, including one without fiscal localization configured. It helps accounting users continue setup and configuration smoothly without being blocked by a crash.
Original PR description
Currently, an error occurs when a new company is created without selecting a `Fiscal Localization`, and then both companies are selected while creating a new `Analytic Distribution`. Steps to…
Currently, an error occurs when a new company is created without selecting a `Fiscal Localization`, and then both companies are selected while creating a new `Analytic Distribution`. Steps to reproduce: --- - Install `Accounting` module(without demo) - Enable `Analytic Accounting` - Create a New company and switch to it - Select both companies and Open `Analytic Distribution` and click `New` Traceback: --- `TypeError: 'bool' object is not subscriptable` At [1], we are searching by `account_type`, but if `Fiscal Localization` is not set for the current company, there will be no records in `account.account`. However, due to the multi-company setup, it still return accounts from the first company. In such cases, the `code` field is empty, which causes the `code` to be treated as False. [1]: https://github.com/odoo/odoo/blob/d155edfd729ab9b53f38939fe24b6d1e7b578083/addons/account/models/account_analytic_distribution_model.py#L55-L58 sentry-6754820454 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220089
A live chat chatbot test now waits until form changes are fully saved before finishing. This prevents false test failures and helps keep automated quality checks stable without changing user-facing behavior.
Original PR description
Tour "test_chatbot_clear_answers_on_step_type_change" could fail with following error before this commit: ``` Tour finished with a dirty form view being open. Dirty form views are automatically saved when the page is closed, which leads to stray network requests and inconsistencies. ``` The tour was saving the changes to form view but was not awaiting a trigger when the form is saved, thus the tour could end and still see form is dirty. This commit replaces `.o_form_view` to `.o_form_saved` for awaiting the form is fully saved and not dirty at end of test tour. Fixes runbot error 230296 Forward-Port-Of: odoo/odoo#220810
Event tickets sold through Point of Sale now keep the same “Registered” status as tickets sold through the website after payment. This avoids incorrectly marking attendees as already attended and keeps event records consistent across channels.
Original PR description
Before this commit, if we buy an event registration from PoS and pay for it, its state will be 'done', i.e. "Attended" [1]. While if we buy the registration from the website and pay for it, its state is 'open', i.e. "Registered" [2]. We want the state of the registration to be 'open' when we buy it. After this commit, we set the state of events bought from PoS to 'open' as well, matching the case where we buy them from the website. [1]: https://github.com/odoo/odoo/blob/c3ae4b29c51c7b0cff11aac5f4bf4aab5fad16c9/addons/pos_event_sale/models/event_registration.py#L14 [2]: https://github.com/odoo/odoo/blob/c3ae4b29c51c7b0cff11aac5f4bf4aab5fad16c9/addons/event_sale/models/event_registration.py#L40 opw-4920574 Forward-Port-Of: odoo/odoo#219622
Fixes a visual issue where product ribbons could shift away from product images when customers zoomed in or out on website product pages. This keeps promotional or status labels correctly positioned, preserving a polished shopping experience.
Original PR description
<b>Steps to Reproduce:</b> 1. Install Sales and eCommerce modules. 2. Go to Sales → Products, open any product, go to Sales tab, and set a Ribbon. 3. Navigate to Website → Shop, search for the…
<b>Steps to Reproduce:</b> 1. Install Sales and eCommerce modules. 2. Go to Sales → Products, open any product, go to Sales tab, and set a Ribbon. 3. Navigate to Website → Shop, search for the product and open its page. 4. Zoom in or out. <b>Issue:</b> - The ribbon on the product image becomes misaligned (shifts away from the image) when zooming in or out on the product detail page. This results in a broken visual layout. <b>Cause:</b> - A previous change in [PR #175473](https://github.com/odoo/odoo/pull/175473) unintentionally replaced the height class (h-100) with width (w-100) on ribbon container, causing layout instability during zoom operations. <b>Solution:</b> - Restore the proper layout by reintroducing h-100 to both the ribbon container and inner image div. This ensures the ribbon stays correctly positioned relative to the image regardless of zoom level. <b>opw-4854217</b> <b>Before FIX :</b>  <b>After FIX:</b>  Forward-Port-Of: odoo/odoo#216545
Autocomplete fields now preserve spaces when users type multi-word search terms, preventing words from being visually joined together. This improves data entry clarity across contact, employee, resource, unit of measure, and tag selection fields.
Original PR description
This commit fixes an issue in many2x autocomplete fields where typing a complete word followed by a space would result in that space being removed, causing the next word to stick to the previous one. The problem stemmed from how highlighted search results wrap the matched text in a \<span\>, which inadvertently isolates adjacent spaces. Combined with the display: flex styling of parent elements, these isolated spaces were visually trimmed. To resolve this, each autocomplete result item is now entirely wrapped in a \<span\>, preventing space trimming and ensuring proper word separation during input. task-4898120 Forward-Port-Of: odoo/odoo#218768
This update makes a website test wait until an image is fully loaded before checking its size. It reduces random test failures, helping keep the release process more stable without changing customer-facing behavior.
Original PR description
The goal of this commit is to avoid potential undeterminism that could occur in the `drop_404_ir_attachment_url` test (introduced by [this commit]). Before this commit, an error was thrown if the image was not loaded at the time the test checks the `naturalWidth` and `naturalHeight` property of the image. This could lead to undeterministic error as nothing ensures that the image is loaded at that time. To solve the problem this commit first waits for the image to be loaded before accessing the `naturalWidth` and `naturalHeight` property of the image. Side note: even if the source of the image is of type `data:` it is not directly loaded. [this commit]: https://github.com/odoo/odoo/commit/fbc6a697c1adf67ee8a90c49b0150d6ca170e081 task-4931144 Forward-Port-Of: odoo/odoo#220204 Forward-Port-Of: odoo/odoo#217968
Removing a background image from website cover blocks now also removes the leftover color overlay. This prevents pages from keeping an unintended tinted appearance after editors remove parallax background images.
Original PR description
Since the `html_builder`, when a block has a parallax background image and the image is removed, any applied color filter remains applied. This happens because the `editingElement` of the image toggle is the parallax span instead of the actual section - and therefore the color filter element is not properly located. This commit finds out about that situation and removes the filter from the right element. Steps to reproduce: - Drop a "Cover" block - Remove its background image => Its color filter remained present in the DOM. task-4367641
This fix makes mail conversation loading more consistent and avoids an error when a conversation is missing. It helps prevent unexpected failures when opening or reusing already loaded mail threads.
Original PR description
1. Ensure the thread is not undefined before calling exists. 2. `hasReadAccess` was only checked after the RPC, but if the thread data was already fetched the condition was not checked. The choice is made to remove the condition as it makes the code more flexible. The caller can always decide to check `hasReadAccess` afterwards if necessary. How to reproduce: https://github.com/odoo/odoo/pull/220605 Forward-Port-Of: odoo/odoo#220782
Users who leave a Discuss call while camera permission is still pending will no longer trigger an error if camera access is rejected. This makes video call handling more reliable and avoids disruptive traceback messages in edge cases.
Original PR description
Before this commit, a traceback would occur of the camera access was rejected after leaving a call that requested it. This race condition could also happen in other cases where the call is left before the camera promise resolves. Forward-Port-Of: odoo/odoo#220770
Fixes an issue in the web editor where changing a button into a regular link could leave the wrong editing controls visible and cause an error when saving. This improves reliability for website content editors making simple button style changes.
Original PR description
Problem: Saving the button snippet after changing its type to a link throws an error because `snippet_key` is `undefined`. Cause: The button snippet editor should be disabled if the button is changed…
Problem: Saving the button snippet after changing its type to a link throws an error because `snippet_key` is `undefined`. Cause: The button snippet editor should be disabled if the button is changed to a link. However, `updateOptionsUIVisibility` is only triggered on click events. In this case, the element type changes through the editor itself, not by clicking, so the UI isn't updated accordingly. Solution: Trigger a `click` event on the link element programmatically to call `updateOptionsUIVisibility` and hide the button snippet editor when the element is no longer a button. Steps to reproduce: - Drop a button snippet - Click inside the button to edit - Notice the Button snippet editor appears - Change the type to "Link" instead of "Primary" - The Button snippet editor is still visible - Click the floppy disk icon (save) in the snippet editor -> A traceback occurs opw-4936796 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220787 Forward-Port-Of: odoo/odoo#219660
This fix updates a Point of Sale automated test so it uses its own measurement unit instead of relying on demo data. This helps prevent false test failures and keeps release validation more reliable.
Original PR description
Before this commit: = - The test `test_quantity_package_of_non_basic_unit` used `product_uom_inch`, which is `archived` by default, causing the test to fail without demo data. - It only worked with demo data because `l10n_us_account` `unarchives` this UoM. After this commit: = - Created a **test UoM** to ensure consistent test behavior. Runbot-error: 223122 Forward-Port-Of: odoo/odoo#219292 Forward-Port-Of: odoo/odoo#214547
Shared Helpdesk ticket links now show the logo and branding of the company that owns the ticket, even when viewed by someone who is not logged in. This prevents customers from seeing the wrong company identity on portal pages in multi-company setups.
Original PR description
**Steps to reproduce**: 1. Install `helpdesk` only 2. Create a second company and configure a distinct logo for both the default and new companies. 3. Create a Helpdesk ticket under the new company.…
**Steps to reproduce**: 1. Install `helpdesk` only 2. Create a second company and configure a distinct logo for both the default and new companies. 3. Create a Helpdesk ticket under the new company. 4. Use the 'Share Ticket' (gear icon) feature to generate a portal link. 5. Open the link in an incognito window or a different browser (where no user is logged in). 6. Observe the logo shown in the portal navigation bar. **Observed behavior**: The portal incorrectly displays the logo and branding of the default/main company, even when the Helpdesk ticket belongs to a different company. **Issue**: When no portal user is logged in, the `res_company` used in the portal rendering context defaults to the system’s primary company (`env.company`). The template expects `res_company` to be explicitly set to reflect correct branding. See: https://github.com/odoo/odoo/blob/880954ebfc1106411b7f7a7d60aee05dfae60893/odoo/addons/base/models/ir_qweb.py#L781 **Solution**: Explicitly pass `ticket_sudo.company_id` as `res_company` in the portal view context to ensure correct company branding is used. opw-4855281 Forward-Port-Of: odoo/enterprise#90600
This fix removes leftover code from an earlier reconciliation model update. It reduces maintenance risk in accounting-related workflows without changing the user experience.
Original PR description
In this commit: https://github.com/odoo/enterprise/pull/80787/commits/04a304d58a56c7d2eeb70429340eb048fa9f2be6 We refactored the reconciliation model to be easier to use for users. However, by doing the refactor we forgot to remove some code. no task id Forward-Port-Of: odoo/enterprise#90310
The Accounting dashboard now correctly opens the bank reconciliation list showing only transactions that still need review. This prevents already checked transactions from appearing in the “To Check” view, helping users focus on pending items.
Original PR description
**Issue** When accessing bank transactions via the "To check" link in the Accounting dashboard, the expected filter to show only unchecked transactions is not applied. As a result, all transactions are displayed, including those that have already been checked. **Steps to Reproduce** 1. Navigate to Accounting > Dashboard > Bank 2. Create two bank statement lines: one marked as checked, the other unchecked 3. Return to the dashboard 4. Click the “1 To Check” link 5. Observe that both entries are shown, instead of only the unchecked one **Root Cause** The corresponding filter (`to_check`) is missing from the search view of the `account.bank.statement.line model`. Although the action context correctly includes `search_default_to_check=True`, Odoo is unable to apply the filter without a matching `<filter name="to_check" ... />` in the search view definition. Opw-4945705 Forward-Port-Of: odoo/enterprise#90803
This fix moves dashboard styling rules to the correct editing view instead of applying them to the read-only dashboard view. It helps ensure dashboards look and behave correctly depending on whether users are viewing or editing them.
Original PR description
Some css rules were mistakenly added to the readonly action of the dashboard instead of it edition action. Task: 4962437
Clearing a document selection from the control panel now also clears the details panel. This prevents users from seeing outdated document details after they have removed the current selection.
Original PR description
The details panel does not update when clearing the selection through the control panel. Steps to Reproduce: ==================== - Open the detailsPanel. - Select a document. - Click on a blank space, which removes the current selection. - Re-select a document. - Click the ‘x’ button on the control panel to clear the selection. - The document selection in the detailsPanel does not get cleared. Technical =========== In DocumentsRightPanel and how DocumentsDetailsPanel is handled, The panel relies on the `state.focusedRecord` to determine which record's details to display. However, when clicking the ‘X’ button in the control panel to clear the selection, the `state.focusedRecord` is not being Updated or cleared, the detail panel still shows the previously focused record. After this PR: Clicking the ‘x’ will properly clear the selection from the detailsPanel. Task-4752944 Forward-Port-Of: odoo/enterprise#85272
This update fixes an issue that could cause automated checks to fail when preparing default Swiss payroll records. It helps keep Swiss payroll transmission workflows stable and reduces the risk of setup-related interruptions.
Original PR description
https://runbot.odoo.com/odoo/runbot.build.error/115307 Forward-Port-Of: odoo/enterprise#90487
Field service sales orders with zero-priced products now correctly show as ready to invoice when Anglo-Saxon accounting is enabled. This prevents valid no-charge items from being blocked by an incorrect 'Nothing to Invoice' status.
Original PR description
Before this commit: When Anglo-Saxon accounting is enabled and a product with sale price of zero is added to SO through field service, the invoice_status show 'Nothing to Invoice'. After this commit: With Anglo-Saxon accounting enabled, adding product with a zero sale price to an SO through field service will display the invoice_status as 'To Invoice' instead of 'Nothing to Invoice'. task-3957962 Forward-Port-Of: odoo/enterprise#70132
The optional columns menu no longer shows the “Add custom field” button when users view bank statement lines. This prevents users from seeing a customization option that should not be available in the bank reconciliation workflow.
Original PR description
`Add custom field` button shouldn't be displayed with `account.bank.statement.line` model. Since c6ade2de937a30a13620a64a4779ebd827088755, we use an action to open the bank reconciliation widget, therefore in the `computeStudioEditable` method, we didn't pass in the first condition `!action.xml_id` anymore and we were returning `true`. With this commit, we return `false` if model is `account.bank.statement.line`. Steps: - Install `accountant` - Go to Accounting dashboard - Click on the `Bank` card title - Toggle the list view - Open the optional columns dropdown -> The `Add custome field` button is displayed opw-4953156 Forward-Port-Of: odoo/enterprise#90935
The HR Referral autocomplete now keeps spaces in suggested names, making search results easier to read and recognize. This fixes a display issue so users can more confidently select the right referral-related record.
Original PR description
This commit applies the same methodology as in https://github.com/odoo/odoo/pull/218768 to resolve the missing spaces issues in many2x autocomplete search results. task-4898120 Forward-Port-Of: odoo/enterprise#90138
The point of sale integration now uses the correct order completion status when displaying tickets. This removes an unused internal flag, helping prevent incorrect order state handling and keeping the checkout experience more reliable.
Original PR description
In this commit: ==== - Use `finalized` instead of `uiState.locked` to determine order state on TicketScreen. - Remove the unused `locked` property from `uiState` in posOrder. Task-4745869 Related: odoo/odoo#207406 Forward-Port-Of: odoo/enterprise#91097 Forward-Port-Of: odoo/enterprise#86684
Saving a spreadsheet global filter with a duplicate label and a restricted value range no longer causes a crash. Users now see the duplicate label error directly, making the filter setup flow clearer and more reliable.
Original PR description
Steps to reproduce: - Create a global filter with label 'aa' - Create a new text filter with the same label - Check 'Restrict values to a range' - Select a range with some values - Confirm the range selection - Click the save button Current behavior before PR: - A traceback occurred when saving the new filter with a duplicate label and a selected range. After the crash, the duplicate label error was shown. Desired behavior after PR is merged: - The duplicate label error is raised directly without triggering a traceback. Task: [4813177](https://www.odoo.com/odoo/2328/tasks/4813177) Forward-Port-Of: odoo/enterprise#90155
Product attribute demo data has been moved into the core product area so it can be reused consistently by related apps. This is an internal cleanup that helps reduce duplication and makes demo data easier to maintain across barcode lookup, rental, website, and manufacturing examples.
Original PR description
Move product attribute data to product module for reusability