Daily updates from Odoo
Friday, October 31, 2025
8 changes · 19.0
Enhancements to existing features
The Phone app now opens much faster for HR officers by improving how access checks are handled behind the scenes. This reduces waiting time dramatically on large databases while keeping the same access behavior for users.
Original PR description
Description ----------- The rule `voip_call_hr_access_rule` is added with an `OR` to `voip_call_rule_user`, but with the presence of the `One2many` `employee_ids` in the domain, the final query leads to a bad plan where Postgres does a full Seq.Scan on `voip_call` to then post-filter based on `user_id`. To simplify the final query, we inline the ids that are being resolved from searching on `res.users.employee_id` (which is just a proxy for `res.users.employee_ids`). We also re-write the `ir.rule` to use this new inlining via `employee_id` and avoid using `employee_ids` which is resolved as a generic One2many from the ORM. This leads to a few more queries, but each is fast and trivial to process. Benchmark --------- On a database with over 10M `voip.call` and `res.users`, for a Hr Officer, to open the Phone's app default list view with no default filter (the default setup), took: | Before | After | Speed-up | |--------|-------|----------| | 13.3s | 80ms | 162x |
HR users can open the Phone app much faster on large databases. The access check was optimized to avoid slow database scanning, reducing load times from seconds to milliseconds in the benchmark.
Original PR description
Description ----------- The rule `voip_call_hr_access_rule` is added with an `OR` to `voip_call_rule_user`, but with the presence of the `One2many` `employee_ids` in the domain, the final query leads…
Description ----------- The rule `voip_call_hr_access_rule` is added with an `OR` to `voip_call_rule_user`, but with the presence of the `One2many` `employee_ids` in the domain, the final query leads to a bad plan where Postgres does a full Seq.Scan on `voip_call` to then post-filter based on `user_id`. To simplify the final query, we inline the ids that are being resolved from searching on `res.users.employee_id` (which is just a proxy for `res.users.employee_ids`). We also re-write the `ir.rule` to use this new inlining via `employee_id` and avoid using `employee_ids` which is resolved as a generic One2many from the ORM. This leads to a few more queries, but each is fast and trivial to process. Benchmark --------- On a database with over 10M `voip.call` and `res.users`, for a Hr Officer, to open the Phone's app default list view with no default filter (the default setup), took: | Before | After | Speed-up | |--------|-------|----------| | 13.3s | 80ms | 162x | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
VoIP browser tabs now try to unregister when closed and registrations expire sooner if cleanup does not happen. This helps customers avoid hitting provider limits on active phone registrations, especially when users open multiple Odoo tabs.
Original PR description
Some providers like OnSIP allow for a limited number of registrations per user. This is a problem in Odoo because each tab opened creates a new registration for one hour. This commit mitigates the problems in two ways: - Sends an "unregister" request onbeforeunload to try to invalidate the registration upon closing the tab. - Reduces the TTL of registrations so that they get invalidated quicker in case the unregistration failed. Forward-Port-Of: odoo/enterprise#98413 Forward-Port-Of: odoo/enterprise#97963
The mail call permission dialog has been resized to remove unnecessary empty space. This creates a cleaner, more focused experience when users are asked to grant call permissions.
Original PR description
**Purpose of this PR:** Reduce the size of the call permission dialog to eliminate extra empty space on the right side. **Before** <img width="1355" height="643" alt="image" src="https://github.com/user-attachments/assets/e8366841-d07e-4c05-8f88-8710631bfd57" /> **After** <img width="1901" height="932" alt="image" src="https://github.com/user-attachments/assets/9e13f665-8028-4c61-9170-9eaf9d3b00a0" /> task-[5091767](https://www.odoo.com/odoo/project.task/5091767) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Live chat transcripts now add spacing when the speaker changes, making saved conversation histories easier to read. This helps sales or support teams quickly understand the flow and context when reviewing chats in related records such as leads.
Original PR description
When converting a livechat session history into a description (e.g., for leads), messages from different authors were shown consecutively without separation, making it difficult to follow the conversation flow. This PR inserts a line break whenever the message author changes, making the transcript easier to read and providing clearer context shifts. Task-5217172 **Before:** <img width="530" height="463" alt="image" src="https://github.com/user-attachments/assets/29304bc5-d8e4-470a-adc0-bf6d1d963bcf" /> **After:** <img width="491" height="586" alt="image" src="https://github.com/user-attachments/assets/7a019672-84fa-457d-ae2f-48bb4a3506a3" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Purchase catalog suggestions now show all recommended products on the first page when suggestions are enabled, instead of hiding some behind pagination. The change also improves performance and makes bulk adding suggestions respect the selected purchase order section.
Original PR description
Description of the issue/feature this PR addresses: Improves purchase catalog suggestions, adding a filter on products with `suggested_qty > 0` on suggestion toggle. This ensure all suggested products will be shown on the first catalog page Perf improvements on both front end (reducing number of RPCs) and backend (filtering domain as much as possible on search method). Current behavior before PR: Before, if there were more products than the paging limit, not all suggested product would be pulled to the front (couldn't order a view by a computed field.) Desired behavior after PR is merged: All suggested products are shown on first page. task#5114649 previous PR: odoo/odoo#218343 And separated all the refacto on a beanch on master: https://github.com/odoo/odoo/pull/232456 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The depreciation schedule report now defaults to the previous financial year instead of the previous month. This better matches how businesses typically use the report for year-end filings such as tax returns and BNB attachments.
Original PR description
The depreciation schedule report is usually is consulted to be attached to the BNB and/or tax return of a completed financial year. For an ongoing financial year, it has very little value. Therefore default opening of the depreciation schedule report is changed from previous month(default value) to previous year. task-5167082
Mass mailing now better supports older email templates during the move to Odoo 19. Users can still view legacy email content, receive clearer warnings when parts are outdated, and avoid several editing crashes.
Original PR description
This work's purpose is to prepare `mass_mailing` for the upcoming migration to Odoo 19.0. Existing mail content produced with the old editor is not upgraded, and users who end up editing such content must be informed if a snippet is not up to date. contents: - ensure that existing mail content with an obsolete mail HTML structure is properly displayed, even if the editor will not work at all, instead of showing the Theme Selector if no authorized theme is detected. - ensure that a user editing an obsolete snippet is informed and can change it to the new version - various crash fixes See commits messages for further detail. task-5134263