Daily updates from Odoo
Sunday, April 19, 2026
8 changes · master
Resolved issues and error corrections
This update improves balance sheet reports for consolidated companies with multiple currencies. It adds a 'Cumulative Translation Adjustments' line to accurately reflect currency conversion differences based on account type (historical, average, or closing rates). This ensures more precise financial reporting and avoids discrepancies.
Original PR description
In reports, when consolidating two companies with different currencies, the conversion rate differs according to the type of account: * **BS accounts**: Closing rate → taken at the last day of the…
In reports, when consolidating two companies with different currencies, the conversion rate differs according to the type of account: * **BS accounts**: Closing rate → taken at the last day of the fiscal year * **P&L accounts** and **equity_unaffected**: Average rate → average over the fiscal year * **Equity**: Historical rate → taken the day of the creation of the journal item We are adding a line to the Balance Sheet, Trial Balance and General Ledger reports to correct the gap caused by the difference of rates: the **Cumulative Translation Adjustments**. This line is calculated by summing the differences of the converted balances using the right rate, and the converted balance at the closing rate of the report. By 'right rate', we mean the rate used according to the account: * historical for equity accounts * average for income_\*, expense_\* and equity_unaffected accounts We have, for equity accounts: cta_value = balance * rate_historical - balance * rate_closing for income_\*, expense_\*, equity_unaffected accounts: cta_value = balance * rate_average - balance * rate_closing The rate_closing corresponds to the rate observed the last day of the report period. task-5424428
This update enhances appointment tracking by asynchronously recording visitor activity using JavaScript. A key fix ensures visitor records are always created when an appointment is made, resolving a previous issue with sales person assignment. Additionally, tracking is now enabled by default, simplifying view configurations.
Original PR description
In the corresponding community PR, a new tracking route is introduced to record visitors and page visits asynchronously using js. In certain cases, there might be tours which need this write to occur earlier. Fixes include: appointment: tour which fails to assign the same sales person as the visitor.track record is not created. Fix: Force the creation of the visitor when an appointment is made. Task-4939052
This update fixes an issue where invoice periods were incorrectly calculated when subscriptions were set to align with their start date. The change ensures invoices accurately reflect the subscription's billing cycle, displaying the correct month and dates. This improves invoice accuracy and reduces potential billing discrepancies.
Original PR description
Steps to reproduce: ------------------------------------- 1. Install the Subscription module. 2. Go to Subscription > Configuration > Recurring Plans. * Open a Monthly recurring plan and enable Align…
Steps to reproduce: ------------------------------------- 1. Install the Subscription module. 2. Go to Subscription > Configuration > Recurring Plans. * Open a Monthly recurring plan and enable Align to Period Start. 3. Create a new Subscription: * Select the configured monthly plan. * Add any subscription product. * In the Other Info tab, set a Start Date in the past on the 1st day of a month (e.g., 01/11/2025). 4. Confirm the subscription. 5. Create a draft invoice. Observation: ----------------------------------- In the invoice line, you see the message: `61 days 11/01/2025 to 12/31/2025` It should be: `1 Month 11/01/2025 to 11/30/2025` Issue: ----------------------------------- https://github.com/odoo/enterprise/blob/a5a76de5f25483afa5432ed333c48d78832f128c/sale_subscription/models/sale_order_line.py#L376-L378 In `_get_invoice_line_parameters`, the computation attempts to find the next 1st day of the month However, `new_period_stop` already includes the billing period. When `new_period_stop` is in the past, an extra month is added through `new_period_stop + relativedelta(months=1)`, resulting in an incorrect period range Solution: ----------------------------------- Use `new_period_start` as the anchor point for period computation. Ensure the billing period ends on the last day of the starting month when Align to Period Start is enabled For upsell orders, the fix is NOT applied because for upsells, `new_period_stop` is already set to the parent subscription's `next_invoice_date`, which represents the correct billing boundary. opw-5920036 Forward-Port-Of: odoo/enterprise#107407
This update resolves a stability issue in the AI composer by ensuring focus events are correctly passed to the base handler. Previously, a patch prevented this, leading to crashes when the AI composer triggered focus. This change maintains the expected behavior and prevents disruptions to the mail composer.
Original PR description
**Purpose of this PR:** The AI composer patch overrides `Composer.onFocusin()` but did not forward the focus event to the base handler. This used to be harmless while the base mail composer focus handler did not use the event. Since odoo/odoo#258974, the mail composer now uses the event to stop `focusin` propagation, so dropping it makes the base handler crash when AI composer focus is triggered. This commit fixes the AI composer patch by forwarding the focus event to the base handler, preserving the expected handler contract. Related: odoo/odoo#258974 Task-5954657 Forward-Port-Of: odoo/enterprise#114013 Forward-Port-Of: odoo/enterprise#113763
This update resolves an issue where the checkout process became unresponsive when using the Avatax module for Brazilian taxes. The previous implementation was causing unnecessary external API calls and unhandled errors, disrupting the order confirmation flow. This fix removes the problematic external tax call when not required, restoring normal checkout functionality.
Original PR description
Issue: --- The extra external_tax call introduced in odoo/enterprise#101579 is causing multiple issues: 1- It doesn't catch errors while `_get_and_set_external_taxes_on_eligible_records` easily raises errors, causing uncatch errors in `website_sale`. 2- Extra unnecessary external api call in non-express checkout methods which is not desirable. Steps to reproduce: --- 1- Install l10n_br_avatax_sale, website_sale 2- Using a public user, add a product to cart and got to checkout. 3- In the address form, use CPF identification type. Outcome: The confirm button is unresponsive. Cause: --- This is due to uncatch error raised by external tax call, while it was not necessary at this step of this flow to call external tax api. opw-6005767 Forward-Port-Of: odoo/enterprise#114109 Forward-Port-Of: odoo/enterprise#112515
This update resolves a crash that occurred when confirming rental orders with kit products using multiple pick locations. The change utilizes a safer method to handle multiple pick transfers, preventing a 'singleton error' and ensuring smooth order confirmation. This improves the reliability of rental order processing.
Original PR description
Problem: When you confirm a rental order that has a kit product whose components use two different pack locations Odoo crashes with a singleton error. You get this singleton error because Odoo tries…
Problem: When you confirm a rental order that has a kit product whose components use two different pack locations Odoo crashes with a singleton error. You get this singleton error because Odoo tries to assign both picks as the `return_id` because they share the same `sale.order.line` here: https://github.com/odoo/enterprise/blob/2212b3f3f3d90894dd6351defe0d3ca090584955/sale_stock_renting/models/sale_order_line.py#L404
Purpose: Use [:1] to safely handle the case where multiple pick transfers are created, avoiding a crash when assigning return_id which expects a single record.
Steps to Reproduce on Runbot:
1. Enable mutli-step routes and rental transfers.
2. Set the warehouse to 3-step delivery.
3. Copy the existing packing location.
4. Copy the existing pick operation type and set the destination location to the new packing location.
5. Create a new route.
6. Create new rules on this new route with the following configurations:
1. Rule 1
1. Action: Pull
2. Source location: WH/Stock
3. Destination location: Partners/Customers
4. Operation type: The new pick operation type
2. Rule 2
1. Action: Push
2. Source location: New pack location
3. Destination location: WH/Output
4. Operation type: Pack
3. Rule 3
1. Action: Push
2. Source location: WH/Output
3. Destination location: Partners/Customers
4. Operation type: Delivery
7. Create 2 component products tracked by inventory, and apply the new route on one of the component products.
8. Create a new rental product with a kit, which has the 2 component products.
9. Create a new rental order for the kit product and confirm it.
opw-6026918
Forward-Port-Of: odoo/enterprise#114020
Forward-Port-Of: odoo/enterprise#112543This update resolves an issue with the 'Current Year Retained Earnings' line on the Swiss Balance Sheet. The change adjusts the reporting date range to accurately reflect the fiscal year, ensuring financial reports align with Swiss accounting standards. This improves the reliability of financial data for Swiss clients.
Original PR description
The "Current Year Retained Earnings" (CH_299_A) line on the Swiss Balance Sheet was using the default `strict_range` date scope. This commit forces the `date_scope` to `from_fiscalyear`. task-6119493 Forward-Port-Of: odoo/enterprise#114145 Forward-Port-Of: odoo/enterprise#113920
This update restores the ability to assign analytic distributions directly when creating write-offs during reconciliation, a feature removed in Odoo 16.3. Previously, users had to manually reset and repost entries, which is now simplified by adding a dedicated field for analytic distribution at the write-off creation stage.
Original PR description
Since 16.3, it is no longer possible to define an analytic distribution when creating a write-off during reconciliation. Earlier, the reconciliation widget allowed assigning an analytic distribution directly to the write-off journal item. With the introduction of the reconciliation wizard in SaaS-16.3, this capability was lost, requiring users to reset the entry to draft, manually set the analytic, and repost it. This commit reintroduces this feature by adding an Analytic Distribution field to the write-off flow, allowing users to define it at creation time, restoring the previous behavior. task-4642990