Wednesday, September 24, 2025
26 changes · saas-18.4
Enhancements to existing features
The model selector can now be configured to show more items at once. This lets Documents display its full list of available models without changing behavior in other areas.
Original PR description
In Documents, we have a static list of 9 items to show with this widget. As there is no "Search more" available, and we're in stable, this is the minimal change to not change behavior. Task-5075200 See related ENT PR (includes an integration test). Forward-Port-Of: odoo/odoo#226608
The Documents details panel now displays the full static list of available model labels instead of leaving users to infer hidden options. This makes selection clearer and reduces confusion because search is not available for this list.
Original PR description
As the list is static and there are only a few and searching for more is not supported, this enables to show all labels so that users don't have to guess what is available or not. Task-5075200 Forward-Port-Of: odoo/enterprise#94180
Resolved issues and error corrections
Users applying unsupported filters to image or other binary fields will no longer encounter an unexpected error. The system now records the issue as a warning instead, helping keep filtering workflows stable while still flagging the invalid condition for follow-up.
Original PR description
Currently, an error occurs when user tries to apply an invalid filter on any binary field.
Steps to replicate:
- Add a filter like [('image_1024', 'in', [])] in the custom filter where the image exists(eg, Products) and save.
- Error triggered.
Error:
`ValueError: Binary field stored in attachment, accepts only existence check; skipping domain in condition ('image_1024', 'in', OrderedSet(['']))`
Cause:
- The system encountered an error when users attempted to apply invalid filters on binary fields (e.g., image_1024). The error occurs when operators like 'is in' with empty string values ('') are used, as binary fields are stored as attachments only support existence checks.
Solution:
- Changed the `_logger.exception` to `_logger.warning`.
sentry-6236134077
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prFleet manufacturer pages now count only active vehicle models, so totals better reflect the models currently in use. Users can also filter vehicle models to find archived records when needed, improving record visibility without affecting daily workflows.
Original PR description
- Fixed count of models in manufacturer to count only active models. - Added 'Archived' search filter for 'model' model Task - 4921998 Forward-Port-Of: odoo/odoo#228174 Forward-Port-Of: odoo/odoo#222353
This update fixes a failing automated test for Hong Kong payroll accounting related to leave generation changes. It helps keep payroll file validation stable and reduces the risk of blocked releases due to test failures.
Original PR description
Explanation: _generate_leave method is updated in saas-18.1. build_error-229902 Forward-Port-Of: odoo/enterprise#95084
Journal entry numbers can no longer be changed directly from the Accounting list view when entries are not in draft. This helps prevent accidental changes to posted or confirmed accounting records and keeps financial records more reliable.
Original PR description
**Issue** It was possible to edit the journal entry number in the list view even when the entry state was not 'draft'. **Steps to Reproduce** 1. Go to Accounting > Accounting > Journal Entries. 2. Select any journal entry. 3. Double-click on the Journal Number field and attempt to edit it. **Root Cause** The 'name' field in the list view did not have a readonly attribute, allowing inline editing regardless of the journal entry's state. Opw-5009421 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224475
This update fixes an internal test for journal reports that could fail when Czech localization was installed. It makes the validation adapt to the actual payment reference value, improving build reliability without changing user-facing behavior.
Original PR description
test_document_data_for_bank_journal_with_show_payment_option was failing in builds with l10n_cz installed because - we set move_sales_2.payment_reference = '' in setUpClass and without l10n_cz it stays empty - but with l10n_cz installed it gets recomputed because of precompute=True on taxable_supply_date (which is a stored computed field that triggers an extra write on account.move when the company is in CZ, and that write causes the compute graph to run again, and _compute_payment_reference fills the value back in) this commit solves this issue by not making assumptions about the payment_reference value and would use it as is in the generated data validation build_error-231479 Forward-Port-Of: odoo/enterprise#95014
Refreshing appointment time slots now handles cases where no resource is selected. This prevents errors during slot refreshes and helps users continue booking appointments smoothly.
Original PR description
When refreshing the slots, it's possible that the resource_selected_id is equal to None, False or just empty string. This was leading to some error when parsing it to an integer. This commit move the parsing into the method computing the max possible capacity after checking if we got a value. Related commit 3cca7e47ab58f8a7d4e9196dbf60f7068348216b task-5102895 Forward-Port-Of: odoo/enterprise#95144
This fix makes website theme palette testing more dependable by ensuring asset reloading happens at the right time. It reduces intermittent test failures, helping maintain confidence in website theme changes without affecting end users.
Original PR description
The goal of this commit is to fix an undetermined bug in the theme tab palette tests. Sometimes, ‘reload assets’ occurred before the end of the test. We will therefore wait to go through ‘reload assets’ before the end of the test in order to make it deterministic. Error: https://runbot.odoo.com/odoo/error/232650 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 change fixes a randomly failing accounting test by removing an invalid check and adding safeguards for future localization data. It helps keep automated validation stable and ensures new fiscal position data does not introduce unsupported domestic matching cases.
Original PR description
#### Issue: `test_domestic_fp` randomly fail #### Cause: While computing domestic fiscal position, there are 2 fiscal position candidates for being domestic as they got the same `sequence` and no `country_id`. It happens randomly that the second one is fetch instead of the first one. #### Solution: The failing assert checks a case that doesn't exist in any fiscal position data. Therefore, this commits remove this part of the test, but add a warning in `test_all_l10n` to ensure this case won't happen in new data. runbot-231686 This PR is linked to [this PR](https://github.com/odoo/odoo/pull/224599) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226336
This update removes a fixed year from automated point-of-sale test data so invoice settlement checks continue to work over time. It helps prevent false test failures and keeps the Spanish point-of-sale validation process stable without changing user-facing behavior.
Original PR description
Remove hardcoded year date for selecting invoices to settle. rb-error: 230713 enterprise PR: https://github.com/odoo/enterprise/pull/93166 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224171
This fix removes a fixed calendar year from a point of sale test that selects invoices for settlement. It helps keep automated checks reliable over time, reducing false failures that can slow down delivery.
Original PR description
Remove hardcoded year date for selecting invoices to settle. rb-error: 230713 community PR: https://github.com/odoo/odoo/pull/224171 Forward-Port-Of: odoo/enterprise#93166
Fixed a typo that caused lock date warning messages in accounting reports to display list items with incorrect indentation. This makes the message clearer for users when report external values cannot be modified due to lock dates.
Original PR description
[FIX] account_reports: typo in error message typo in generation of error message saying that lock dates are blocking the modification of a report external value See odoo/enterprise#92949 Forward-Port-Of: odoo/enterprise#95175
This fix makes Ctrl+Backspace behave consistently in the HTML editor across Firefox, Safari, and Chrome. Users editing text will get the expected deletion result at paragraph boundaries, reducing confusing browser-specific behavior.
Original PR description
**Current behavior before PR:**
In Firefox or Safari, `<p>abc def</p><p>[]<br></p>` => `ctrl + backspace` ends up with `<p>abc []</p>` which is different o/p than Chrome (`<p>abc def[]</p>`).
This happens because Firefox's Selection.modify("extend", "backward|forward", "word") behaves differently than Chrome when the cursor is at the start or end of a block (or in an empty block). This behavior breaks the output when pressing ctrl + backspace.
**Desired behavior after PR:**
This PR ensures that in such case deletion behavior is same across browsers as Chrome. In other words `<p>abc def</p><p>[]<br></p>` => `ctrl + backspace` should be `<p>abc def[]</p>` .
task-5055135
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#226040Automation rule setup now avoids carrying over a hidden setting that caused archived records to appear in related selection dialogs. This keeps record searches cleaner and prevents users from accidentally selecting inactive records while configuring automations.
Original PR description
**Before** - the active_test context key is part of the main base_automation action (base_automation_act), but this context key stays in the context further, leading to unwanted filtering in i.e. the…
**Before** - the active_test context key is part of the main base_automation action (base_automation_act), but this context key stays in the context further, leading to unwanted filtering in i.e. the action_server_ids.resource_ref search view dialog. - Steps to reproduce: - have base_automation installed - create an automation rule targeting the res.users model - add an Update server action targeting the Partner field - in the resource_ref autocomplete, click on Search More... - the search view dialogs displays archived records **After** - we chose to instead have a default filter in the base_automation_act action to include archived records by default. As the context key to activate the default filter starts with 'search_default_', it is already cleared from the context when opening the form view (standard behavior). - when you reproduce the same steps as before, the archived records are no longer displayed in the search view dialog. **Additional Note** This fix requires to upgrade the base_automation module. opw-4886487 Forward-Port-Of: odoo/odoo#225146
The Point of Sale payment screen now correctly disables the Validate button on mobile when no payment method is selected. This helps prevent checkout mistakes and keeps mobile payment behavior consistent with expected cashier workflows.
Original PR description
- Fix issue where the `Validate` button (in the payment screen) was not correctly disabled on mobile devices when no payment methods was selected. task-id: 5072759 enterprise PR: https://github.com/odoo/enterprise/pull/94100 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228057 Forward-Port-Of: odoo/odoo#225917
The Point of Sale payment screen now correctly prevents mobile users from validating an order when no payment method is selected. This helps avoid incomplete or incorrect payment flows and keeps mobile checkout behavior consistent with expectations.
Original PR description
- Fix issue where the `Validate` button (in the payment screen) was not correctly disabled on mobile devices when no payment methods was selected. community PR: https://github.com/odoo/odoo/pull/225917 task-id: 5072759 Forward-Port-Of: odoo/enterprise#95227 Forward-Port-Of: odoo/enterprise#94100
Users can now enter a checkout time directly from the attendance Gantt popup when an attendance is still open. This fixes a display issue that hid the checkout field and forced users to use another form to complete the attendance record.
Original PR description
The Gantt popup form explicitly set `check_out` invisible when it was empty, which prevented users from manually entering a checkout for an open attendance. This commit removes the overriding xpath so that the form simply inherits the standard `hr_attendance_view_form` behavior, where the `check_out` field is always visible and editable. Users can now set a manual checkout directly from the Gantt modal. task-5026978 Forward-Port-Of: odoo/enterprise#92726
Products using the Barcode Database will no longer have existing eCommerce descriptions replaced by information from barcode lookup results. This protects manually written product content while still allowing missing details to be filled in automatically.
Original PR description
Scenario: - enable "Barcode Database" in general settings - set an eCommerce description on a product - set a barcode in the database on that product (eg. 799439112766) Result: the eCommerce description has been overwritten by the barcode lookup result. Fix: do like other _update_product_by_barcodelookup methods and only update value that are not yet set. Note: also fixes the return of the overridden methods. opw-5061231 Forward-Port-Of: odoo/enterprise#94098
Fixed an issue where closing the currency rate filter could try to update an accounting report after the report view had already been closed. This prevents an unexpected error and keeps users from seeing a crash when navigating away from reports.
Original PR description
For the currency rate filter, applyFilters is called when the dropdown is closed. It might heppen that we have the dropdown open then we click on something that trigger the destruction of the report view but that still trigger applyFilters which try to apply filter on a destroyed component which is illegal. To prevent this we check if the component is destroyed before reloading the controller. Forward-Port-Of: odoo/enterprise#94313
The Belgian POS fiscal reports and invoice views no longer show the warning "THIS IS NOT A VALID VAT TICKET". This avoids confusion because the warning is only relevant for POS receipts that are not final VAT tickets, not for reports or invoice views.
Original PR description
- Remove the message "THIS IS NOT A VALID VAT TICKET" from the invoices and POS daily reports views. This message is only necessary on POS receipts that are not final TVA tickets. task-id: 5013860 Forward-Port-Of: odoo/enterprise#92287
Fixed an issue where the command palette could crash when a task or project status field had no available options. Users can now continue working normally; the unavailable action is simply hidden instead of causing an error.
Original PR description
**Steps to reproduce:** - Installed industry_fsm (Field Service) module - Navigate the menu Field Service -> Configuration -> Project - Create a new project - Then Navigate the menu My Tasks -> Tasks…
**Steps to reproduce:** - Installed industry_fsm (Field Service) module - Navigate the menu Field Service -> Configuration -> Project - Create a new project - Then Navigate the menu My Tasks -> Tasks - Create a new task with the new created project - Then using the keyboard shortcut ctrl + k for command search, an error occurs **Cause:** - When the `stage_id` statusbar had no possible values, `this.getAllItems()` returned an empty array. - The command `isAvailable` unconditionally accessed `this.getAllItems().at(-1).isSelected`, which is undefined, causing a crash.[see](https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/fields/statusbar/statusbar_field.js#L147-L148) **Fix** - Add safe check in the command action so it does not attempt to select a non-existent "next" item. **Result** - The command palette no longer crashes when the `stage_id` field has no available items. Instead, the command is simply unavailable. opw-5084130 upg-3130405 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#228130 Forward-Port-Of: odoo/odoo#227440
This fix passes the needed action identifier into the web view context so Odoo Studio can tell whether an action may be edited. It helps prevent incorrect editing availability in Studio without changing normal user workflows.
Original PR description
This information is required so that the studio can determine whether the action can be edited. opw-5066488 Forward-Port-Of: odoo/odoo#227264
The online shop price range filter now uses the corrected search term when a customer's query is automatically matched to a similar product term. This keeps price filtering available and accurate after typo-tolerant searches, improving the shopping experience.
Original PR description
Versions
--------
- 17.0+
Steps
-----
1. Navigate to the website shop page.
2. Search for a term that is close to an existing one, but not exact ("dask" instead of "desk" for example)
Issue
-----
The price range filter will stop functioning
Cause
-----
The domain used to get the minimum and maximum prices for the price range filter used the original search term regardless of whether the actual search results are from a fuzzy search term or not
Solution
--------
When there is a fuzzy search term use it to get the minimum and maximum prices for the price range filter instead of the original search term
opw-5020545
Forward-Port-Of: odoo/odoo#228203
Forward-Port-Of: odoo/odoo#226059Sales order invoiced amounts are now calculated using only real invoice lines, excluding section headers and note lines. This prevents display-only content from affecting financial totals, keeping sales reporting aligned with accounting behavior.
Original PR description
When computing the invoiced amount for a SO, ignore the invoice's lines of `display_type` equal to `line_note` and `line_section` This matches the accounting features which always ignore such lines. **Current behavior before PR** Method `_get_sale_order_invoiced_amount` includes display lines. **Desired behavior after PR is merged** Method `_get_sale_order_invoiced_amount` ignores display lines. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228146
This fix prevents an error when users open sale order line details from a product form that includes invoice lines. It improves stability for customized product and sales workflows, especially when using Studio-created related views.
Original PR description
…in a dialog Steps to reproduce ================== Prerequisites: Having a product with an SO and an Invoice confirmed. Steps: - Open Product Variant Form - Open Studio - Add new O2M to SOL: Product (Sale Order Line) - Edit subview form - Add invoice_lines - Quit Studio - Click on SOL on Product view → It crashes => TypeError: can't access property "context", ctx.env.searchModel is undefined Cause of the issue ================== In form view dialogs, we don't have a search model Solution ======== We should use the context from the current record opw-4921186 Forward-Port-Of: odoo/enterprise#95259