Thursday, July 31, 2025
19 changes · saas-18.3
Enhancements to existing features
This update improves Odoo’s internal Hoot testing tools so automated tests start faster, report results more reliably, and use less memory in headless runs. It also adds small usability improvements for developers, while keeping the changes limited to the unit testing ecosystem to reduce product risk.
Original PR description
## Pull Request HOOT (PRHOOT) 35 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220298 Forward-Port-Of: odoo/odoo#218770
This update adds a new extension point in the stock module so custom implementations can adjust how dates are calculated during push rules. It does not change standard behavior, but makes future customizations safer and easier to maintain.
Original PR description
This eases inheritance. No behavior is changes with this PR, it is just a new inheritance point. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217888
Resolved issues and error corrections
The voice and video settings no longer show an unexpected error when testing audio sensitivity without microphone permission. Instead, users receive a clear notification, making the setup experience smoother and less confusing.
Original PR description
**Before this PR:** When you click on the `Test` Audio Sensitivity button in the voice & video configuration it would throw traceback if host doesn't have microphone permission which wasn't handled and was being displayed as an Uncaught Error. **This PR** handles this traceback and displays a toast notification. Task-4966597 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221187
Point of Sale reports now show the same payment method information as the order search view for orders paid with multiple methods. This reduces confusion when reviewing or grouping sales by payment method, even though mixed-payment orders still have an inherent reporting limitation.
Original PR description
Previously, orders with multiple payment methods showed different methods in the search view and the report. This remains a technical limitation of multi-method payments, but the behavior is now consistent. Steps to reproduce: ------------------- * In PoS create and validate an order paid by cash AND card * In the backend go to Reporting > Orders * Select Group By : Payement Method * Open the Report of your order > Observation: On the report, the method usually was the first one used but not in the search view opw-4851249 Forward-Port-Of: odoo/odoo#221289 Forward-Port-Of: odoo/odoo#219021
Website editors can now move through carousel slides while working in translation mode. This ensures all carousel content is reachable for translation, preventing untranslated slides from being missed.
Original PR description
Since [1], in translation mode, only the first slide of a carousel was accessible for translation, as the native Bootstrap behavior was disabled by the translation overlay. This commit restores the ability to slide through carousel items. [1]: https://github.com/odoo/odoo/commit/b9b3a605e0f4c5da3a258c980107d6162da7f44f Forward-Port-Of: odoo/odoo#221205
Delivery slips using the DIN 5008 layout for dropship orders no longer show the vendor's VAT beneath the customer's address. This prevents confusion for customers and ensures the printed delivery document only shows the relevant address information.
Original PR description
When printing the delivery slip of a dropship operation using the DIN 5008 layout, the customer's address is correctly displayed, but the VAT of the vendor is shown beneath it. This is misleading.…
When printing the delivery slip of a dropship operation using the DIN 5008 layout, the customer's address is correctly displayed, but the VAT of the vendor is shown beneath it. This is misleading. Actually we do not need vat at all.
**Step to reproduce:**
- Install `l10n_din5008_stock` and `sale_management`
- Go to setting
-> configure document layout -> set `DIN 5008` as layout
-> enable `dropshipping`
- Create a product, enable Purchase, and select Dropship route.
- Assign Azure Interior as the vendor in purchase tab.
- Create a SO with that product and Deco Addict as customer, confirm it
- Click on purchase smart button, confirm it, click on dropship smart button
- print delivery slip Observation: Below the customer's address, the vendor's VAT is printed.
**Issue:**
- issue lies in this condition
- `not (o.picking_type_id.code == 'outgoing' and main_address.id != o.partner_id.commercial_partner_id.id)`
- as `o.picking_type_id.code` is `dropship`
- here, condition evaluates to true, which incorrectly assumes the customer and vendor is same, and prints partner i.e vendor's VAT
**Fix:**
- no need to display vat,so we remove it
<img width="1519" height="244" alt="image" src="https://github.com/user-attachments/assets/d8630fa5-c568-4208-a97e-7e4ceb371109" />
**Before**
<img width="803" height="366" alt="image" src="https://github.com/user-attachments/assets/e2148bb0-7413-4efe-b312-ba7a577e0b62" />
**After**
<img width="615" height="244" alt="image" src="https://github.com/user-attachments/assets/526cfae3-4d8b-4755-b59c-54dfce79526c" />
opw-4929680
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#218757The payment widget no longer shows bank statement lines, keeping the displayed payment information focused on relevant payment entries. This reduces confusion for accounting users when reviewing or reconciling customer and vendor payments.
Original PR description
Removed the bank statement lines from the payment widget Enterprise: https://github.com/odoo/enterprise/pull/91222 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website editor now applies the disabled look consistently to subtle input groups, including labels placed before or after different input types. This removes visual inconsistencies and makes disabled form fields clearer for users.
Original PR description
Prior to this commit, the disabled state of subtle input-group worked partially. Depending on the type of input and the position of the label (before or after the input), the disabled style was not correctly applied to the label. This commit adapts the style to cover all possibilities. task-4930086 | Before | After | |--------|--------| |  |  | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217891
The test invoice XML was updated so it uses a product that exists in the test setup. This ensures the automated test checks the intended tax prediction behavior instead of passing for the wrong reason, improving confidence in electronic invoicing tax handling.
Original PR description
Previously, the test XML file included a product that did not exist in the test environment. As a result, on import the aml could not retrieve the product. Due to this, the _predict_taxes method in _onchange_name_predictive was invoked, which ended up assigning the correct tax. This caused the test to pass without actually verifying the behavior of the _predict_specific_tax. With this **PR** test xml has now been updated to properly focus on and validate the _predict_specific_tax method behavior. **task**-4943015 Enterprise PR - https://github.com/odoo/enterprise/pull/91224 Forward-Port-Of: odoo/odoo#219911
This fix prevents popover windows from crashing when a user navigates away while one is still open. It makes the interface more reliable by ensuring the close behavior always receives a valid page element, even when no actual click occurred.
Original PR description
The popover component's 'closeOnClickAway' prop is expected to receive an HTML element as first argument. Before this commit, when navigating with an open popover, it tried to close by giving no argument to the callback, as it is expected to be an element on which the user clicked, that would cause the popover to close. The issue is that even though there was no click per se, the callback still expects an element and may crash when given none. This commit arbitrarily gives the document element (<html>) to the callback when the window is the event target to prevent such crashes. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects the exemption reason code used for international passenger transport in the Saudi e-invoicing localization. It helps ensure invoices use the proper VAT exemption classification, reducing compliance and reporting errors.
Original PR description
The code for The international transport of Passengers was wrong. It was VATEX-SA-34-1 instead of VATEX-SA-34-2. This commit fixes the code. task-id: 4949581 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219981 Forward-Port-Of: odoo/odoo#219301
This fixes a sales test so invoice creation is called with the expected type of data. It helps prevent failures for custom sales workflows that use alternative invoice creation methods.
Original PR description
At [1], `_create_invoices()` expects a recordset, not a dictionary. The test case currently passes because the `advance_payment_method` is set to `percentage`. However, if someone overrides `_create_invoices()` and uses a different `advance_payment_method` (e.g., 'delivered'), it will fail. Traceback: --- `AttributeError: 'dict' object has no attribute '_create_invoices'` [1]- https://github.com/odoo/odoo/blob/4cd24dc73d46b714cd5a764ed3f003e9507b0777/addons/sale/tests/test_accrued_sale_orders.py#L150-L152 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220755
This update adjusts CRM activity checks to match the newer two-step loading process. It helps ensure CRM activity views continue to work reliably, including records that may be active or archived.
Original PR description
The crm activity action is now loaded in two steps Also check that the domain gets `active in [true, false]` added while we're here See linked community pull request task-4951716 Forward-Port-Of: odoo/enterprise#90956 Forward-Port-Of: odoo/enterprise#90762
The salary configuration no longer silently selects the first available state when no state is shown as selected. This prevents newly created employee records from being assigned an unintended state, improving data accuracy.
Original PR description
When using the salary config, the state (private_state_id) shows that no state is set, but the selector actually thinks the first element is selected. So when the employee is created, the state is set anyway. This forces the selector to not have anything selected by default. Task: 4904118
This update prevents an error when users mention someone from the full message composer. It ensures AI-powered mention suggestions still work even when no discussion thread is available, improving reliability in everyday messaging.
Original PR description
**Purpose of this PR:** Handled mention suggestions with optional chaining as thread is absent in MentionList. since we are using suggestions without thread in full composer.
This fix ensures Odoo uses the right accounting entry when predicting taxes on accounting documents. It prevents tax prediction from failing unexpectedly, helping accountants get more reliable automated tax suggestions.
Original PR description
Previously, when _predicted_field was invoked from _predict_specific_taxes, self did not have an associated move_id. As a result, _build_predictive_query was unable to construct the correct query, causing the prediction logic to fail and return False. With this fix, the correct move_id is passed through the context and later retrieved in _predicted_field. This ensures that the prediction logic uses the intended move_id and functions as expected. **task**-4943015 Community PR - https://github.com/odoo/odoo/pull/219911 Forward-Port-Of: odoo/enterprise#91224
This update corrects an issue that caused automated checks to fail when preparing default values in Swiss payroll ELM transmission screens. It helps keep Swiss payroll reporting workflows stable and prevents avoidable errors during configuration or record creation.
Original PR description
https://runbot.odoo.com/odoo/runbot.build.error/115307 Forward-Port-Of: odoo/enterprise#90487
Users can now edit bank-related fields in Studio without encountering an error when those fields use tag-style selections. This prevents a crash in the Contacts accounting tab and keeps Studio customization workflows running smoothly.
Original PR description
Example of steps: - Install contacts, web_studio and accounting - Go to contacts, accounting tabs - Open web_studio and click on Banks field - Traceback The error stems from the fact that we are using a widget in an o2m field that uses a placeholder that is not defined for o2m. One solution is to add the placeholder attribute for o2m in addition to m2m and m2o. opw-4937447
Long descriptions in the Italian Libro Giornale PDF report now wrap correctly instead of being cut off. Column spacing was also stabilized so the exported PDF is easier to read and matches expected formatting.
Original PR description
Issue: In the Libro Giornale report (PDF), long descriptions in the 'Name' column were getting cut off, and column spacing appeared inconsistent in the generated PDF. These issues reappeared due to recent layout changes from commit https://github.com/odoo/enterprise/commit/233e82cf4e6908502a580be4bcd77fadd2aada53, which unintentionally removed previous fixes made to handle such cases. Fixes Applied: - Reintroduced the `o_overflow_name` class on the 'Name' column to ensure long descriptions wrap correctly and are not truncated in the PDF export. - Applied the `o_fixed_column_width` class to the 3rd column (currently 'Account Code') to resolve inconsistent spacing between columns caused by `wkhtmltopdf`. Forward-Port-Of: odoo/enterprise#91231