Wednesday, September 23, 2026
7 changes · 18.0
Resolved issues and error corrections
Messages received while a Discuss channel is opening are no longer lost from view. This ensures users see new activity promptly without waiting for a later refresh or fetch.
Original PR description
Before this commit, a message received while a channel opens in Discuss does not appear, and stays out of the thread until the next fetch. This happens because the channel opens on its last read message through `loadAround`, which replaces the message list with the fetched messages. The bus handler of a new message adds it to that list as long as the thread displays the present, so the replacement drops what arrived during the fetch. This commit fixes the issue by putting those messages back: in the list when it displays the present, in `pendingNewMessages` when it does not, where `fetchMoreMessages` already picks them up. https://runbot.odoo.com/odoo/error/947188
Hungarian electronic invoice reports sent to NAV now leave out cash rounding lines, aligning the XML with local legal requirements. This prevents rounding adjustments from being reported as product or service lines and helps ensure compliant tax reporting.
Original PR description
Global cash rounding can be applied to customer invoices. Before this commit, the rounding would be included in the XML file sent to NAV. It would be included as a new invoice line (same as the products lines) and the ATK tax is applied on it. As stated in the legal Hungarian Documentation, an invoice line should always relate to the supply of a good or the service provided. In this case, a cash rounding (which is not a financial advantage or disadvantage) will be considered by the law as a settlement difference, that is not part of the invoice. So, this commit removes cash rounding lines from the NAV XML. Moreover, it uses base_lines for the amounts computation instead of line_ids. task-6527383
The web editor now skips channels a user cannot access instead of stopping the entire subscription process. This prevents one unavailable channel from blocking other real-time updates, improving reliability for users.
Original PR description
`_build_bus_channel_list` should never raise. Otherwise, the entire request is aborted, meaning the client fails to subscribe to *all* channels, including completely unrelated channels. Instead, if a client do not have permission to subscribe to a channel, the channel should just be skipped. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Employees assigned as Time Off approvers can now see the Time Off shortcut for the people they manage, even if they do not have broader Time Off access. This lets managers review and manage requests they are responsible for without needing extra permissions.
Original PR description
Issue: A user without any rights on Time Off should still be able to manage the requests of the users he's manager of. However, the computation for `show_leaves` only considers Time Off Officers/Admins and the employee themselves, while it should also consider the employee's Time Off approver. Fix: Include the employee's Time Off approver when computing `show_leaves`, allowing them to access the employee's Time Off smart button. Reproduction Steps: 1. Set a user (e.g. Marc Demo) to "No" for Time Off. Note: If reproducing in v19, Administrator rights on Employees are also needed to access the private employee form view where the issue occurs. 2. Set that user as another employee's Time Off approver. 3. Log in as that user and open the employee's form view. 4. Observe that the Time Off smart button is not visible. Related Tickets: opw-6445714 Forward-Port-Of: odoo/odoo#281589
German quarterly tax report XML exports now correctly include the reporting period field. This helps ensure submitted tax files contain the expected information when companies use quarterly filing.
Original PR description
The `Zeitraum` tag was not set when the tax return periodicity is `quarterly`. The `account_tax_periodicity` field defines `trimester` as the key for the `quarterly` label. In [account_generic_tax_report.py] though, the code compared the periodicity with the `quarterly` label instead of the `key` trimester. **Steps to reproduce**: - Install the `l10n_de_reports` module and switch to the DE Company. - Go to Accounting settings and set `Tax Return Periodicity` to `quarterly`. - Navigate to Accounting > Reporting > Tax Return. - Export the tax report as `XML`. - Open the generated XML file and observe the `Zeitraum` tag. [account_generic_tax_report.py]: https://github.com/odoo/enterprise/blob/338630decbec76580766dd3b38c3241ecfb4c77a/l10n_de_reports/models/account_generic_tax_report.py#L54 Ticket [link](https://www.odoo.com/odoo/project.task/6581536) opw-6581536
Budgets now include analytic tax amounts posted on liability accounts, such as sales tax received. This fixes understated revenue and budget figures when analytic taxes are used, making budget reporting more accurate and consistent with purchase tax handling.
Original PR description
When a tax flagged "analytic" is used on an invoice, its amount also generates an account.analytic.line on the tax's own account (e.g. "Tax Received" for a sale tax), in addition to the line…
When a tax flagged "analytic" is used on an invoice, its amount also generates an account.analytic.line on the tax's own account (e.g. "Tax Received" for a sale tax), in addition to the line generated for the revenue/expense account. The budget report's _get_aal_query only kept analytic lines posted on income/expense accounts, plus asset_current/asset_non_current/ asset_fixed (added to also catch fixed asset purchases). Sale taxes are usually posted on a liability_current account, so their analytic line was silently excluded from the committed/achieved amounts of revenue and both budgets, while the equivalent purchase tax (posted on an asset_current "Tax Paid" account) was correctly counted on expense budgets. Mirror the existing asset-side handling on the liability side: - where_account_type now also accepts liability_current and liability_non_current accounts. - the new budget_profitability mirrors the _field_to_sql method and treats those liability accounts as revenue, the same way asset accounts are already treated as loss, without changing the shared analytic_profitability field on account.analytic.line. opw-6543933
Cancelling several deliveries at once now sends each carrier only the shipment that belongs to it. This prevents duplicate cancellation attempts and avoids carrier API errors or incorrect cancellations when different carriers are involved.
Original PR description
When cancelling shipments for multiple pickings with different delivery carriers, passing the entire recordset (self) instead of the individual picking to the carrier's cancel_shipment method causes each carrier to receive tracking references that do not belong to it. This results in API errors or silent wrong cancellations at the carrier level, and each shipment being cancelled N times instead of once, where N is the total number of pickings being processed. Forward-Port-Of: odoo/odoo#289809