Daily updates from Odoo
Wednesday, July 8, 2026
8 changes · 18.0
Enhancements to existing features
Attachment deletion is now much faster for Chilean electronic invoicing and stock documents. This reduces delays in databases with large numbers of invoices or deliveries, improving day-to-day performance without changing business workflows.
Original PR description
## The problem Deleting attachments checks foreign key triggers. Lookups in `account_move` and `stock_picking` tables for `ir_attachment` related fields coming from `l10n_cl_edi` overrides were slow due to missing indexes. ## The solution Added needed indexes to optimize triggers' lookups. ## Benchmark Time benchmark (deleting attachments from a customer database with 224K account moves and 204K stock pickings): |# of rows|Time (Before)|Time (After)| |----------|--------------|-------------| 100 | 29s | 16ms 1000 | 285s | 300ms OPW-6331845 Forward-Port-Of: odoo/enterprise#123252
Resolved issues and error corrections
The Peru Profit and Loss report now includes Other Operating Income when calculating gross profit and related totals. This ensures key profitability figures such as operating profit, result before taxes, and net profit reflect all relevant income accurately.
Original PR description
**Steps to reproduce:** 1. Install `l10n_pe` and switching to the Peru company. 2. Create and post a journal entry with a line on account 7520000 (Other Operating Income). 3. Open the Profit and Loss report (PE). 4. The amount appears correctly under "Other operating income" (`PE_PNL_A_5`). 5. "Gross profit", "Operating profit" , "Result before taxes" and "Net Profit" do not change when this amount is added or removed. **Issue:** The "Other operating income" line is excluded from the Gross Profit calculation, and consequently from Operating Profit and every downstream total in the PE Profit and Loss report. **Why this happens:** Gross Profit (`PE_PNL_A_4`) balance expression uses the aggregation with formula `PE_PNL_A.balance - PE_PNL_A_3.balance`, which doesn't include `PE_PNL_A_5.balance` as a term opw-6283907 Forward-Port-Of: odoo/enterprise#123063
Field Service users can now create and design a worksheet template from a task without losing the selected template afterward. This prevents extra manual re-selection and makes the worksheet setup flow more reliable.
Original PR description
[REF] worksheet: changes to widget to be made extendable Made changes to OpenStudioWidget to be made extensible across multiple modules. --- [FIX] industry_fsm_report: fixed onthe fly creation of worksheet not linked Steps to reproduce: - Open Field Service - Go to any task and create a work sheet on the fly - In the wizard click on Design Template - Close the studio and go back to task Issue: - You can see that the newly created worksheet is not set Cause: - The reason for not getting set is due to fact that worksheet template is created after we click on Design Template which is a widget of view_widgets. - Therefore the field doesn't get dirty and doesn't get saved. Solution: - Using bus to save the worksheet changes in Project record. task-3871593
This fix prevents an extra leave accrual from being added when a carryover period starts, so leave balances now grow only at the intended accrual dates. It makes employee leave balances easier to understand and avoids unexpected day increases at year boundaries.
Original PR description
## Issue Currently, an extra accrual happens on carryover date, but it shouldn't. Indeed, accrual only happened at the start - end of a period, or on level transition. ## Reproducing steps Let's take an accrual plan with a level that adds 2 days/month on the 15th of the month. The carryover takes place at the beginning of the year. So we will have this: - 2025-11-01 -> creation of the allowance, 0 days available - 2025-11-15 -> 1 day (only 15 days are counted, so only half of the days are added) - 2025-12-15 -> 3 days (1 full month elapsed) - 2026-01-01 -> 4 days (as the carryover triggers an accrual) -> this event causes confusion as the accrual seems to “come out of nowhere” - 2026-01-15 -> 5 days - 2026-02-15 -> 7 days task-5432188 Forward-Port-Of: odoo/odoo#245201
This update resolves an issue where users were denied access to edit website events when previewing them. The fix ensures the correct company ID is used during website preview, granting access to the intended company's data. This improves the website editing experience for users managing multiple company websites.
Original PR description
THIS IS A WIP Scenario: - have two companies: A is default company, B is another company - create website for B company with a domain you are logged out of - create an event with company B, website of company B - click on "Go to Website" of the event - login the company B website and edit the event page Result: get access error because you don't have access to company B Cause: when you log on a website, the default company_id is used for the backend. So in the example you are logged in company A in backend, and you are showing company B in frontend (inside the iframe). So when saving you are using company A that has no access to the event. Fix: when previewing the website for edition, switch to the website company. opw-5998454
This update fixes a reporting issue where MTO products incorrectly displayed delivered quantities instead of the total ordered amount. The fix ensures the delivery report accurately calculates the total ordered quantity for MTO products by correctly accounting for unreserved backorders and split moves. This improves the accuracy of sales order reporting.
Original PR description
Steps To Reproduce ------------------ 1- Create a product (Goods): - Select track inventory in General Information - Go to inventory and set Routes to Replenish on Order (MTO) 2- Create an Sales…
Steps To Reproduce ------------------ 1- Create a product (Goods): - Select track inventory in General Information - Go to inventory and set Routes to Replenish on Order (MTO) 2- Create an Sales Order for 10 units of the product and confirm. 3- Deliver 5 on the first picking, validate, and create the backorder. 4- Print the delivery slip. Issue ----- 1- MTO: Ordered = 5, Delivered = 5, Remaining = 5. 2- Normal product: Ordered = 10, Delivered = 5, Remaining = 5. The ordered quantity for MTO products is wrong, it shows the delivered amount instead of the original order total. Cause ----- The delivery report calculates the "Ordered" quantity by adding what we just delivered to what is left in the backorders. I found that the code was looking for move lines in the backorders to count what is left. When I checked a backorder that is waiting for stock (like MTO), there is no reserved stock yet, so no move lines exist. Because of this, the report thought the backorder was empty and ignored the remaining quantity. Fix --- I changed the calculation of `qty_ordered` to correctly handle split moves and unreserved backorders. 1. In the main loop, `qty_ordered` is now the sum of the done quantity and the demand of any linked backorders. This correctly reconstructs the total order for split moves and MTO scenarios by using `move_ids` to include unreserved moves. 2. In the secondary loop for empty moves, I added a check to skip backorders if they were already counted in the main loop. This avoids double-counting while still catching any items that were missed by the main loop. opw-5112467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where closing Point of Sale sessions could result in data imbalances. The fix, mirroring a previous backend change, ensures accurate session management during order validation and invoice generation, particularly when taxes and loyalty programs are involved. This improves the reliability of the POS system.
Original PR description
This fix is the same as this one https://github.com/odoo/odoo/pull/271577 but for the backend part of the code. After the fix, if you followed the same steps to reproduce and tried to close the session you would have an unbalanced entry for the session. Steps to reproduce: ------------------- * Create a 21% tax not included in price * Create a product with a price of 76.01 and the tax created above * Create a loyalty program with a 10% discount * Create a POS order with the product above and apply the loyalty program * Validate the order and generate the invoice * Close the session > Observation: You need to force close the session because of unbalanced entry Why the fix: ------------ Apply the same fix for backend code. opw-6052112
This pull request addresses an issue with the Brazilian accounting (l10n_br) module, specifically related to reporting. It corrects a discrepancy in how certain financial data is processed, ensuring accurate reporting for Brazilian businesses using Odoo. This update improves the reliability of financial data for our Brazilian clients.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr