Thursday, August 27, 2026
4 changes · 17.0
Resolved issues and error corrections
This fixes a billing issue where timesheets could lose their connection to a replacement invoice after reversing and recreating an invoice with a credit note. Businesses retain accurate invoice records for time-based work, reducing billing confusion and manual follow-up.
Original PR description
### Description of the issue/feature this PR addresses: Fixes an issue where timesheets lose their invoice reference when reversing and re-creating an invoice via a credit note. ### Current behavior…
### Description of the issue/feature this PR addresses: Fixes an issue where timesheets lose their invoice reference when reversing and re-creating an invoice via a credit note. ### Current behavior before PR: When reversing an invoice tied to timesheets and creating a replacement via a credit note, the timesheets linked to the original invoice have their timesheet_invoice_id cleared. Because the modify_moves function builds the replacement invoice directly via copy_data()/create(), it bypasses the normal sale order invoicing flow. As a result, the unbilled timesheets are left permanently unlinked from the newly created invoice, leaving the new invoice with no reference to the timesheets linked to the original sale order. ### Desired behavior after PR is merged: When a replacement invoice is created, each timesheet is properly relinked to the corresponding line on the new invoice. This linkage matches on the sale order line (so_line) rather than line position, ensuring accuracy since line order and count are not guaranteed to be preserved between the original and modified invoices. opw-6449995 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes how the Uruguay electronic invoicing module determines the exchange rate used for invoices. It helps ensure electronic invoice data matches the invoice values more accurately, reducing reporting or compliance discrepancies.
Original PR description
Backport of #128190 Unfortunately this fix cannot use invoice_currency_rate because this field appears on 18.0 To simulate this we do it manually, but this can raise the issue described on #64838 For this cases will be better idea to upgrade to 18.0 OPW-6499306
This fixes an issue where the Indian eWay Bill stock form could fail to load in isolated app tests because a required country field was missing. The change reuses existing company country information without changing stored data, improving reliability with minimal business impact.
Original PR description
The view 'l10n_in_ewaybill_stock.view_picking_form_inherit_ewaybill' is broken in single-app tests because it depends on stock.picking:country_code. That field is provided by module 'stock_account' through auto_install relationship. The field itself relates to 'company_id.account_fiscal_country_id.code' which is provided by module 'account', and 'account' is in the explicit dependency tree of 'l10n_in_ewaybill_stock' by chain [l10n_in_ewaybill_stock] ──[depends]──> [l10n_in_stock] ──[depends]──> [l10n_in] ──[depends]──> [account] The new related field does not require upgrade attention because it's a copy-paste of the same relation as defined in 'stock_account' and does not impact the db schema. REF Runbot; https://runbot.odoo.com/odoo/error/945482
This fixes a small display issue in the online shop cart where an internal placeholder could appear as an unnecessary page styling label. Cart lines now only receive the optional-product styling when appropriate, keeping the checkout page markup clean and consistent.
Original PR description
The t-attf-class expression on the cart product line used the Python 'and' operator without a fallback: 'line.linked_line_id and "optional_product info"'. When linked_line_id is an empty recordset (falsy), Python's 'and' returns the falsy operand itself instead of an empty string. QWeb then interpolates that operand into the class attribute via str(), rendering the literal 'sale.order.line()' as a CSS class on every cart line without a linked_line_id. Adding 'or ...""' forces the expression to fall back to an empty string when linked_line_id is falsy, restoring correct conditional class rendering consistent with the adjacent attrs in the same t-attf-class. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr