Daily updates from Odoo
Monday, November 10, 2025
22 changes
1 change
Enhancements to existing features
This change makes checking bank statements for errors significantly faster. It reduces the database work needed for this task, which helps the system respond more quickly and lowers load on the database.
Original PR description
Description ----------- Avoid self-join of `account_bank_statement` that is done with a `Nested Loop` due to the `LATERAL`. Even if correlated, it requires two separate accesses to its index. Replaces it with a window function + `LAG` partitioned by the `journal_id`. This leads to a simpler plan (lower cost) and working in-memory instead of accessing disk pages (lower IO contention). Benchmark --------- On a database with 46k `account_bank_statement`, calling `_get_invalid_statement_ids` for all statements took: | [Before](https://explain.dalibo.com/plan/7605a4ddc42afbcf) | [After](https://explain.dalibo.com/plan/88d6ac1gee37aha3) | Speed-up | |--------|-------|----------| | 146ms | 72ms | 2x | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232980
1 change
Enhancements to existing features
This change speeds up the check that finds invalid bank statements. It reduces database work, which makes the validation run about twice as fast and lowers load on the system.
Original PR description
Description ----------- Avoid self-join of `account_bank_statement` that is done with a `Nested Loop` due to the `LATERAL`. Even if correlated, it requires two separate accesses to its index. Replaces it with a window function + `LAG` partitioned by the `journal_id`. This leads to a simpler plan (lower cost) and working in-memory instead of accessing disk pages (lower IO contention). Benchmark --------- On a database with 46k `account_bank_statement`, calling `_get_invalid_statement_ids` for all statements took: | [Before](https://explain.dalibo.com/plan/7605a4ddc42afbcf) | [After](https://explain.dalibo.com/plan/88d6ac1gee37aha3) | Speed-up | |--------|-------|----------| | 146ms | 72ms | 2x | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232980
12 changes
Enhancements to existing features
Australian payroll now handles flexible employee benefits through salary-rule based inputs rather than separate employee version fields. This aligns the localization with the newer benefits system, making benefits easier to manage consistently in payroll calculations, reporting, and related accounting flows.
Original PR description
purpose: adapting the new system of flexible benefits coming from salary rules for au localization - adapted the fields in `hr.version` to become salary rules with `condition_select` as `property_input` which makes it appear in the input section Task: 5122332
Employee payslips in India payroll no longer show internal salary rule descriptions meant for HR teams. This keeps payslips clearer for employees and prevents long internal notes from being cut off in the document.
Original PR description
Salary rule descriptions are intended for HR officers, not employees. Displaying them on the employee payslip is unnecessary and causes cropping issues when the text is too long. task-4984330
This update prepares Studio-related test environments for offline behavior, helping ensure the interface works reliably when offline support is enabled. It also makes an existing Studio test more dependable by avoiding clicks on a disabled menu icon.
The Indian Payroll payment advice wizard now lets users indicate whether a payment is made by cheque. When cheque payment is not used, the report hides cheque details instead of showing placeholder text, making payment advice documents clearer and more professional.
Original PR description
This commit allows the payment advice wizard to have the option of not using a cheque and therefore hiding the cheque details from the report if it is not needed instead of having XXXXXXXX as a placeholder. Task-ID: 5231902
Payroll now alerts users when a payslip's net pay is zero or negative. This helps payroll teams spot unusual or potentially incorrect payslips before processing, reducing the risk of payment mistakes.
Original PR description
If the net pay for the payslip is either less than or equal to zero, a warning message will appear
Saudi payroll employer costs now include allowances and company-paid items such as work permits, iqama, and medical insurance, giving businesses a fuller view of employment expenses. Immigration-related employee fields are also shown only when relevant and grouped with employer costs for clearer payroll management.
Original PR description
Previously, the Employer Costs section only considered the employee's basic wage and did not include additional expenses such as allowances or work permit/visa-related fees. This improvement updates the employer cost calculation to include: - Allowances (housing, transportation, and other) - Work permit, iqama, and medical insurance costs At the payslip level, the following salary rules now contribute to the employer costs: - Net - GOSI - Company Contribution - GOSI - Employee Contribution - Medical Insurance (Company Contribution) - Iqama (Company Contribution) - Work Permit (Company Contribution) Additionally: - Fields related to immigrant workers are now only visible for non-Saudi employees. - These fields have been moved under the Employer Costs section. Task - 5064850
The UAE payroll payment report has been adjusted to match Dubai Islamic Bank's expected WPS format, helping businesses submit salary payments with fewer bank rejections. A scheduled monthly update was also added to keep employee leave day values current for payroll processing.
Original PR description
The format of the payment report has been adjusted to adhere to the expected format of Dubai Islamic Bank.
The Payroll menu item previously called "Employment Types" is now labeled "Contract Types." This makes the wording consistent with the Employee module and helps users find the same concept under the same name across the system.
Original PR description
- Renamed the (hr_contract_type_action) menu item from (Employment Types) to (Contract Types) for consistency with the Employee module. task-5118865
Payroll percentage and rate fields are now stored consistently as fractional values and displayed using the percentage format. This improves clarity and consistency across payroll screens, reports, demo data, and tests in several country-specific payroll modules.
Original PR description
Generalised the definition of fields displayed as percentages to be fractional numbers (ratio of 1.0) rather than whole numbers (ration of 100.0), and used the percentage widget to display them all. task-4987743
Saudi Arabia payroll now has a dedicated payslip printout that better matches local payroll expectations. The report removes fields that are not needed for this localization and adjusts the layout to make payslips clearer and more relevant for Saudi employees and payroll teams.
Original PR description
- Introduce a dedicated payslip printout tailored for Saudi localization. - Remove unnecessary fields from the default format and adjust the layout to match Saudi payroll requirements. Task: 5126583 Forward-Port-Of: odoo/enterprise#96373
This update improves how records are loaded in several Odoo apps, reducing unnecessary database work while keeping computed information accurate. Users should see more reliable behavior in affected areas such as projects, appointments, payroll, assets, knowledge, and Amazon sales integrations.
Original PR description
Fix a computed field which is now called with several records because of better prefetching.
The GST report columns for India have been reordered so IGST appears before CGST. This aligns Odoo reports with the government portal layout, making comparisons and submissions easier for users.
Original PR description
In this PR, the IGST column is moved before the CGST column to match the government portal report layout and provide a better user experience. task-5244841 Forward-Port-Of: odoo/enterprise#99062
6 changes
Enhancements to existing features
The Saudi localization demo data has been updated so the Sandbox uses current company, partner, and tax information. This helps the latest validation checks run cleanly and avoids warning messages in demo setups.
Original PR description
Our demo data for the Sandbox was outdated, and the new validations for the Other Seller ID triggered warnings. This commit updates the data to include the latest taxes, partners, and company details to ensure all validations pass. task-5152670 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The bank statement validation check was optimized to run much faster by using a more efficient database query. This reduces processing time and database load, which can help the accounting app respond more quickly when checking many statements.
Original PR description
Description ----------- Avoid self-join of `account_bank_statement` that is done with a `Nested Loop` due to the `LATERAL`. Even if correlated, it requires two separate accesses to its index. Replaces it with a window function + `LAG` partitioned by the `journal_id`. This leads to a simpler plan (lower cost) and working in-memory instead of accessing disk pages (lower IO contention). Benchmark --------- On a database with 46k `account_bank_statement`, calling `_get_invalid_statement_ids` for all statements took: | [Before](https://explain.dalibo.com/plan/7605a4ddc42afbcf) | [After](https://explain.dalibo.com/plan/88d6ac1gee37aha3) | Speed-up | |--------|-------|----------| | 146ms | 72ms | 2x | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232980
The IGST column has been moved before the CGST column in Indian GST reports. This makes the reports match the government portal more closely and improves readability for users reviewing tax data.
Original PR description
In this PR, the IGST column is moved before the CGST column to match the government portal report layout and provide a better user experience. task-5244841
The VoIP app now uses the official country data stored in Odoo instead of a hard-coded flag mapping. This fixes cases where some places were shown with the wrong flag or country name, making contact information more accurate and consistent.
Original PR description
Previously, we hard-coded the URL according to the country code to display a country flag. However, this is not the case for all countries. Countries like Bonaire, Sint Eustatius, and Saba use the flag of the Netherlands. Additionally, Bonaire, Sint Eustatius, and Saba are shown as Caribbean Netherlands, which is inconsistent with the data from our res.country model. This commit changes it to use the data from res.country. Task-5207454 Forward-Port-Of: odoo/enterprise#99042 Forward-Port-Of: odoo/enterprise#98756
When a website uses the cookie bar, new Google Fonts will now default to not loading directly from Google. This helps websites stay more aligned with GDPR expectations, and the updated help text makes the privacy impact clearer for users setting up fonts.
Original PR description
__Current behavior before commit:__ When the cookies bar is installed, Google fonts are still loaded from Google servers by default, which may violate GDPR requirements. See the PR adding the "Serve from Google"[1] option for more details. __Description of the change:__ If the cookies bar is enabled, it likely means that the website needs to be GDPR compliant. In this case the "Serve from Google" option is disabled by default when adding a new Google Font, preventing it from being served from Google servers. The tooltip and setting help text are also updated to clarify GDPR implications. [1]: https://github.com/odoo/odoo/pull/101129 task-5111612
Discuss now includes a dedicated live chat category for conversations marked as "Looking for Help." Agents also see a star indicator on chats that match their expertise, helping them spot and respond to the most relevant conversations faster.
Original PR description
Add a live chat category in the Discuss app that allows live chat agents to easily identify conversations marked as "Looking for Help." A star icon is added next to conversations that match the agent's expertise, making it easier to assist with conversations related to their area of expertise. part of task-5190237.
1 change
Enhancements to existing features
The bank statement validation process was optimized to run faster on large databases. This reduces waiting time for users and lowers database load, helping the system stay more responsive.
Original PR description
Description ----------- Avoid self-join of `account_bank_statement` that is done with a `Nested Loop` due to the `LATERAL`. Even if correlated, it requires two separate accesses to its index. Replaces it with a window function + `LAG` partitioned by the `journal_id`. This leads to a simpler plan (lower cost) and working in-memory instead of accessing disk pages (lower IO contention). Benchmark --------- On a database with 46k `account_bank_statement`, calling `_get_invalid_statement_ids` for all statements took: | [Before](https://explain.dalibo.com/plan/7605a4ddc42afbcf) | [After](https://explain.dalibo.com/plan/88d6ac1gee37aha3) | Speed-up | |--------|-------|----------| | 146ms | 72ms | 2x | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232980
1 change
Enhancements to existing features
This change speeds up the calculation of accounting move amounts by preparing required data in advance instead of repeatedly loading it on demand. It significantly reduces processing time, memory use, and database queries when handling very large reconciliations, making large accounting operations much faster and more efficient.
Original PR description
Currently performance on `_compute_amount()` is bottlenecked by `__get__()` calls on fields on `line_ids`. We tackle this bottleneck by warming the cache with `fetch()` Benchmark on reconciling 2 account moves with ~70k lines each | |Total Time|Allocated Memory|Queries| |----------|----------|----------------|-------| |Before |43.23s |2GB |993 | |After |18.60s |1GB |693 | opw-5098543