Daily updates from Odoo
Saturday, March 21, 2026
14 changes · 19.0
Resolved issues and error corrections
This update cleans up the error messages displayed in the account reports, making them easier to understand for users. The VIES check hyperlink has been removed from the stable version due to display limitations. This change focuses on improving the user experience and clarity of account reporting.
Original PR description
The company data check message was on multiple line. image The VIES check hyperlink wasn't Markup, since we cant easily display it, we will remove it in stable.
This update resolves a technical issue where the Planning module's role search filter was incorrectly passing record IDs as strings, causing errors. The fix ensures that record IDs are correctly interpreted as integers, improving the reliability of role selection within the Gantt view.
Original PR description
Steps to reproduce: ------------------------------------------ 1. Install Planning module 2. Click on any shift in Gantt view > Edit 3. In the Resource field, click on Search More to open the…
Steps to reproduce: ------------------------------------------ 1. Install Planning module 2. Click on any shift in Gantt view > Edit 3. In the Resource field, click on Search More to open the selection dialog 4. In the pop-up window, observe that a default filter is already applied 5. Click on the Roles filter in the search panel Observation: ------------------------------------------ The filter on the Roles field applies an 'Invalid Record ID' in the domain Issue: ------------------------------------------ the default filter on `role_ids` passes the role ID as a string (e.g., 4) instead of an integer (4). This happens because the `filter_domain` uses `[self]`, and `self` is substituted with `label.trim()` in `_getFieldDomain`, which is always a string even when the underlying value is a numeric ID https://github.com/odoo/odoo/blob/accaa246d5818572996660f967624978e906b5c3/addons/web/static/src/search/search_model.js#L1747-L1750 Solution: ------------------------------------------ Replace `[self]` with `[raw_value]` in the `filter_domain` of the `role_ids` search field, the `raw_value` variable holds the actual typed value (integer ID) instead of the string label. opw-6003611
This update fixes an issue where portal users weren't able to view timesheets linked to projects with 'Invited internal and portal users' visibility. The change expanded the domain to include both 'portal' and 'invited_users' visibility options, ensuring shared timesheets are correctly displayed to portal users.
Original PR description
Steps to reproduce: - Create Project A with visibility set to `Invited internal and portal users.` - Create a Helpdesk Team and assign Project A to it. - Create a helpdesk ticket. - Log a timesheet…
Steps to reproduce:
- Create Project A with visibility set to `Invited internal and portal users.`
- Create a Helpdesk Team and assign Project A to it.
- Create a helpdesk ticket.
- Log a timesheet on the ticket and share the ticket with the portal user.
- Log in as the portal user and check the timesheet.
- Observe that the timesheet is not visible to the portal user.
Cause:
- After introducing the `invited_users` option in `privacy_visibility`, the portal domain in `_timesheet_in_helpdesk_get_portal_domain` was not updated.
- The domain was still defined as: `('project_id.privacy_visibility', '=', 'portal')`
- As a result, timesheets linked to projects with visibility set to “Invited internal and portal users” were excluded from the portal user’s view.
Solution
Update the domain to include both visibility options: `('project_id.privacy_visibility', 'in', ['portal', 'invited_users'])`
- This ensures timesheets are visible to portal users when the project visibility is either portal or invited_users.
task-5924243This update resolves a visual issue where the map view in the "My Dashboard" sometimes collapsed. The fix removes conflicting height settings and adds a minimum height to the map, ensuring it always displays correctly regardless of the number of records shown.
Original PR description
This commit fixes rendering height issues when the map view is displayed inside "My Dashboard". * Removed `height: 100%` from the map and pin list containers. This conflicting rule interfered with the flexbox layout, often causing the map to collapse entirely since it couldn't compute its own height. * Added a `min-height` to the map renderer. This ensures the map always occupies a reasonable amount of space in the dashboard, even when there are few or no records to display. task-6022958 Forward-Port-Of: odoo/enterprise#110968 Forward-Port-Of: odoo/enterprise#110790
This update resolves an issue where generating financial reports (FAIA) for Luxembourg companies using multi-currency transactions resulted in errors. The fix ensures the necessary currency information is included in the report template, preventing rendering problems and ensuring accurate financial reporting.
Original PR description
Steps to reproduce 1/ setup a LU company. The default company currency will be EUR. 2/ create a vendor bill in another currecy (e.g. USD) 3/ take note of the bill date and accounting date (ideally set them in the past, like 1 month) 4/ generate the FAIA report for the period containing the created bill => error while rendering the qweb template The core of the error is when rendering the l10n_lu saft template. Sales invoices and purchase invoices reuse the standard `account_saft.tax_information` report, which expects to find `currency_code` in the object's fields. This commit explicitly re-adds it when creating the document's tax summary. opw-5216057 Forward-Port-Of: odoo/enterprise#110660 Forward-Port-Of: odoo/enterprise#106902
This update resolves an issue where the website's tour process was experiencing delays loading translations, particularly in recent Chrome versions. The fix introduces a temporary step to ensure translations load before the tour begins, preventing interruptions and ensuring a smoother user experience.
Original PR description
This commit adds an intermediary step ensuring the proper page has been reached before actually doing the checks and avoiding to let startup requests (like the loading of the translations) pending at the end of the tour (and the eventual stop of the runner browser). Note: this is most likely due to a timing (indeterministic by nature) change, emphasised by recent Chrome versions (like v145). runbot-239128 Forward-Port-Of: odoo/enterprise#111013 Forward-Port-Of: odoo/enterprise#110648
This update fixes a bug where project timesheets didn't accurately reflect changes in employee costs when switching workers on a manufacturing order. The fix automatically adjusts the AAL (analytic accounting line) linked to the work center, ensuring accurate timesheet calculations and reporting. This improves the reliability of project cost tracking.
Original PR description
### Steps to reproduce: - Create an MTO product and another Service product that create a project and task - Create a quotation with both products - Create two employees with different hourly cost - Go to Manufacturing order - Configure an employee to manufacture the product at a work station. - Observe the project dashboard - Go back to the MO and change the employee on the work station - Notice the project dashboard Timesheets section doesn't have any change on the amount ### Cause: This is happening because when changing the employee we don't modify anything in the AAL linked to the work station. As we only modify the AAL when the duration change. ### Fix: We call _create_analytic_entry when we change the employee on the work station to change the amount and the employee_id for the AAL. opw-5939321 Forward-Port-Of: odoo/enterprise#109695
This update resolves an issue preventing new employee creation when generating BVG-LLP reports in the Swiss module. The fix addresses a technical problem with how Odoo compares report data, ensuring correct employee creation functionality. This ensures accurate payroll calculations for Swiss companies.
Original PR description
Steps to reproduce: ---------------------------------- 1. Install `l10n_ch_hr_payroll_elm_transmission` module 2. Switch to Swiss company 3. Navigate to Payroll > Transmission > BVG-LLP Basis…
Steps to reproduce:
----------------------------------
1. Install `l10n_ch_hr_payroll_elm_transmission` module
2. Switch to Swiss company
3. Navigate to Payroll > Transmission > BVG-LLP Basis Declaration
4. Create two Reports with same Year and Month
5. Now try to create new Employee from the employee app
Observation:
----------------------------------
Tracaback Occurs:
```
File '/home/odoo/src/enterprise/19.0/l10n_ch_hr_payroll/models/l10n_ch_employee_monthly_values.py', line 319, in _compute_bvg_lpp_annual_basis
existing_declaration = max(existing_declaration, key=lambda r: r.month) if existing_declaration else False
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File '/home/odoo/src/odoo/19.0/odoo/orm/models.py', line 5934, in ensure_one
raise ValueError('Expected singleton: %s' % self)
ValueError: Expected singleton: l10n.ch.lpp.basis.report(1, 2)
```
Issue:
----------------------------------
In the following code:
https://github.com/odoo/enterprise/blob/44a26539093f9313d9cd5f823c11866e3c98ec97/l10n_ch_hr_payroll_elm_transmission/models/l10n_ch_employee_monthly_values.py#L319-L320
Python's max() function doesn't just call the key function once per item. When there are ties (equal key values), it may need to compare the original objects, and during this process, Odoo's recordset operations combine records, causing the lambda receives `r` as a combined recordset. To access `.month` on a multi-record recordset it gives singleton error.
Solution:
----------------------------------
Creates tuples of (month, recordset) pairs and uses max() to compare month integers directly, avoiding the singleton error.
opw-5391742
Forward-Port-Of: odoo/enterprise#111084
Forward-Port-Of: odoo/enterprise#102335This update fixes an issue with the numbering of report lines within the Vietnamese balance sheet report. Specifically, the order of items under 'I. Short-term liabilities' was corrected. This ensures the report data is presented in a clear and accurate format for Vietnamese users.
Original PR description
- Fixed the numbering of report lines under the section "I. Short-term liabilities" in the balance sheet report 6035762 Forward-Port-Of: odoo/enterprise#111234
This update corrects a problem in the GSTR 2B report testing process. Previously, the tests were incorrectly deleting tax amounts. Now, the system properly removes taxes from the account move line, ensuring accurate report calculations and compliance. This resolves a potential discrepancy in tax reporting.
Original PR description
Before this PR: - A test case was deleting taxes. After this PR: - Removed the taxes from the account move line instead of deleting the taxes. Related PR: https://github.com/odoo/odoo/pull/245243 task-5472834 Forward-Port-Of: odoo/enterprise#111198 Forward-Port-Of: odoo/enterprise#105174
This update resolves a potential error in the automatic import of bank statements when multiple journals share the same IBAN but use different currencies. The fix prevents a 'singleton error' by streamlining the process of retrieving essential data, ensuring accurate journal matching and statement dispatching.
Original PR description
When having multiple journals with the same IBAN, but different currencies, we could have a singleton error if they are not all configured the same (besides the currency). This happens in the cron that fetches new CODAs as we first fetch all CODAs. Then, for each, we have to dispatch it in the right journal. To do so, we rely on `_parse_bank_statement_file` which is called on `self`, which itself calls `_get_coda_final_statements` that triggers the singleton error. However, at this point, we don't care about calling `_get_coda_final_statements` since we only want to retrieve the IBAN and the currency of the CODA, we don't care about the other details. Thus, the solution here is to ignore this call if we don't need it while just retrieveing the necessary info to match a journal before even creating the statements. opw-5723017 opw-6036909 Forward-Port-Of: odoo/enterprise#111250 Forward-Port-Of: odoo/enterprise#111101
This update corrects a sizing problem affecting the company logo on various Odoo reports. The previous CSS selector was too broad, causing it to incorrectly resize logos across multiple report templates. This change ensures consistent and accurate logo display in all financial reports.
Original PR description
This selector is generic and is impacting all the reports in `report_templates.xml` which are making use of the same class name. task-5951770 Community PR: https://github.com/odoo/odoo/pull/249432 Forward-Port-Of: odoo/enterprise#110858
This update resolves an issue where tax calculations for invoices in Peru (PE) were incorrect due to a missing configuration. The team re-introduced a key element, 'TierRange,' within the tax category settings, ensuring accurate tax calculations for ISC (Impuesto Sobre la Renta) taxes on PE invoices. This ensures compliance and accurate financial reporting for our Peruvian customers.
Original PR description
In [^1] the PE implementation for XML generation was rewritten to use the new dict_to_xml design rather than a large QWeb view. In that refactor the `TierRange` key on `TaxCategory` was lost. This PR re-introduces it. task-6046603 [^1]: odoo/enterprise#87598 Forward-Port-Of: odoo/enterprise#111061
This update corrects a bug in the SendCloud delivery service that was caused by incorrect Python slicing. The fix ensures that the correct element is retrieved, preventing an error and maintaining proper service functionality. The issue was not caught during testing due to a configuration oversight.
Original PR description
Slicing in Python returns a sub-list, even for a single element. Doing `res[:1]` does not return the first element so doing `.get` causes an error. This was not caught because the tests do not run in CI due to the tags on the class. Forward-Port-Of: odoo/enterprise#111254