Monday, August 24, 2026
10 changes · 17.0
Resolved issues and error corrections
The update prevents users from creating a new fiscal year that fully contains an existing fiscal year. This helps keep accounting periods accurate and avoids reporting or compliance issues caused by overlapping fiscal calendars.
Original PR description
Before this commit: - The current constraint for overlap check allows if we define a new, larger fiscal year that completely swallows an existing smaller one (e.g., creating Aug 2025 - Nov 2026 when Sept 2025 - Oct 2026 already exists). After this commit: - The constrain domain was changed to consider the above missed case. no task
This fix prevents Point of Sale session closing from failing when orders include both a tracked product and kit products that use it as a component. The system now correctly adds quantities across matching order lines, so businesses can close sessions without interruption in these scenarios.
Original PR description
**Step to reproduce :** 1. Create Product A and enable lot tracking for it. 2. Create a Kit product and add Product A as one of its components. 3. Go to PoS and create orders using: - Product A - The…
**Step to reproduce :** 1. Create Product A and enable lot tracking for it. 2. Create a Kit product and add Product A as one of its components. 3. Go to PoS and create orders using: - Product A - The Kit product - A combination of Product A and the Kit product 4. Create three different orders with these combinations. 5. Try to close the PoS session. **Issue :** An error occurs when attempting to close the PoS session. The issue is in the pos_mrp module, specifically in the _get_lot_line_qty method. When accessing the following line: `lines_data[move.bom_line_id.bom_id.product_tmpl_id.product_variant_id.id]['order_lines'].qty` we expect order_lines to contain a single record. However, in this scenario, multiple order lines can be returned for the same product. As a result, accessing .qty directly on order_lines raises a singleton error. **Solution :** With this fix, we first retrieve the quantity from each order line and thensum the quantities together. This ensures that multiple matching order lines are handled correctly and prevents the singleton error when closing the PoS session. opw-6442765
UBL invoice exports now preserve the full product price precision instead of rounding unit prices to the currency precision. This prevents small pricing discrepancies in electronic invoices when products use more decimal places than the invoice currency.
Original PR description
When Product Price decimal precision exceeds currency precision (e.g. 4dp vs 2dp), PriceAmount in the UBL XML is incorrectly rounded to currency precision. The root cause: `net_price_subtotal = line.price_subtotal` -> gross_price_unit derived from price_subtotal (already rounded to 2dp) For tax-exclusive and no-tax lines, price_unit is now used directly: `gross_price_unit = line.price_unit` -> stored at Product Price precision For price-inclusive taxes the existing price_subtotal-based logic is kept. Steps to reproduce: 1. Set "Product Price" decimal accuracy to 4 2. Create a product with price 10.2678, assign 21% tax and a Belgian customer 3. Confirm the invoice and generate the UBL XML => PriceAmount shows 10.27 (rounded to currency precision) => Expected: 10.2678 Ticket [link](https://www.odoo.com/odoo/action-4043/5910248) opw-5910248
This fix ensures Odoo only suggests the Buy route when it is valid for the user’s active company access. It prevents product creation from failing or selecting the wrong purchasing route in multi-company setups.
Original PR description
## **Steps to reproduce:** 1. Install the Inventory and Purchase module and enable Multi-Step Routes. 2. Open the Buy route and set Company A as its company. 3. Create a user who has access only to…
## **Steps to reproduce:** 1. Install the Inventory and Purchase module and enable Multi-Step Routes. 2. Open the Buy route and set Company A as its company. 3. Create a user who has access only to Company B. 4. Log in as this user and navigate to Products. 5. Click New to create a product. 6. An AccessError is raised because the Buy route belongs to Company A, which is not accessible to the user. ## **Issue:** The buy route returned by `env.ref` is not necessarily applicable to the current company. Returning `buy_route.ids` directly can therefore cause issues when creating a product in a multi-company environment. When the user has access to multiple companies, the buy route belonging to another company can be selected during product creation. When the user does not have access to the company of the buy route, this can instead result in an AccessError. The previous implementation performed an ORM search on `stock.route`, which implicitly filtered the route according to the current environment. However, that query was removed as part of this pr https://github.com/odoo/odoo/pull/276554. ## **Solution:** Filter the route returned by env.ref against the companies available in the current environment before returning its ID. Use sudo() while filtering so that the route's company_id can be read even when the route belongs to a company inaccessible to the current user. The route is still explicitly checked against env.companies, so sudo() does not allow an inaccessible company's route to be returned. opw-6448497 Runbot Video : [Video](https://drive.google.com/file/d/1qQyJrPNwXuHtu6GXyC_78dtd_A24khFR/view?usp=sharing)
Discounts applied to down payment invoices are now reflected back on the related sales order line. This prevents incorrect tax calculations when the final invoice is created, improving invoice accuracy and financial consistency.
Original PR description
### Issue before this commit: When applying a discount to a down payment invoice, the discount is not reflected on the corresponding down payment line in the Sale Order. This missing information…
### Issue before this commit: When applying a discount to a down payment invoice, the discount is not reflected on the corresponding down payment line in the Sale Order. This missing information leads to an incorrect tax computation when generating the final regular invoice. ### Steps to reproduce the issue: 1. Download Sales 2. Go to settings and check discounts 3. Create a 0% tax 4. Create a new quotation with a product, set for example 1000 as unit price and a tax of 15% and confirm it 5. From the SO click 'Create invoice' and create a downpayment with a fixed amount of price 500, 0% tax and 2.5% discount 6. Go back to the SO and see that the discount is not reported also here in the sale order view 7. Than click 'Create invoice' again and select regular invoice to complete the payment 8. See that the tax amount is incorrect ### Cause of the issue: The system does not synchronize the discount applied on the posted down payment invoice line (account.move.line) back to the originating down payment line on the Sale Order (sale.order.line). Since the Sale Order line lacks this discount data, subsequent computations rely on incomplete values. ### Reason to introduce the fix: To ensure accurate tax computations and complete financial consistency between the Sale Order and the related invoices. By correctly retrieving and assigning the discount from the posted invoice line to the down payment line, the final regular invoice can accurately calculate the remaining amounts and applicable taxes. opw-6334838 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website editor image-only areas now stay image-only, preventing users from accidentally replacing banner or gallery images with typed text. Editors can still replace the images normally, reducing content editing mistakes on website pages.
Original PR description
Grid image-only items are actually `contenteditable`. This makes it possible to replace the image with text. This commit makes the item non-editable, while keeping the media inside it replaceable. Steps to reproduce: - Drop a Banner block - Select an image - Type something => Image was replaced with text task-5436148
Debit notes issued in the Egyptian localization are now reported to the Egyptian Tax Authority with the correct document type. This helps businesses avoid incorrect eInvoicing submissions and potential compliance issues.
Original PR description
Currently, debit notes are incorrectly reported to the Egyptian Tax Authority (ETA) as standard invoices with document type `i`. **Steps to reproduce:** - Install the `l10n_eg_edi_eta` and…
Currently, debit notes are incorrectly reported to the Egyptian Tax Authority (ETA) as standard invoices with document type `i`. **Steps to reproduce:** - Install the `l10n_eg_edi_eta` and `account_debit_note` modules and switch to the EG company. - Configure the `Egyptian ETA settings` for the sales journal. - Create and confirm an invoice for an Egyptian customer. - Click the gear icon > `Debit Note` and create a debit note. - Add invoice lines to the debit note and confirm it. (Click `Process Now` if needed). - Open the `EDI Documents` tab and click `Download`. **Observation:** The generated XML payload contains `documentType` set to `i`. **Expected behaviour:** According to the Egyptian Tax Authority (ETA) eInvoicing SDK, debit notes must be identified with document type `d`. (reference: https://sdk.invoicing.eta.gov.eg/documents/debit-note-v1-0/) **Root Cause:** At [1], the `documentType` logic does not handle debit notes, causing them to be reported as standard invoices (`i`). opw-6471998
This fix prevents valid attendance links from being removed when early or batch-created attendances span UTC day boundaries. Payroll and attendance records stay correctly connected, reducing the risk of inaccurate work entry data.
Original PR description
When an early attendance starts on the previous UTC day, the cleanup uses full UTC days as boundaries. This can include an unrelated work entry and remove its attendance link. Use the generated work entries as cleanup boundaries so only entries that can overlap the new entries are considered. opw-6412221
This update fixes a small spelling mistake in the Social app's internal attachment handling code. It improves code clarity and consistency without changing how users create or manage social posts.
Original PR description
Corrected a spelling mistake in `social_post_template.py` where the method `_set_attachemnt_res_id` was renamed to `_set_attachment_res_id` to maintain consistent and accurate naming conventions. Also added a blank line above the method for better PEP 8 compliance. CLA: https://github.com/odoo/odoo/pull/282808
The LinkedIn integration now handles cases where LinkedIn returns no account statistics during a refresh. This prevents failed refreshes and helps keep social account data syncing reliably even when external data is missing.
Original PR description
Bug === When the LinkedIn API returns no statistics for the account, the refresh crashes. Task-6425391 Forward-Port-Of: odoo/enterprise#126326