Tuesday, July 29, 2025
10 changes · saas-18.3
Enhancements to existing features
Point of Sale payments in Argentina, Peru, and Uruguay now request an invoice by default. This helps ensure sales generate the required electronic documents for local compliance.
Original PR description
[IMP] l10n_*: set default invoice true in pos modules: l10n_pe_pos, l10n_ar_pos, l10n_uy_pos In the POS, in the payment screen, the button to request an invoice is set to true by default. This is done because a sale in these countries must generate an electronic document. task-4612192 Forward-Port-Of: odoo/odoo#216003
Point of Sale reversal accounting entries for Indian companies now retain the product HSN code. This helps keep tax reports accurate for GSTR filing even when POS orders are reversed after a session is closed.
Original PR description
This commit ensures that the `l10n_in_hsn_code` is also included in the accounting move lines are generated for reversal entries of POS orders when the The company’s fiscal country is India. Key changes: * Introduced the method `_prepare_product_aml_dict` in `point_of_sale` to centralize journal line creation logic. * Overridden the method in `l10n_in_pos` to append the `l10n_in_hsn_code` from the base values for Indian companies. * Ensured this applies consistently for both regular and reversal entries. This enhancement is essential for maintaining accurate HSN-wise reporting in GSTR filings, even when entries are reversed after session closure. OPW: 4931360 Forward-Port-Of: odoo/odoo#219038
Task searches by name no longer include task IDs in the search criteria, avoiding a slow database query pattern. This makes searching in large project task lists dramatically faster during day-to-day use and busy periods.
Original PR description
### Issue Slowness when searching for tasks in a database containing ~430K `project.task` records. ### Analysis When searching for tasks by name, the `id` field is passed to the filter domain. This results in a suboptimal query plan, as the `id` field is cast as `text` in an `OR` leaf: ` [...] AND ((unaccent((name)::text) ~~* '%test%'::text) OR ((id)::text ~~* '%test%'::text)) [...]` Furthermore, since refactoring the web routes, the necessity of searching for an `id` in the search form has greatly diminished. ### Benchmarks Benchmarking the generated query using `\timing` in `psql`: | Number of records | Before | After | | -- | -- | -- | | 430K | 2.3s | 3ms | During high-usage periods, the query took up to ~10.8 seconds. #### References opw-4845258 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219959 Forward-Port-Of: odoo/odoo#219901
Discuss call tests now automatically skip peer-to-peer checks when the test environment has no network connection. This avoids false failures in automated testing, helping teams keep development pipelines stable without changing the user experience.
Original PR description
This commit adds a skip to peerToPeer tests for when there is no network as the webRTC API needs to have at least a local network to generate ICE candidates. Forward-Port-Of: odoo/odoo#220093 Forward-Port-Of: odoo/odoo#219587
When users choose an account while reconciling a bank statement line, any default tax configured on that account is now applied automatically. This reduces manual entry and helps keep accounting data consistent during bank reconciliation.
Original PR description
In this PR: - When setting the account from the bank reconciliation widget (using 'Set Account'), the default tax set on that account will now be automatically applied to the bank statement line. task-4930945
The Knowledge editor now keeps extra space at the bottom of long documents, making it easier to scroll and position text comfortably while writing. This restores a helpful editing behavior that was lost during the editor migration.
Original PR description
With version 18.1, we migrated from legacy HTML editor to the new one. As part of this upgrade, we revised the templates and reworked the wysiwyg helper. During the migration, several CSS classes were altered or removed. One issue that emerged is that the CSS rules intended to add bottom padding to the editor area are still present in the stylesheet but no longer apply to any element. These rules were especially helpful when working with long-form content, as they allowed users to scroll further and bring the end of the text closer to the center of the screen - improving readability and enhancing the editing experience. To fix this, we'll update the relevant CSS selector to ensure the padding is correctly applied to the editable area. See: odoo/enterprise#67083 Task-4636494 Forward-Port-Of: odoo/enterprise#90770 Forward-Port-Of: odoo/enterprise#86223
VoIP call sessions are now cleaned up automatically when a call ends, rather than relying on each separate call-ending action to do it. This reduces the chance of leftover session data and helps keep calling behavior consistent for users.
Original PR description
Instead of clean session in every function that can end a call, it's better that we do it when call model state is changed.
The accounting dashboard now prevents users from clicking “Fetch Transactions” multiple times for the same bank. This avoids duplicate requests to bank connection providers, reducing the chance of errors and improving reliability.
Original PR description
The button `Fetch Transactions` shown on a bank in the accounting dashboard can possibly be clicked multiple times in a row by a user. This would cause several calls to the provider causing potential errors. This commit prevents the user from being able to fetch transactions multiple times by removing this button once clicked. task-4900188 Forward-Port-Of: odoo/enterprise#89127
The database expiration message now better reflects the payment timeline by accounting for the grace period after the next invoice date. This helps customers understand when action is needed and encourages earlier payment before access is at risk.
Original PR description
Previously, the database expiration date was set to the same date as the expiration field, which is now defined as 15 days after the next invoice date. Issue: Users tend to wait until the last minute to pay. This improvement aims to better handle expiration timing and encourage timely payments. TaskID: 4384877 Forward-Port-Of: odoo/enterprise#90931 Forward-Port-Of: odoo/enterprise#90664
When users choose an account while reconciling bank statement lines, any default tax configured on that account is now applied automatically. This reduces manual entry, improves consistency, and helps avoid missed taxes during bank reconciliation.
Original PR description
In this PR: - When setting the account from the bank reconciliation widget (using 'set_account'), the default tax set on that account will now be automatically applied to the bank statement line. task-4930945