Daily updates from Odoo
Friday, April 10, 2026
23 changes · 19.0
Enhancements to existing features
This update streamlines the way odoo.com accesses database information, eliminating an outdated XMLRPC fallback. This change improves performance and simplifies the system, ensuring faster KPI synchronization for the odoo.com platform. Additionally, a new route is implemented to group database calls, mirroring the efficiency of the existing mail activity summary dashboard.
Original PR description
### [IMP] databases: remove xmlrpc fallback for odoo.com Since odoo.com migrated to 19.0, it will always support the json2 API, and XMLRPC support will be dropped on the next version. In order to…
### [IMP] databases: remove xmlrpc fallback for odoo.com Since odoo.com migrated to 19.0, it will always support the json2 API, and XMLRPC support will be dropped on the next version. In order to simplify the code and avoid subsequent requests in case of errors on the json2 API, the XMLRPC fallback is stripped off from `databases.api`. In this commit, we only adapt the tests so that they don't test the fallback to XMLRPC when calling odoo.com. In the next commit, we will remove the dead code. The configuration parameter `databases.odoocom_apiuser` is removed, as well as the corresponding field in the Settings page. ### [IMP] databases: remove xmlrpc fallback for odoo.com (fixup!) With this second commit, we remove the dead code concerning the fallback to XMLRPC when calling odoo.com. ### [IMP] databases: use multidb routes to fetch KPIs on SaaS When synchronizing KPIs from databases in the new Databases application, it takes a long time to make a RPC call to each database in the list. With this commit, in the case of the SaaS, these calls are grouped by server to a dedicated route that will process the information faster, like the databases dashboard odoo.com/my/databases already does to fetch mail activities summary. Task-id: [5167731](https://www.odoo.com/odoo/project.task/5167731)
This update enhances financial reporting by providing a 'coverage ratio' for each analytic plan. This allows users to easily identify if journal items are fully distributed across their planned analytics, which is crucial for accurate audit trails and financial analysis. It addresses discrepancies arising from Odoo's partial analytic distribution capabilities.
Original PR description
The objective is to bridge the gap between journal items and analytic items in the reporting. As Odoo allows for partial analytic distribution, this creates discrepancies in the P&L and BS when filtered by an analytic plan. This features aims to provide users with a clear 'coverage ratio' per plan to identify incomplete distributions during audits. task-5887978 Forward-Port-Of: odoo/enterprise#106750
Resolved issues and error corrections
This update resolves a problem where the automated tour feature within the industry_fsm module was failing intermittently. The fix, triggered by a runbot test, ensures the tour consistently runs as expected, improving the user experience and streamlining onboarding for new users of the industry_fsm functionality. This prevents potential frustration and ensures users can quickly learn the key features.
Original PR description
runbot issue-242264 Forward-Port-Of: odoo/enterprise#113272
This update resolves an issue where retry attempts for Fiskaly SCU setup were incorrectly triggered by client errors, leading to confusing error messages. The fix now only retries on server errors and intelligently reuses existing SCU instances to avoid exceeding Fiskaly's signature creation limits, ensuring smoother and more reliable SCU setup.
Original PR description
- Only retry on server errors (5xx) instead of client errors (4xx), which caused confusing RetryError instead of the actual API response. - Reuse the existing active SCU when Fiskaly's limit of 1 active signature creation unit is reached (E_SCU_LIMIT_REACHED). opw-5958673
This update fixes an issue where Field Service orders were incorrectly reserving all stock moves within a delivery chain, leading to all picking steps being marked as 'Ready' instead of just the customer-bound ones. The change ensures that stock reservations are applied only to the necessary picking steps, improving order fulfillment accuracy. This resolves a conflict arising from a recent database update.
Original PR description
Since db76eb2020383, `move_ids` on sale order line is link to all stock move of a delivery chain. Meaning there is 3 moves by default for 3 steps delivery config. Creating a sale order via field service will force the reservation of the sale order moves. This will lead to all the picking being marked as "Ready" instead of only the one going to "Customer" location. Task: 5914851
This update fixes an issue where users could order unlimited quantities of rental products through the website. The change limits the available quantity to the minimum rental availability, ensuring accurate resource allocation and preventing overbooking. This improves the reliability of our rental service.
Original PR description
It is possible to order as many products as we want of a rental product that synchronizes shifts depending on a specific service Steps to reproduce: 1. Install website_sale_renting_planning module 2. Go to Rental > Products and create a new product "test" with Sales enabled, Product Type "Service", Plan Services enabled as "Developer", in the Sales tab, enable Is Published and in the Rental prices tab, create a pricing for Daily period 3. In the General Information tab, click on the internal link to "Developer" 4. Enable Sync Shifts and Rental Orders 5. Go to the eCommerce website and search for product "test" 6. You can add as many quantity of the product to your cart Issue: We don't limit the maximum quantity of the product Solution: Look through the renting availabilities of the product and set the maximum quantity to the minimum of the availabilities relevant to the renting dates selected opw-6009928
This update fixes a display issue in Odoo's approval chatter. When an approval request is canceled before a purchase order is created, a misleading 'This message has been removed' message appeared. The fix ensures chatter messages are only logged when relevant, improving the user experience and clarity.
Original PR description
Steps to reproduce: ------------------------------------ 1. Install `approvals_purchase` module with demo 2. Approvals > New Request in Borrow Items 3. Create request with any product 4. Click on the Submit button 5. Click on the Cancel button Observation: ------------------------------------ In chatter there's a message stating: 'This message has been removed' Issue: ------------------------------------ When you cancel an approval request that has no purchase orders created yet, the `_log_po_cancellation_to_chatter` method is called with an empty `cancellation_log_msg` string, which causes Odoo to display 'This message has been removed' in the chatter. Solution: ------------------------------------ Only log to chatter if there's actually a message to log opw-6063998
This update allows users to create pricelist rules for subscription products that also offer one-time sales. Previously, the system restricted pricelist items based on recurring invoice settings, preventing flexible pricing options. This change ensures users can accurately define pricing for hybrid subscription models.
Original PR description
Currently, the pricelist item form strictly filters out any product marked as a recurring invoice (`recurring_invoice` = True). This prevents users from defining standard pricelist rules for "hybrid" products that are subscriptions but also have `allow_one_time_sale` enabled. This commit updates the domain on `product_tmpl_id` in the pricelist item form to include an OR condition. Products are now visible if they are NOT a recurring invoice, OR if they explicitly allow one-time sales. Task: 6052066
This update resolves an error that prevented non-administrator users from viewing subscription options for products without recurring plans. The fix changes how the system checks for subscription rules, ensuring a smoother experience for all users accessing the shop. This prevents a frustrating error message and improves usability.
Original PR description
__ ## Short functional explanation of the error When a user other than Admin goes to the Shop app and clicks on a subscription for which no recurring plan has been set, an error message appears. ##…
__ ## Short functional explanation of the error When a user other than Admin goes to the Shop app and clicks on a subscription for which no recurring plan has been set, an error message appears. ## Reproduction Steps 1. As admin, create a product. Check the Subscription box and make sure to *not* create any recurring plan. 2. Publish the product on website. 3. Log in as another user. 4. Click on Shop > product you've just created. ### Expected behavior As this is a subscription without recurring plan, the error message should be `This product has no valid combination.` ### Unexpected behavior An error occurs: `Error message: You do not have enough rights to access the field "subscription_rule_ids" on Product (product.template). Please contact your system administrator. Operation: read` ## Origin of the issue The access group of `subscription_rule_ids` is `sales_team .group_sale_salesman`, which a simple user who wants to access the shop to buy items doesn't have. Therefore, we have to proceed like in 19.1: instead of checking the `subscription_rule_ids` field, we check `pricelist_rule_ids.plan_id` to access the recurring plan of the item. __ opw-6024874
This update fixes a discrepancy in how planning times are displayed. Previously, reports printed times in 24-hour format while the user interface used 12-hour format. The fix ensures that all printed planning reports consistently use the same time format as the user interface, improving clarity and accuracy for users.
Original PR description
Steps to reproduce: - Install the Planning module - Open the Planning app - Click the Print action Issue: Planning slots display in 12-hour format in the UI but print in 24-hour format. Cause: A hard-coded time format was used when printing planning slots. Fix: Remove the explicit format and rely on the locale aware short time format. task-5462276
This update resolves an issue where the employee sick leave warning incorrectly flagged employees with absences exceeding 31 days. The fix now accurately identifies employees who have been on sick leave within the last 31 days, ensuring more precise reporting and compliance. This improves the accuracy of HR data.
Original PR description
-**Issue**: The warning shows employees who had a long sick leaves before 31 days, which is incorrect. -**Fix**: Adjust the logic to include employees who have been on a sick leave for the past 31 days (at least). Forward-Port-Of: odoo/enterprise#113249 Forward-Port-Of: odoo/enterprise#112985
This update resolves a test failure in the account accounting module related to payment processing. The fix addresses a mismatch in data values that occurred when the account accountant module wasn't installed, preventing the test from running correctly. This ensures the accuracy and reliability of payment-related tests.
Original PR description
Fixup for test test_early_payment_discount_multi_bill_statement that will fail when accountant is not installed due to mismatched amls values opw-5881976 Forward-Port-Of: odoo/enterprise#113425
This update corrects an error in the Luxembourg balance sheet report that was causing incorrect 'Results brought forward' values. The fix adjusts how the system calculates this line, ensuring it accurately reflects year-end financial adjustments for Luxembourg companies. This improves the reliability of financial reporting.
Original PR description
… sheet Steps to reproduce: - Use a Luxembourg company - Post a P&L result for the year and do the year-end affectation (Dr 142 / Cr 1412) - Open the Luxembourg balance sheet (full or abbreviated)…
… sheet
Steps to reproduce:
- Use a Luxembourg company
- Post a P&L result for the year and do the year-end affectation (Dr 142 / Cr 1412)
- Open the Luxembourg balance sheet (full or abbreviated)
Issue:
Line "V. Profit or loss brought forward" shows incorrect values.
Cause:
The `accounts` expression for that line used `account_codes` engine with formula `-14`, which only sums accounts by code prefix. Account 1412 ("Results brought forward (assigned)") was typed as `equity`, so its balance was carried forward as an initial balance instead of being captured as retained earnings in the formula.
Solution:
- Set account 1412 to `equity_unaffected`, consistent with account 142.
- Change the `accounts` expression of Line V in both the full and abbreviated balance sheet to use the `domain` engine: `['|', ('account_id.code', '=like', '14%'), ('account_id.account_type', '=', 'equity_unaffected')]` with subformula `-sum`. This correctly captures the balance of all 14x accounts and any `equity_unaffected` accounts, which covers the standard year-end affectation workflow.
opw-5883505This update fixes a technical issue that caused duplicate error messages when generating tax returns in Odoo Enterprise. The fix prevents the system from creating redundant checks, ensuring a smoother and more reliable tax return generation process. This improves user experience and data accuracy.
Original PR description
Steps to reproduce:
- Go to Accounting → Configuration → Accounting → Return Types.
- Open the standard Annual Closing: Corporate Tax return type.
- Select Generic Tax Report as a report in the Report field.
- Navigate to Accounting → Accounting → Closing → Tax Returns.
- Generate the tax return for the selected period.
Issue:
- Duplicate checks with code check_draft_entries are created for the same return, raising:
'You can only have a unique check code for each return.'
This happens because:
- `_check_suite_common_vat_report` adds a Draft entries check.
- `_check_suite_annual_closing` also adds a similar check (No draft entries) with the same code.
- Both run together, causing duplication.
Solution:
- Added `check_codes_to_ignore.add('check_draft_entries')`
in _check_suite_common_vat_report to ensure the check is not generated twice.
opw-6066030This update resolves a visual issue where text in the employee payroll view would split and misalign with checkboxes when viewed on different screen sizes. The fix ensures all text remains on a single line, maintaining a consistent and professional appearance for employees and HR staff. This improves the user experience and data clarity.
Original PR description
Step to reproduce: play with the width of the window, at some point text splits and item are unaligned. Cause: with some window width, the text is splitted on 2 lines, which makes it unaligned with the checkbox. Solution: force text on same line using style="white-space: nowrap". Task: 6069017
This update enhances the logging of Stripe payment refusals in the Odoo Enterprise HR expense module. Now, both the MCC name and code are recorded, providing clearer insights for troubleshooting and resolving payment issues. This improves the ability to identify and address problems with expense reimbursements.
Original PR description
Before this commit: - Only the MCC name was logged when Stripe refused an MCC. After this commit: - The MCC code is now logged along with the MCC name for better clarity and debugging. task-6084569
This update prevents regular employees from modifying target job selections within appraisals. The previous issue stemmed from a lack of access permissions, causing errors. By making the 'target job' field read-only for regular employees, the system now correctly reflects that managers are responsible for these changes, improving data integrity.
Original PR description
Steps to reproduce: 1- Create an appraisal for a regular employee 2- Confirm it so its state changes to 'ongoing' 3- Try to change the target job as an employee 4- Click on see more Cause: The main cause is that regular employees lack the privilage to view job postings by a company. therefore an access rights errors is resulted when the flow is executed. Solution: Made the field readonly for normal employees (as it should be, target jobs are the managers' responsibility to change).
This update fixes an issue where users could create serial numbers for components during manufacturing operations, even when serial number creation was disabled in settings. This change ensures that only authorized serial numbers are created, improving data accuracy and preventing potential inventory discrepancies. The fix addresses a technical oversight in the shopfloor application.
Original PR description
**Issue**: Even when creation of new Serial Numbers for components is disabled on the Manufacturing Operation Type, it is still possible to create them from the shopfloor application. **Steps to…
**Issue**: Even when creation of new Serial Numbers for components is disabled on the Manufacturing Operation Type, it is still possible to create them from the shopfloor application. **Steps to reproduce**: - Enable "Lots & Serial Numbers", on the global settings - Create two products, one tracked by unique serial number - Go to Inventory > Configuration > Warehouse Management > Operations Types - Select Manufacturing and disable "Create New Lots/Serial Numbers for Components" - Create and confirm a MO using the tracked product as component - Go to shopfloor - Click the "+" button next to the component, then "New" -> No error is raised when creating a serial number **Cause**: The `_check_create` constraint relies on `active_mo_id`: https://github.com/odoo/odoo/blob/494cdcfdf4ec166e0a643ee70a53c12c810d02b4/addons/mrp/models/stock_lot.py#L11-L19 However, the shopfloor does not pass this, in context: https://github.com/odoo/enterprise/blob/54c6252a0e13b11fc297b6828883923c0f89881a/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L193-L199 As a result, the check is bypassed. opw-6041241
This update simplifies the synchronization wizard by reducing overwhelming error messages, creating a calmer user experience. Instead of detailed errors, users now see a summary count of issues. Detailed error logs are now stored in the database settings chatter for technical review, minimizing distractions and improving usability.
Original PR description
This commit reduces the verbosity of error messages displayed in the synchronization wizard to avoid creating an unnecessary sense of alarm for users. Instead of showing a detailed list of errors, the wizard now displays a single summary message indicating the number of databases that encountered an issue. A new Unreachable project tag is introduced (loaded from project_tags.xml if missing). It is automatically assigned to failing databases and removed upon the next successful synchronization. Detailed error information is no longer shown in the wizard and is instead logged in the chatter of the corresponding database settings for further inspection. Previously displayed non-blocking warnings for already-configured SaaS databases are now omitted to reduce noise, as they would otherwise generate chatter messages at each synchronization. Task-id: [5945269](https://www.odoo.com/odoo/project.task/5945269)
This update ensures the 'Load Order' button remains hidden on Grab/GoFood orders, regardless of screen size. Previously, resizing the window would briefly show this button, which could lead to manual order changes. This change prevents unauthorized modifications and maintains the integrity of external delivery orders.
Original PR description
For Grab/GoFood orders, the "Load Order" button is replaced by "Set Food Ready" to prevent manual edits. Previously, resizing or minimizing the window caused the hidden "Load Order" button to reappear due to responsive layout overrides (e.g., mobile view CSS classes). This commit updates the visibility logic to ensure the button remains strictly hidden across all screen sizes for external delivery orders. opw-6044176
This update corrects a bug where material resources with assigned roles were incorrectly displayed when filtering the Planning view by employees. The fix ensures that only resources designated as employees or those without assigned roles are visible, improving the accuracy of the Planning view's employee-based filtering.
Original PR description
Steps to Reproduce: 1. Open the Planning app. 2. Go to Configuration -> Materials. 3. Set a role on either the demo material resource laptop or toolkit. 4. Go back to the Planning view. 5. Apply the view filter employee (filter by Employees). Issue: The material resource with a role should not be visible, but it is still present. Current behaviour: When filtering the Planning view by Employees, material resources with an assigned role remain visible. Expected behaviour: Material resources with an assigned role should be excluded from the Planning view when filtered by Employees — only employee-type resources and resources on which role is not set should appear. Fix: Improved the filter domain so unnecessary data are excluded. Task-4526989 Forward-Port-Of: odoo/enterprise#92816
This update corrects a technical issue that was unintentionally sending payroll data to non-production environments. This ensures that test and development environments are isolated from live payroll data, improving data security and preventing potential disruptions. The change maintains the core payroll functionality while safeguarding against accidental data leakage.
Original PR description
Forward-Port-Of: odoo/enterprise#113504
This update fixes a bug that prevented CSV files from being viewed correctly in the list view of Odoo Enterprise. Now, CSV files are treated the same as other file types, aligning the behavior with the Kanban view and improving usability for users.
Original PR description
Current behavior before PR: - CSV files were viewable from the Kanban view, and opened the spreadsheet conversion dialog - In list view, CSV files were not considered viewable - Same issue for trashed CSV files in list view Desired behavior after PR is merged: - Consider CSV files as viewable in list view - Align behavior with the Kanban view Task: 6052134 Forward-Port-Of: odoo/enterprise#113359 Forward-Port-Of: odoo/enterprise#112869