Daily updates from Odoo
Thursday, September 4, 2025
15 changes · saas-18.3
Resolved issues and error corrections
USB devices with missing or invalid product information no longer cause the hardware interface to crash. This improves reliability when connecting varied USB peripherals to Odoo IoT setups.
Original PR description
Before this commit, if a USB device did not provide a valid product string, the USB interface would crash trying to access it. After this commit, we wrap the access in a try/except to prevent the crash. task-5060062 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The accounting invoice menu now triggers the correct action when users refresh outgoing e-invoice statuses. This prevents the system from accidentally starting the incoming invoice fetch flow and helps users get the expected status updates.
Original PR description
[FIX] account: add refresh_out_einvoices_status to fetch_einvoices_cog The fetch_einvoices_cog OWL component was missing the trigger for button_refresh_out_einvoices_status, as it always called button_fetch_in_einvoices. Now the function will call a getter to allow easier customization by overriding buttonAction, and it now supports the missing flow for button_refresh_out_einvoices_status. task-4714467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Test preparation now skips an expensive tag lookup unless it is actually needed. This should make large test runs faster and avoid failures in environments where source files are unavailable.
Original PR description
`get_method_additional_tags` can be slow when there are a lot of test to load while the feature is only needed in rare cases. This commit removes the check if the corresponding tag is not in the config test-tags. This should also solve an issue when the sources are not available. Forward-Port-Of: odoo/odoo#225109 Forward-Port-Of: odoo/odoo#225061
Empty chatbot messages are now kept from creating unwanted blank lines in live chat conversation history. This keeps chat records cleaner and easier for support teams to read.
Original PR description
When a chatbot conversation contains messages with empty body, this empty body would be converted into a newline which is not desired. This commit ensures that empty messages are not converted into newlines in the channel history. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225001
This fix makes the Discuss welcome screen rely on a shared application setting instead of temporary screen state. This prevents the welcome page from appearing or disappearing unpredictably, improving reliability for users opening Discuss.
Original PR description
Before this commit, whether to display the welcome view was based on a component state, so it was dependent on the lifecycle of components This commit changes the condition so that it relies on the store which should prevent inconsistent state. https://runbot.odoo.com/odoo/error/111051 Forward-Port-Of: odoo/odoo#225453 Forward-Port-Of: odoo/odoo#225325
This fix restores the expected handling of extra details sent with custom website analytics goals in Plausible. Businesses relying on custom conversion tracking, such as cart-related goals, will again receive structured information instead of unusable text values.
Original PR description
Since commit b9b3a60, conversion to owl, the props are sent as string instead of object.
This commit restores old behaviour of using a JSON object for props.
Before commit b9b3a60:
> $($0).data('event-params')
{Type1: 'cart'}
After commit b9b3a60:
> $0.dataset.eventParams
'{"Type1": "cart"}'
After this commit:
> JSON.parse($0.dataset.eventParams)
{Type1: 'cart'}
opw-oxpslide-stbu
Forward-Port-Of: odoo/odoo#225324Automated guided tours now wait until a screen update is complete before moving to the next step. This prevents tours from jumping backward or failing when a menu action changes the page while the next step is being checked.
Original PR description
Step to reproduce: - Create a tour - Add a step that click on a menuitem on the systray with a view already opened - Then add a step that click on the search bar of the view Before this commit, if the step of a tour was triggering an action (e.g.: a menuitem) and that the next step's trigger was finding an element on the view before the action has finished to update the view, then the tour was backwarding because the found element diseppeared when the new action loaded the new view. Now, the tour interactive wait that the action manager finish to update the view to be sure the get the right element for the step trigger. ISSUE: https://github.com/odoo/odoo/issues/214652 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220319
The e-waybill screen now shows errors and warnings with the correct visual colors, making it easier for users to distinguish critical issues from cautions. It also improves handling of access-related errors so users receive the right feedback instead of confusing behavior.
Original PR description
Before: --- Error and warning colors were mismatched in the e-waybill view. In this commit: --- Fixed the e-waybill view to correctly display error messages - Errors now display in red (alert-danger) :red_square: - Warnings now display in yellow (alert-warning) :yellow_square: AccessError now handled correctly. --- task-5050937 Forward-Port-Of: odoo/odoo#225288 Forward-Port-Of: odoo/odoo#225078
This fix prevents automated test runs from crashing when no test tags are configured. It improves reliability for CI setups that use pytest integrations to produce test reports.
Original PR description
Description of the issue/feature this PR addresses: The issue arises when using pytest (to get junit xml for CI) with [pytest-odoo==1.0.1](https://github.com/camptocamp/pytest-odoo) ``` run_tests def get_method_additional_tags(self, test_method): run_tests """Guess if the test_methods is a query_count and adds an `is_query_count` tag on the test run_tests """ run_tests additional_tags = [] run_tests > if 'is_query_count' in odoo.tools.config['test_tags']: run_tests E TypeError: argument of type 'NoneType' is not iterable run_tests run_tests ../custom/src/odoo/odoo/tests/common.py:778: TypeError ``` Info @wt-io-it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225496
Public visitors can now open Outlook calendar reminder links for published event tracks that include a location. This fixes an access issue that previously blocked recipients from viewing the reminder when they were not logged in.
Original PR description
In this bug, it is not possible to access outlook calender reminder, because of lack of access to event location. To reproduce: 1- Create an event and publish it 2- Create a track and publish it 3- Add a location to this track 4- Send the track using reminder template 5- Copy the calender link and paste it into incontio mode 6- As you see the access is denied To fix the issue, the location can be accessed using sudo. opw-4975617 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Sign app guided tour has been corrected so it works consistently when users learn how to prepare and sign a document. The fix handles document drag-and-drop, prefilled signatures, and repeated tour use, reducing interruptions during onboarding or testing.
Original PR description
Fix `sign_tour`. How to reproduce: 1. Go to tours in Odoo 2. Look up sign_tour 3. Click testing ( If testing stops at Sign App, change search filters or archive sign all .request records so that the…
Fix `sign_tour`.
How to reproduce:
1. Go to tours in Odoo
2. Look up sign_tour
3. Click testing ( If testing stops at Sign App, change search filters or archive sign all .request records so that the following screen displays )
<img width="780" height="591" alt="image" src="https://github.com/user-attachments/assets/b164c224-0e3e-4dce-97e6-89848263e59e" />
4. tour fails!
---
First commit
The `sign_tour` was failing after the conversion of the `sign.Template` client action to OWL. The standard `drag_and_drop` tour helper can no longer be used for automatic tour testing because the drop target is inside an iframe whose content is managed by PDF.js.
This commit fixes the tour by utilizing the custom helper function, `dragAndDropSignItemAtHeight`, to programmatically simulate the drag and drop action.
---
Second commit
The step "footer.modal-footer button.btn-primary:enabled" assumes that the Signature Dialog opened from its previous step ("Sign It" navigation button).
However, the "Sign It" navigation button does not always open the dialog.
If signing user (res.users) already has "sign_signature" data, the data will be automatically filled in to the Signature input.
Otherwise, the navigation button will open the Signature Dialog.
Luckily, we can see whether user has "sign_signature" data or not by checking if the <input data-item_type='signature'/> node has "data-auto_value" attribute or not.
We now skip the step if data-auto_value is set for signature.
---
Third commit
If `sign.template_sign_tour` has sign request, it means that the template might have a sign item because the `sign_tour` tour adds the Signature sign item to the template. (If user followed the tour)
When we're copying the sign template to trigger the template tour, we should not copy the sign item. User will be guided to add the sign item during the tour.
---
Note:
ci/security needs to be overriden as it was done for https://github.com/odoo/odoo/pull/134793#issuecomment-1711440188
---
opw-4752794
Forward-Port-Of: odoo/enterprise#92908
Forward-Port-Of: odoo/enterprise#91565The project budget dashboard now shows the correct warning color when an expense budget is exceeded. This helps users quickly spot overspending instead of seeing a misleading green status.
Original PR description
**Step to reproduce:** - install "project_account_budget" - go to accounting > accounting > Analytic Budget - create a budget of type expense,say test budget - select analytic account `Asustek - Wood…
**Step to reproduce:**
- install "project_account_budget"
- go to accounting > accounting > Analytic Budget
- create a budget of type expense,say test budget
- select analytic account `Asustek - Wood Corner`
- set budget amount => 500. open the budget
- create a new project 'test project"> open setting > Analytic Page
- add `Asustek - Wood Corner` analytic account in project field
- create a PO with amount > 500
- in analytic distribution column, add `Asustek - Wood Corner` in project column
- confirm PO and create Bill
- Go to `test project` settings > Dashboard smart button
**Observation:**
- For exceeding expense budget, we have green color in budget section
- It should be red
**Cause:**
The conditional class for budget progress was incorrectly evaluated due to missing parentheses around the `and` condition.
In expressions like:
`(true and (1 == 1 ? 'a' : 'c')) or (1 == 1 ? 'b' : 'd') → 'a'` ✅
`true and 1 == 1 ? 'a' : 'c' or 1 == 1 ? 'b' : 'd' → 'b'` ❌
Without parenthesis, the `or` clause is evaluated unexpectedly, even when the `and` branch is intended to take precedence.
This commit wraps the `and` condition in parentheses to ensure the correct evaluation order and consistent class assignment.
Budget:
<img width="1203" height="291" alt="budget 4968162" src="https://github.com/user-attachments/assets/2d8223d5-0344-4ad0-b33c-2598ea167f2d" />
Before fix:
<img width="623" height="195" alt="before fix 4968162" src="https://github.com/user-attachments/assets/4ac749bf-fa93-4835-963a-5dfbdd05559d" />
After fix:
<img width="643" height="225" alt="after fix 4968162 " src="https://github.com/user-attachments/assets/4fd228f9-e32f-48d9-b6ef-55251b21d601" />
opw-4968162
Forward-Port-Of: odoo/enterprise#91617This update fixes an automated Planning test so it uses today's actual date instead of a date-generating function. This helps prevent false build failures and keeps validation of the Planning app more reliable.
Original PR description
Now the tour use edit with the date of today and not a function runbot build error: 164213 Forward-Port-Of: odoo/enterprise#93816
Users no longer encounter an error when trying to link a document to a vehicle if no vehicles have been created yet. The system now avoids opening the linking flow when there is no available record to link to, preventing a confusing crash and improving reliability in the Documents and Fleet integration.
Original PR description
*= documents_fleet Currently, when user tries to link a document with a vehicle and if there is no vehicle exists an error is raised. **Steps to Reproduce:** 1) Install `documents_fleet`…
*= documents_fleet Currently, when user tries to link a document with a vehicle and if there is no vehicle exists an error is raised. **Steps to Reproduce:** 1) Install `documents_fleet` module(without Demo Data). 2) Open Documents App. 3) Upload a file in `Fleet` folder. 4) Select the uploaded file and click on `'Link to a vehicle'` button. Error: `ValueError: invalid literal for int() with base 10: 'False'` Root Cause: The `link_to_record` method attempts to find the first record of the target model to use as a default value when opening the linking wizard. If no records exist, the search returns an empty recordset, and accessing `.id` at [1], on it results in the value `False`. The code then incorrectly constructs a default reference string like `fleet.vehicle,False`. The wizard crashes when it tries to parse this string and convert the `False` part to an integer. Solution: This commit prevents error by ensuring that the user cannot link a document to a model without existing records. [1]- https://github.com/odoo/enterprise/blob/83640d21b2c31ed9d572c48e02a9aeea9eb1607b/documents/models/documents_workflow_rule.py#L113 sentry-6792079496 Forward-Port-Of: odoo/enterprise#93738 Forward-Port-Of: odoo/enterprise#91888
This fix ensures a quality control test works reliably when the module is installed on its own without demo data. It prevents test-only failures linked to missing stock permissions, improving maintenance confidence without changing day-to-day user behavior.
Original PR description
## Issue:
The test `test_receipt_validation_triggers_serial_number_label_print` fails when running `quality_control` alone without demo data
## Cause:
The user is missing the group `stock.group_production_lot`, that enable serial number printing
As a result, the condition `self.env.user.has_group('stock.group_production_lot')` in `stock.picking` `_get_autoprint_report_actions()` is not satisfied
The `button_validate()` in `stock.picking` will have an empty report_actions and will not print anything
The Demo data that allow the test to work is in `stock`
https://github.com/odoo/odoo/blob/9b08449f25cd16dc15117d305726380298c313d8/addons/stock/data/stock_demo.xml#L176-L182
## Steps to reproduce:
- Install only `quality_control` (no demo data)
- Run the test `test_receipt_validation_triggers_serial_number_label_print`
related-to: https://github.com/odoo/enterprise/pull/90134
opw-4790427
Forward-Port-Of: odoo/enterprise#93799
Forward-Port-Of: odoo/enterprise#93296