Daily updates from Odoo
Thursday, April 23, 2026
9 changes · master
Resolved issues and error corrections
This update fixes problems that appeared after benefits were moved in the payroll and contract salary areas. It helps ensure employee salary and payroll information displays and behaves correctly after the change.
Original PR description
…fits Task: 6141770
This change prevents an error that could appear when creating or editing a salary adjustment if the start date is not yet set. As a result, payroll users can complete the adjustment flow without encountering an unexpected traceback.
Original PR description
This task guard against falsy date_start in _compute_estimated_end to avoid adding a relativedelta to False, fixing a traceback appearing during onchange. task-6139538 Forward-Port-Of: odoo/enterprise#114332
This change fixes an error that could appear when users click certain cells in the Trial Balance report, specifically for Undistributed Profits/Losses. It ensures the report opens correctly instead of failing with a missing data error, improving reliability when reviewing accounting balances.
Original PR description
This error occurs when clicking on any cell for `Undistributed Profits/Losses` in the `Trial Balance` report. Steps to reproduce: - Install `Accounting` module - Create `Journal Entry` with past-year…
This error occurs when clicking on any cell for `Undistributed Profits/Losses` in the `Trial Balance` report. Steps to reproduce: - Install `Accounting` module - Create `Journal Entry` with past-year `Accounting Date` (eg: 31-12-2025) and include one `Journal Items` for `Undistributed Profits/Losses` - Open `Trail Balance` report and click on any cell for `Undistributed Profits/Losses` Traceback: `KeyError: 'report_line_id'` Before this [commit], we were returning fields with `null/None` values. After the commit, fields containing `null/None` [value] are removed, and only fields with valid values are returned. As a result, when the `dispatch_report_action` function is called, the `report_line_id` is missing in `params`. [commit]: https://github.com/odoo/enterprise/pull/102808/changes/b92dc397bef029472a40223f51b611cdf5b631dc [value]: https://github.com/odoo/enterprise/blob/626b8157bcea2e3843cd9d5d0c0036e302b8e5ce/account_reports/utils/report_data_objects.py#L42-L43 sentry-7372351871 opw-6119913 Forward-Port-Of: odoo/enterprise#113421
This change prevents an error that could occur when opening or retrieving account report information. It updates the report code to use the correct method for the new data structure, so reports load normally again.
Original PR description
Currently, an error occurs when retrieving account report information. ``` File "/home/odoo/odoo18/enterprise/account_reports/models/account_report.py", line 1475, in _create_hierarchy…
Currently, an error occurs when retrieving account report information.
```
File "/home/odoo/odoo18/enterprise/account_reports/models/account_report.py", line 1475, in _create_hierarchy
render_lines(root_account_groups, current_level, root_line_id, skip_no_group=False)
File "/home/odoo/odoo18/enterprise/account_reports/models/account_report.py", line 1373, in render_lines
child_line.update
^^^^^^^^^^^^^^^^^
AttributeError: 'AccountReportLineData' object has no attribute 'update'
```
After the [recent commit], all lines, columns, format_params, and annotations are converted into custom objects (AccountReportLineData). However, the code still attempts to use the update() method on these objects, which raises an error [1] since AccountReportLineData does not have an update method.
This commit ensures that the update_value() method is used to update AccountReportLineData objects, as intended, like here [2].
[recent commit]: https://github.com/odoo/enterprise/commit/6608d5c21a7fb9d57786c2a7618b878e244bd420
[1]- https://github.com/odoo/enterprise/blob/cde4e05de82476655764f8c9fe8734416d4a35bf/account_reports/models/account_report.py#L1373-L1377
[2]- https://github.com/odoo/enterprise/blob/cde4e05de82476655764f8c9fe8734416d4a35bf/account_reports/models/account_report.py#L6565
sentry-7403925422
Forward-Port-Of: odoo/enterprise#113668This change ensures that when a salesperson manually closes a subscription, it stays closed even if a payment is later approved or an invoice is paid. This avoids accidentally reopening subscriptions that were intentionally ended, preventing confusion and billing issues.
Original PR description
Before this commit, when a subscription was closed manually by the salesperson, it could be reopened when a transaction was approved or an invoice paid. It could cause issue. In this case, we should not reopen automatically. task-5900481 Forward-Port-Of: odoo/enterprise#113026 Forward-Port-Of: odoo/enterprise#106487
This update resolves performance issues and crashes when generating the VAT Books Excel report for large invoices. By optimizing memory usage and query execution, the report now runs efficiently even with extensive data, significantly reducing server load and improving export times.
Original PR description
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance…
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance bottlenecks and MemoryError crashes on databases with a massive volume of invoice lines. This PR introduces strict memory management and query optimizations to prevent server crashes and drastically speed up the XLSX export process. ### Current behavior before PR: When exporting the VAT Books report for a large dataset, the system attempts to hold the entire workbook structure in RAM. Additionally, the ORM unnecessarily prefetches fields when iterating over the account.move.line recordset and performs excess sub-queries to look up move_type for journal entries. This combination results in massive memory consumption, slow load times, and eventual server crashes. ### Desired behavior after PR is merged: The VAT Books report generates successfully and efficiently, even on massive databases, with a significantly reduced memory footprint. Specifically: - The ORM bypasses cache bloat by disabling field prefetching (prefetch_fields=False) during the recordset iteration. - The query execution is optimized by changing the search domain from move_type to move_id.move_type, leveraging the existing join table rather than triggering expensive sub-queries. ### Benchmark: The model is iterating through ~1.1M journal items when generating the full report. For Memory: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 1.4GB| 202 MB | | ~32,000 journal items | MemoryError | 278 MB | | ~141,500 journal items | MemoryError | 760 MB | | ~1.1M journal items | MemoryError | 1.4 GB | For Speed: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 2 min | 1.5s | | ~32,000 journal items | MemoryError | 4s | | ~141,500 journal items | MemoryError | 12s | | ~1.1M journal items | MemoryError | 56s | ### Reference opw-6037414 ----------------------------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#112230
This update corrects a visual issue on the subscription portal where product lines weren't correctly aligned with tax calculations. The change ensures that only invoiceable product lines are displayed, resulting in accurate tax totals and a consistent view for customers. This improves the clarity and reliability of subscription information presented to users.
Original PR description
Previously, the portal view for subscriptions displayed all un-collapsed products from the sales order, ignoring whether they were actually invoiceable lines. This caused a visual mismatch where the displayed lines did not correspond to the calculated tax totals at the bottom of the view. This commit updates the visibility logic to ensure that product lines are only included if they are invoiceable. task-6128619 Forward-Port-Of: odoo/enterprise#114088
This update resolves a crash related to AI chat processing and ensures the chat overlay correctly appears over the FileViewer. It also prevents AI actions from being attempted on video files, improving the user experience and stability of the AI features within the Enterprise module.
Original PR description
*={ai_documents}
- Fix crash caused by calling `.values()` on `_ai_read()` result (list),
now using it correctly.
- Correct context passed from FileViewer in ai_documents when
launching AI chat.
- Fix AI chat appearing behind FileViewer by updating outdated
CSS selector.
- Prevent AI actions on video files by showing a warning instead
of attempting unsupported processing.
task-5955968This update resolves an issue where opening salary adjustments on mobile devices caused a crash. The fix involved adding a basic kanban view and removing unnecessary overrides to ensure the functionality works correctly across all device types. This improves the user experience for mobile users managing employee salaries.
Original PR description
Steps to reproduce ================== - Install hr_payroll - Use a mobile viewport - Go to Employees - Open a record - Switch to the Salary Adjustments notebook tab => TypeError: undefined is not an…
Steps to reproduce ================== - Install hr_payroll - Use a mobile viewport - Go to Employees - Open a record - Switch to the Salary Adjustments notebook tab => TypeError: undefined is not an object (evaluating 'props.activeActions.onDelete=this.onDelete.bind(this)' Cause of the issue ================== The SalaryAttachment2ManyField widget overrides the rendererProps to handle the delete action, but this isn't defined on mobile (because a kanban view is used) See https://github.com/odoo/odoo/blob/9f93f22ed5f6d5dbbafeb0a8c6fababdc2a65d45/addons/web/static/src/views/fields/x2many/x2many_field.js#L196-L212 Solution ======== Since there is no delete action on the kanban view, there is no need for an override. While we are at it, there was no kanban view defined. Thus a default view was used https://github.com/odoo/odoo/blob/138fad6d54a0b59885b1e5c712beb8f581c9555c/odoo/addons/base/models/ir_ui_view.py#L2835-L2846 It only contained the field description. Since that one is optional, records without a description were almost invisible.. Thus we also add a basic kanban view opw-6047295 Forward-Port-Of: odoo/enterprise#113317