Daily updates from Odoo
Saturday, March 21, 2026
13 changes · saas-19.1
New functionality added to Odoo
This update incorporates a new rule from PEPPOL (a global electronic invoicing standard) to ensure our invoices comply with international regulations. Specifically, it addresses rule SE-R-005, which is crucial for accurate and compliant electronic invoice processing, particularly for international transactions. This change supports our ongoing commitment to meeting industry standards and facilitating seamless business operations.
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 enhances database user management by adding a filter to easily identify databases associated with a user. Additionally, logging has been implemented for API calls to track database activity and synchronization processes have been refined for improved user experience and data accuracy.
Original PR description
### [FIX] databases: fix invite user wizard when no users in list When there was no users in the list, the invite users wizard was failing to find the project on which the new users shall be invited. With this commit, the wizard is initialized with the active_id instead of self.project_id, which is always set in the databases settings form view. ### [IMP] databases: add filter on database users Add a filter on the databases list view to see all the databases that contain a given user. Task-id: [5945293](https://www.odoo.com/odoo/project.task/5945293) Forward-Port-Of: odoo/enterprise#108346
Resolved issues and error corrections
This update resolves an issue where tax calculations for Peruvian VAT (ISC) were incorrect due to a missing configuration element. The PR reintroduces a key component needed for accurate tax determination, ensuring compliance with Peruvian tax regulations. This ensures accurate VAT reporting for Odoo Enterprise users operating in Peru.
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 cleans up the formatting of messages related to return checks in the accounting reports module. The VIES check hyperlink has been removed to simplify the user experience and will be reintroduced in a future release. This change improves the clarity and usability of the reporting functionality.
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. Forward-Port-Of: odoo/enterprise#106154
This update resolves a technical issue where the 'Roles' filter in the Planning module was incorrectly passing record IDs as strings, leading to search problems. The fix ensures that record IDs are correctly interpreted as numbers, improving the accuracy and reliability of the role-based search functionality.
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 Forward-Port-Of: odoo/enterprise#109781
This update significantly speeds up the process of expanding project tasks to include users. Previously, a slow search query was triggered repeatedly for large numbers of tasks. The change now uses a more efficient search method, reducing task expansion time from 30 seconds to just 1.4 seconds for 300,000 tasks.
Original PR description
Before this commit, expanding the `user_ids` involved fetching all the tasks satisfying a domain by a search call and returning only the active users by accessing the field `user_ids` from the fetched recordset of tasks. This approach introduced slowness with a big number of `project.task` since for each batch of **1000** records, a `__get__` call on the field will trigger an `SQL` query. I have updated the code to have the inverse field `task_ids` in the `res.users` model and did the search, the other way around searching directly the `res.users` model. | Tasks | Before | After | | :--- | :--- | :--- | | 300K | 30s | 1.4s | opw-5942477 Forward-Port-Of: odoo/enterprise#110641
This update resolves a technical issue that could cause errors when importing bank statements with multiple journals using different currencies. The fix optimizes the process to avoid unnecessary calls, ensuring smoother and more reliable handling of multicurrency accounting data. This improves the stability of the system when dealing with complex financial configurations.
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#111361 Forward-Port-Of: odoo/enterprise#111101
This update resolves an issue where the WhatsApp Business Account webhook would crash when multiple phone numbers were linked to the same account. Odoo's design allows for multiple phone numbers per account, but this change prevents the system from encountering errors when processing webhooks triggered by these configurations. This ensures more reliable WhatsApp integration for our users.
Original PR description
The webhook crashes when a WhatsApp Business Account uses multiple phone numbers. ### Steps to reproduce 1. Link two phone numbers to the same Account ID. 2. Receive a webhook for that account. ### Cause Odoo allows multiple records to share one Account ID to support multiple phone numbers. When a webhook arrives, searching by this ID returns a of all 2 matching records. The system crashes because it tries to read a security secret from this recordset to verify the request. opw-5419180 Forward-Port-Of: odoo/enterprise#107134
This update fixes a previous issue where clicking on the 'Initial Demand' in the stock valuation report opened the wrong account.view without relevant filters. Now, the click redirects to the correct account.move.line, displaying the initial balance and related information, improving the report's usability and accuracy.
Original PR description
Currently the initial demand click will open the account.move view without filter. So you don't know what is related to the initial balance or not. This commit updates the action to use a domain on the accounts used by inventory valuation. Also it shows the account.move.line instead. It also add a date if needed to be concistent with the reprot. Task: 6024514 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#253907
This pull request updates the core spreadsheet component within Odoo. It includes several bug fixes and improvements related to formula handling, clipboard pasting, chart display, and dark mode compatibility. These changes enhance the spreadsheet's functionality and usability for users.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/96788195e8 [REL] 19.1.11 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/96788195e8 [REL] 19.1.11 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/cf6623c833 [FIX] Formulas: fix missing debugger char in formula reconstruction [Task: 6019586](https://www.odoo.com/odoo/2328/tasks/6019586) https://github.com/odoo/o-spreadsheet/commit/d94c753b98 [FIX] clipboard : paste as value [Task: 5936382](https://www.odoo.com/odoo/2328/tasks/5936382) https://github.com/odoo/o-spreadsheet/commit/2efaf919b0 [FIX] Chart: Update geojson data [Task: 5224009](https://www.odoo.com/odoo/2328/tasks/5224009) https://github.com/odoo/o-spreadsheet/commit/e9dfa413aa [FIX] filters: allow criterion filter in dashboard [Task: 6017734](https://www.odoo.com/odoo/2328/tasks/6017734) https://github.com/odoo/o-spreadsheet/commit/5e7fb8cc7b [FIX] charts: hierarchical charts should show formatted labels instead of raw [Task: 5913296](https://www.odoo.com/odoo/2328/tasks/5913296) https://github.com/odoo/o-spreadsheet/commit/d15681ef92 [FIX] composer: composer hover in dark mode [Task: 5928811](https://www.odoo.com/odoo/2328/tasks/5928811) https://github.com/odoo/o-spreadsheet/commit/e7624a90ee [REV] composer: use opacity rather than color alpha [Task: 5928811](https://www.odoo.com/odoo/2328/tasks/5928811) https://github.com/odoo/o-spreadsheet/commit/f542f0d387 [FIX] standalone_composer: wrong composer content on start edition [Task: 6022743](https://www.odoo.com/odoo/2328/tasks/6022743) https://github.com/odoo/o-spreadsheet/commit/b8f8da346e [FIX] pivot: can add the same granularity [Task: 5949522](https://www.odoo.com/odoo/2328/tasks/5949522) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update resolves a layout issue caused by a recent change designed to prevent unwanted clicks in the FileUploader. The fix adds a class to correct the spacing, ensuring the UI remains properly aligned and functional. This improves the user experience when uploading files.
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 update adds a crucial test to ensure that changes to the database code don't unintentionally break the sequence feature. The test uses a 'savepoint rollback' to verify the system can recover from potential issues, enhancing stability and reliability. This prevents silent failures and ensures data integrity.
Original PR description
The aim of this commit is to ensure the feature doesn't get silently broken in case some underlying code gets reworked. task-id: None Forward-Port-Of: odoo/odoo#255053
This update resolves an issue where creating multiple stock valuation closings with different accounting dates resulted in an error. The fix ensures the system correctly considers the accounting date when validating closing entries, preventing the 'Invalid Operation' error. This improves the reliability of inventory valuation processes.
Original PR description
**Issue**: Making two stock valuation closings with different accounting dates in the past, on the same day, leads to an "Invalid Operation" error. **Steps to reproduce**: - In settings, set…
**Issue**: Making two stock valuation closings with different accounting dates in the past, on the same day, leads to an "Invalid Operation" error. **Steps to reproduce**: - In settings, set inventory valuation at invoicing - Create 2 bills of a storable product:: - `Accounting date` = `bill date` = today - 2 days - `Accounting date` = `bill date` = today - 4 days - Go to Accounting > Review > Inventory > Inventory Valuation - Set the day to today - 3 days, generate and post the entry - Go back the Inventory Valuation - Set the day to today - 1 day, generate the entry -> Invalid Operation error: the system thinks it exists a closing entry after the selected date. **Cause**: The regression was introduced by commit https://github.com/odoo-dev/odoo/commit/594654deb84ba45e9a6a765b89de79e4ce4e4b50 Indeed, `_get_last_closing_date` was modified to prioritize the creation date of the closing instead of its accounting date: https://github.com/odoo/odoo/blob/594654deb84ba45e9a6a765b89de79e4ce4e4b50/addons/stock_account/models/res_company.py#L336 As a consequence, the second closing with at_date = today - 1 day was compared against last_closing_date = today (creation date): https://github.com/odoo/odoo/blob/b3559145febc16271c78ca516af9d7e99bf3452f/addons/stock_account/models/res_company.py#L53-L55 **Solution** To avoid to revert this commit https://github.com/odoo-dev/odoo/commit/594654deb84ba45e9a6a765b89de79e4ce4e4b50 fix, both creation and accounting date are used. opw-5559264 Forward-Port-Of: odoo/odoo#249734