Daily updates from Odoo
Monday, July 7, 2025
20 changes · saas-18.3
Enhancements to existing features
IoT devices are now shown with a cleaner, formatted name where supported, such as in the Point of Sale configuration dropdown. This makes it easier for users to identify the device, its connection, and its IoT box at a glance.
Original PR description
Before this commit, IoT device names would dislplay in the format '[iotbox] Device Name'. After this commit, in environments with formatting enabled (such as the device dropdown when configuring in POS), we show the name with the following format: Device Name Connection IoT box Where Connection and IoT box are using muted text. task-4922608 
The IoT app now shows each device's connection status directly in the device list. This helps users quickly identify whether devices are online or disconnected without opening individual records.
Original PR description
This PR adds the connection status to the device list view in the iot app
The IoT device screens are cleaner and easier to scan. Devices are now shown with connected items first, then by name, and their connection status is visible directly in the IoT Box form.
Original PR description
We previously added an unnecessary `group by` IoT Box in the IoT device search view. It is now removed.
We also sorted devices by connection desc and name in the iot device list view in the iot box form view,
and displayed the connected/disconnected status.
Tasks: 4922609, 4922638, 4922623The dialog shown when an IoT Box is found has been updated to make the setup experience easier for users. This should help users understand the next steps more clearly when connecting IoT hardware.
Original PR description
We updated the IoT Box found dialog in order to ease user experience. Task: 4922620
Aged receivable and payable reports now avoid an unnecessary data lookup when preparing invoice date information. This improves report loading time on large accounting databases, potentially saving several minutes for businesses with very high transaction volumes.
Original PR description
The Aged Partner reports query in `_aged_partner_report_custom_engine_common` is joining on the `account_move` table solely to get the `invoice_date` column. As this `invoice_date` is aggregated in `ARRAY_AGG(DISTINCT invoice_date)` and there's already a denormalized field `invoice_date` on `account_move_line` that is a related stored field, we can drop the join and use this field instead. This saves us the need to scan the account.move table when running the reports query. In a database with 37M amls, 10M account.move (and a really bad correlation for account_move_line.move_id), this saves us around 10 minutes for the Aged Receivable report's query. Forward-Port-Of: odoo/enterprise#89325
Resolved issues and error corrections
This update makes automated point-of-sale tests for Brazilian electronic invoicing more reliable by waiting for the product search loading indicator instead of a notification that may not appear consistently. It helps reduce false build failures without changing the user-facing POS behavior.
Original PR description
The tours regularly fail in single app builds because the "No other products found" notification is not found. Waiting on that notification is necessary because the product search happens asynchronously. I was not able to reproduce the test failure locally. But in an attempt to improve the situation this changes the approach to use the little "loading" spinner to wait on the search to finish by using Chrome.isSynced(). This method is used elsewhere in POS tests and should hopefully be less flaky. builx_error-224202 Forward-Port-Of: odoo/enterprise#88300
Credit notes in the Kenya eTIMS integration can now only be submitted when they are linked to an invoice that was already successfully submitted. This helps prevent invalid tax submissions and keeps credit note reporting aligned with eTIMS requirements.
Original PR description
To ensure credit notes are only submitted for invoices that have been submitted to eTIMS, we now restrict credit note submission to cases where the related invoice has already been successfully submitted. Forward-Port-Of: odoo/enterprise#89464 Forward-Port-Of: odoo/enterprise#89385
The intercompany rules settings label for creating invoices was renamed to make its purpose clearer. This reduces confusion for users configuring automatic invoicing between companies.
Original PR description
This commit: https://github.com/odoo/enterprise/commit/4b57698670a7762bb206ccb24417d63c8edc1a46 change the ux of the intercompany rules, but the naming is confusing for users. task-4907810
Customer statement emails now respect the sender or reply-to address configured on the email template. This prevents statements from being sent from an unexpected user address and keeps outgoing customer communications aligned with company settings.
Original PR description
Steps to reproduce:
Go to Settings> Email templates
Open the template Customer statements
Change the value in email from or reply to
Go to Accounting > Customers > Customers
Open a customer
Send a customer statement
Issue:
The address in use is not the same as we specified in the customer template
Cause:
if no email_from is provided, we will use the current partner's use's email address https://github.com/odoo/odoo/blob/cc0aaff5f93d5332c60d5bd8097173326a0a12b3/addons/mail/models/mail_thread.py#L2863-L2864
We don't check if the template has any email_from address defined
Note:
As from this fix, if no address is defined, by default it will be the `{{ object._get_followup_responsible().email_formatted }}`
opw-4864155
Forward-Port-Of: odoo/enterprise#88262Marketing automation campaign tests can once again include tracked link click flows without causing errors. The update also prevents overlapping tests for the same campaign and target, reducing unreliable results while still allowing separate tests to run in parallel.
Original PR description
Previously, marketing campaign testing (through debug) could cause an issue where tracked links could cause a traceback if a marketing activity was edited after a test was attempted. To work around…
Previously, marketing campaign testing (through debug) could cause an issue where tracked links could cause a traceback if a marketing activity was edited after a test was attempted. To work around this, #13665 deactivated link tracking in marketing campaign tests. However, this meant that flows including click actions could no longer be tested. As this issue has been resolved in odoo/odoo#48845, this commit reverts https://github.com/odoo/enterprise/pull/13665 to once again permit marketing automation testing. -- Additional changes are needed to fix other issues: Tests using one's own coordinates are prone to breaking due to newer mailing traces attaching themselves to the oldest marketing trace. This commit makes it so that marketing campaign tests for the same marketing campaign and coordinates cannot run concurrently, by cancelling older test campaigns upon starting a new one. Different tests can still run concurrently on distinct partners/leads/ etc. Additionally: - Running tests are now visible on campaigns in the "New" state; - Activities don't mark themselves as needing sync unless their campaign is in the "Running" state. task-4557855 Forward-Port-Of: odoo/enterprise#89473 Forward-Port-Of: odoo/enterprise#78793
The VoIP softphone window now uses a minus icon instead of an X to hide it during calls. This makes users less likely to worry that clicking the button will end the call, improving confidence while managing the call window.
Original PR description
The "cross icon" (X) is believed to be too "scary"; people don't dare to click it in the middle of a call out of fear of hanging up, even though the softphone window might be in their way. The "minus icon" (-) might deceive one's expectations by hiding the window rather than minimizing it, but we decided that it was still better this way. Part of task-4891947.
The VoIP interface now displays better on smaller screens, ensuring users can scroll to and access all content. Spacing, alignment, and transfer button styling were adjusted for a more consistent and usable experience.
Original PR description
This commits fixes minor layout issues: - It adapts some views that had no scroll bar when the viewport was small. This prevented access to part of content. - It revises some spacing and alignment on…
This commits fixes minor layout issues: - It adapts some views that had no scroll bar when the viewport was small. This prevented access to part of content. - It revises some spacing and alignment on small screens. - It defines small transfer buttons in "outline" style to maintain consistency with the others tabs. task-4908502 | Before | After | |--------|--------| |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  |
Tax reports now show the correct net amount when invoice lines use the same tax but different analytic distributions. This prevents overstated taxable bases in grouped tax reports, helping finance teams rely on accurate VAT or sales tax reporting.
Original PR description
### Issue: When having two lines on an invoice with the same tax and different analytic distribution, the base value is doubled on the tax report. ### Steps to reproduce: - Create a new tax on sales…
### Issue: When having two lines on an invoice with the same tax and different analytic distribution, the base value is doubled on the tax report. ### Steps to reproduce: - Create a new tax on sales (eg 10%) - Make sure the option "Analytic Accounting" is ticked in the settings - Create an invoice with two lines (eg both at $100), add the tax on both - Change the analytic distribution on both lines to different values - Confirm the invoice - Go to the tax report - Select the report "Group By: Account > Tax" - On the report the "Net" amount is doubled ($400), the tax amount is correct ($20) ### Cause: On the invoice we can see in "Journal Items" that two tax lines are created instead of one (one for each analytic distribution). The "Group By" reports are generated by [this query](https://github.com/odoo/odoo/blob/51fcbd211d2b1abf4b93becedbcbb9e03002cdd6/addons/account/models/account_move_line_tax_details.py#L92). At the [creation of the second subtable](https://github.com/odoo/odoo/blob/51fcbd211d2b1abf4b93becedbcbb9e03002cdd6/addons/account/models/account_move_line_tax_details.py#L164-L198) the move lines are linked together based among other things on the tax id. The [filter on analytic distribution](https://github.com/odoo/odoo/blob/51fcbd211d2b1abf4b93becedbcbb9e03002cdd6/addons/account/models/account_move_line_tax_details.py#L187-L191) does not apply here as `tax.analytic = False`. The result is that each tax line is linked with both base lines. The second subtable have 4 lines in this case, with each base line doubled. The result of the query have the base amount doubled. ### Solution: We cannot fix the query as there is no link to find the tax line origin amongst the base lines. The method `_read_generic_tax_report_amounts` in `account_reports` is made to fix the base values in report in case of duplicate. Until now it did not include the duplication caused by analytic distribution but duplication because of repartition lines for example. The fix is to use this method also for analytic distribution. So we add `tdr.analytic_distribution` in the `GROUP BY`. This value must be returned by the query in `account` so we add it. opw-4753676 Forward-Port-Of: odoo/enterprise#89516 Forward-Port-Of: odoo/enterprise#87404
Opening Studio from Documents after creating a shortcut no longer causes an error. This keeps document management workflows uninterrupted for users who customize Documents with Studio.
Original PR description
Steps: - Install `documents` and `studio` - Open documents, go to list view - Select a random file and 'Create a shortcut' via the actions - Try to open studio - traceback opw-4900667 Forward-Port-Of: odoo/enterprise#89508
Studio now closes the New Model dialog as soon as users confirm their choice, instead of leaving it briefly visible while the system responds. This removes a small visual flicker and makes the model creation flow feel smoother.
Original PR description
This commit fixes a minor UX issue where the "New Model" dialog in Studio would remain visible briefly after confirmation, causing a flicker while waiting for the server response. The dialog now closes immediately upon confirmation, providing a smoother user experience. task-4809049
Fixes an issue in Helpdesk reporting where opening details from Ticket Analysis could fail after grouping by ticket. The report now removes filters that only exist in the analysis view before opening the underlying tickets, making drill-down results more reliable for users.
Original PR description
Step to reproduce - Go to helpdesk - Go to Reporting > Ticket Analysis - Group by `Ticket` - Click on any of the blue bars Issue: since odoo/enterprise@d64db03f we now allow user to drill down to base model from report view, this causes issue when a field which is present in report model but not in base/main model. For now we directly pass the domain created for report view to base model. FIx: we remove such fields from domain and then load the view opw-4798353 related: https://github.com/odoo/odoo/pull/215167 Forward-Port-Of: odoo/enterprise#88356
Fixed an issue that could stop customer follow-up processing when SMS reminders were enabled. The process no longer references removed customer data, helping finance teams complete overdue invoice follow-ups without unexpected errors.
Original PR description
When clicking the `Process Follow-ups` button after creating a due invoice, a traceback could occur due to missing data on the related records. Steps to reproduce: --- - Install `account_followup`…
When clicking the `Process Follow-ups` button after creating a due invoice, a traceback could occur due to missing data on the related records.
Steps to reproduce:
---
- Install `account_followup` module(without demo)
- Go to `Follow-up Levels` and enable SMS in `15 Days`
- Create an invoice with Invoice Date(2 months ago) and Payment terms: `15 Days`
- Now, click on the selected customer and fill in all important details
- In the action button, click `Process Follow-ups`
Traceback:
---
```
KeyError: 'mobile'
ValueError: KeyError('mobile') while evaluating
'if records:\n action = records.action_manually_process_automatic_followups()'
```
The mobile field was removed from `res.partner` (see related commit), but it was not removed from here. This commit cleans it up to avoid referencing a non-existent field.
commit- https://github.com/odoo/odoo/commit/6b820eb6fc6f782ba6a83d605d87b4a1dd2a87be
sentry-6720070075
Forward-Port-Of: odoo/enterprise#89241Miscellaneous changes
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master. Forward-Port-Of
Original PR description
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master. Forward-Port-Of: odoo/enterprise#88539 Forward-Port-Of: odoo/enterprise#83421
During odoo/enterprise#60393 some po files that had been deleted in odoo/odoo#172429 and odoo/odoo#172269 were re-added in. We remove them now as they are out of date + are not reachable to be translated/fixed without a PR. Forward-Port-Of: odoo/enterprise#89301
Original PR description
During odoo/enterprise#60393 some po files that had been deleted in odoo/odoo#172429 and odoo/odoo#172269 were re-added in. We remove them now as they are out of date + are not reachable to be translated/fixed without a PR. Forward-Port-Of: odoo/enterprise#89301
Before this commit, we had the capability to view the current scale checksum by visiting `/scale_checksum`, but no way to automatically flag to the user if it had changed. After this commit, we keep track of the expected checksum and compare it to the current checksum. If they differ, the POS is no longer certified and we show an error to the user. task-4873162 Forward-Port-Of: odoo/enterprise#87866 Forward-Port-Of: odoo/enterprise#87726
Original PR description
Before this commit, we had the capability to view the current scale checksum by visiting `/scale_checksum`, but no way to automatically flag to the user if it had changed. After this commit, we keep track of the expected checksum and compare it to the current checksum. If they differ, the POS is no longer certified and we show an error to the user. task-4873162 Forward-Port-Of: odoo/enterprise#87866 Forward-Port-Of: odoo/enterprise#87726