Saturday, March 21, 2026
23 changes · 19.0
New functionality added to Odoo
This update adds support for a Swedish Peppol BIS3 invoice validation rule. It helps ensure electronic invoices meet the latest compliance requirements, reducing the risk of rejected documents.
Original PR description
Rule information: https://docs.peppol.eu/poacc/billing/3.0/2025-Q4/rules/ubl-peppol/SE-R-005/ OPW-5881918 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255005 Forward-Port-Of: odoo/odoo#250657
Enhancements to existing features
This update introduces a new system that allows other Odoo modules to adjust timesheet values directly within the timesheet wizard. This improves flexibility and accuracy by enabling automated updates based on related activities. It builds upon previous work to enhance the timesheet management process.
Original PR description
Add a hook in helpdesk_timesheet timer wizard for other modules to modify timesheet values. Forward-Port-Of: odoo/enterprise#107441 Forward-Port-Of: odoo/enterprise#107301
Resolved issues and error corrections
This fix makes automated website sales checks wait until the correct page is fully loaded before running validations. It reduces intermittent test failures caused by delayed translation loading in newer browser versions, helping keep releases and upgrades more stable.
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/odoo#254461 Forward-Port-Of: odoo/odoo#253896
Features or functions removed from Odoo
This update resolves an issue where a file remained after the l10n_it_xml_export module was removed in version 19.0. This commit ensures a cleaner and more streamlined codebase by removing the orphaned file. It's a minor technical adjustment.
Original PR description
The module was removed in 19.0 by this commit: https://github.com/odoo/enterprise/commit/761e08667a9c8172217afe8b709445d8e12b3872 However a file was accidentally left behind This commit cleans up the remaining file
This fixes an issue where using the command palette in the HTML editor could move the user's selection back to the start of the editable area. Users can now return to editing without losing their place, making text editing smoother and less error-prone.
Original PR description
Before this commit: when the whole editable regains the focus, the selection in the editable is reset to the start of it. After this commit: We create a override for hotkey service to open the command palette with an onClose to refocus the editable area without losing the current selection. For the hotkey override, we pass the area option so it's only valid in the editable area. Outside the editable, the command palette is opened in the default way. task-5949705 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253879 Forward-Port-Of: odoo/odoo#250624
This fix prevents automated self-order table sharing tests from failing when the same table is reused across different point-of-sale configurations. It improves confidence in releases by making test results more stable without changing customer-facing behavior.
Original PR description
In the test test_self_order_table_sharing, the test could fail due to multiple orders being created for the same table on different config since the same table was used on multiple config. This commit fixes this test by creating a new table for the config. runbot-error: 240898, 240896 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253081
Odoo no longer shows a blank note area when an activity description has been cleared but still contains empty formatting. This keeps activity cards cleaner and avoids confusing empty space for users.
Original PR description
**Description of the issue/feature this PR addresses:** When an activity description is cleared, the stored value may still contain empty HTML content. The UI was still rendering this as a note,…
**Description of the issue/feature this PR addresses:** When an activity description is cleared, the stored value may still contain empty HTML content. The UI was still rendering this as a note, resulting in unnecessary blank space in the activity card. **Current behavior before PR:** Even when the activity description is cleared and contains only empty HTML, the activity note container is still rendered, leaving visible empty space in the UI. **Desired behavior after PR is merged:** The activity note is rendered only when it contains meaningful content. Empty HTML descriptions are ignored, preventing blank space from appearing in the activity card UI. Before <img width="445" height="84" alt="image" src="https://github.com/user-attachments/assets/f6648bb0-78d9-4063-a347-fe664370106e" /> After <img width="459" height="72" alt="image" src="https://github.com/user-attachments/assets/84c2063a-7c68-4dfe-b729-566ca4b5dcd1" /> task-[4752613](https://www.odoo.com/odoo/project/1519/tasks/4752613) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254708 Forward-Port-Of: odoo/odoo#252139
Users who do not have livechat access rights can now open the livechat invite panel without encountering an error. This keeps the invitation flow usable by allowing active live chat partners to be retrieved for invited users.
Original PR description
When opening the livechat invite panel, users without livechat access rights encounter an access error. This commit fixes the issue by ensuring active live chat partners can be retrieved for invited users. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254565
This fix reduces the space taken by the company logo in report header bubbles so an additional address line can fit cleanly. It helps prevent address details from being cramped or cut off in generated reports, especially when vertical logos are used.
Original PR description
The bubble layout was changed in commit[1] but the logo size is too big to accomodate a sufficient amount of address lines. task-5951770 [1]: odoo/odoo@8eb61a245cd3b650e309fdb55d24654c34d785cd Enterprise PR: https://github.com/odoo/enterprise/pull/110858 | Before | After | |--------|--------| | <img width="566" height="182" alt="image" src="https://github.com/user-attachments/assets/bb2671c3-62c8-45df-8039-4a9455d21982" /> | <img width="566" height="182" alt="image" src="https://github.com/user-attachments/assets/d36ca5fe-24b3-4a74-8323-2c587d11495e" />| | <img width="566" height="182" alt="image" src="https://github.com/user-attachments/assets/2b1c7ce9-2d14-47ab-9fc0-b4bca33e412f" /> | <img width="566" height="182" alt="image" src="https://github.com/user-attachments/assets/df189280-b274-4dea-9ec1-9482c47b00e5" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249432
This fixes an issue where choosing a suggested mention after typing "@" in the message composer could trigger an error. Users can now select mention suggestions normally, improving reliability when writing messages.
Original PR description
Problem: Opening the composer, typing "@" and selecting any item causes a traceback. Cause: After 8c99b17fcc3a612fd897da9ee29e2f53254d5933, the attribute `channel` was renamed to `thread`. Some code still referenced the old `channel` attribute, leading to errors when selecting mentions. Steps to reproduce: - Open the composer. - Type "@" to trigger mentions. - Select any item from the suggestions. - Observe a traceback. opw-6030307 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254127
This fix prevents dashboards from crashing when users try to print them. It helps ensure dashboard reports can be reliably printed without interrupting business workflows.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254815
This update prevents file upload controls from adding unwanted space in forms. It keeps the intended click behavior while ensuring related action buttons stay aligned, improving the user interface in areas such as employee work permit uploads.
Original PR description
This PR completes the changes introduced in: https://github.com/odoo/odoo/commit/2cbb735f5eecb7c31db8245b8d598d7193992a05 ### Issue: A `<div>` was added to prevent click propagation in the FileUploader, but it introduced unintended extra spacing in several parts of the UI ### Cause: The added `<div>` affected the layout by taking up space where it should not ### Fix: A specific class is added to neutralize the layout impact of this element while preserving the click propagation behavior ### Steps to reproduce: - Install `hr' - Create a new Employee - Go in Private Information > Work Permit - Upload a file Before the fix, the edition's buttons are in another line opw-5918379 Forward-Port-Of: odoo/odoo#254982
This fixes two Kenyan localization fields related to withholding tax certificates so their labels and entry space display properly. Users working with Kenyan accounting documents can now see and fill these fields as expected.
Original PR description
Description of the issue/feature this PR addresses: Two l10n_ke fields do not appear normally because of the div they are in Current behavior before PR: The 2 fields appear without a string being shown Desired behavior after PR is merged: The 2 fields, relating to WHT, should appear normally, with a string and a blank space for the record. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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 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 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 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