Friday, April 10, 2026
30 changes · 19.0
Enhancements to existing features
Self-ordering now loads only the store and session information it actually needs. This reduces unnecessary data transfer and can make the self-ordering experience faster and more efficient without changing how users interact with it.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Test runs can now include shared tests, such as web or linting checks, when selecting a specific module. This makes module-focused testing more complete and avoids slow or confusing manual test tag combinations.
Original PR description
Some tests are ran as part of a specific module even if they are testing many modules (js tests, liniting, ...). If running --test-tags /project, the js tests are not ran meaning that to run all…
Some tests are ran as part of a specific module even if they are testing many modules (js tests, liniting, ...).
If running --test-tags /project, the js tests are not ran meaning that to run all tests we may need to do something like
--test-tags /project,/web:WebSuite[@account],/web:MobileWebSuite[@account],..
This is nor practical, nor intuitive and lead to the /web module taking a lot of time.
The proposed solution would behave somehoe like the test /web:WebSuite was defined in all modules.
A parameter will be given to the test with the list of module to test when executed. An alternative solution could be to run it once per module but some experiments where done for that and the overhead can be massive in some cases, mainly when the test spawns a subprocess (chrome, pylint, ...)
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-prThis update adds missing tax exemption reasons required by Peppol for electronic invoicing. It helps businesses generate more complete and compliant invoice data when using UBL/CII e-invoicing.
Original PR description
Some tax exemption reasons were missing, This commit ensures having all the tax exemption reasons introduced by Peppol task-6048561 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257174 Forward-Port-Of: odoo/odoo#254841
Resolved issues and error corrections
Pressing Enter on an empty formatted toggle list title now removes the empty toggle and exits the list instead of creating another toggle. This makes editing toggle lists more predictable and also preserves right-to-left text direction when leaving a toggle block.
Original PR description
**Current behavior before PR:** Steps to reproduce issue: - Create a toggle list. - Apply some formattings e.g. bold and italic to title. - Press Enter. Instead of removing the toggle, another toggle list is created. **Desired behavior after PR is merged:** Now, if there is a empty toggle block title having some formattings in it, pressing enter removes the empty toggle and exit the list. task-6075014 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258115 Forward-Port-Of: odoo/odoo#256355
Field service users can now access the bill of materials information needed when viewing stock moves from their tasks. This prevents access errors during service workflows that include both services and physical goods.
Original PR description
**Steps to reproduce:**
- Install mrp, industry_fsm_repair, and industry_fsm_sale
- Create a user with only fsm access rights
- Create a sale order with both service and goods products using the above user
- Confirm the sale
- Log in as the fsm user
- Go to fsm app > open task > open pickup > open stock move
**Issue:**
fsm users with no BOM access encounter errors when opening stock moves from fsm tasks.
**Cause:**
lack of bom access for fsm-only user.
**Fix:**
This commit grants bom and bom line access to the project user.
task-5077522
Forward-Port-Of: odoo/odoo#229522This update corrects a malformed tag in the marketing card campaign setup. It helps prevent errors with newer XML processing software and keeps marketing card generation working reliably.
Original PR description
This commit fixes a malformed HTML/XML tag in CardCampaign. Note: before libxml2 v2.14.0, this issue was automagically cleaned up, but not anymore. Forward-Port-Of: odoo/odoo#258388
Users in chat channels now see the correct seen indicator even when their latest activity includes a notification message. This keeps message read status visible and avoids confusion about whether a message was seen.
Original PR description
Before this PR: In channels with seen indicators, the indicator is hidden if the user's last message is a notification. Since indicators are not displayed on notifications and the logic does not fall back to the previous message, the user is left with no visible 'seen' status. After this PR: The seen indicator now skips notification-type messages and is correctly displayed on the last message sent by the user. task-5921911 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a small editing issue in the HTML editor where the cursor could be placed incorrectly when list items were cleaned up or reorganized. It helps make text editing smoother and prevents confusing cursor behavior while working with lists.
Original PR description
Description of the issue this PR addresses: This PR is a fixup to [[1]](https://github.com/odoo/odoo/commit/77cbdc0120f7ae7d5c777eb946ad568f2caf05d7) where cursor was not updated properly before unwrapping the element. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a small typo in the Peppol invoicing connection code so the correct error handling is used. It helps ensure users receive the intended error response when something goes wrong with Peppol document exchange.
Original PR description
Correction in a typo from the last commit opw-6102471
Users can now choose values in editable list dropdown fields using Enter or Tab, not just the mouse or arrow keys. This makes data entry in list views smoother and avoids keyboard navigation getting blocked while editing records.
Original PR description
Steps: - Open any editable list view (for example sub-list view in sales) - Either it has a selection field or you add it via studio - With two values (for example "true" and "false") - Add a record to your list view - Try to edit the selection field - Popover is opened - You can select any value with a mouse click - You can navigate through values with arrows - You can't select values with `Enter` and `Tab` So list cell in edit mode has a function for all theses hotkeys: - `tab` - `shift+tab` - `enter` - `escape` Because `ListRenderer.onCellKeydown` is called before `hotkeyService.onKeyDown`, if any hotkeys is handled in cell edit mode it will be prevented and the hotkeyService will not propagate it to `select_menu`. That's why arrows are working, because there are not listed in cell edit mode keys. opw-6025476
Users who click a message notification for a record they cannot access are now sent to their inbox instead of seeing an access error. This prevents a confusing interruption and keeps the messaging experience smoother.
Original PR description
Currently, when a user clicks on a notification in the messaging menu relating to a record they don't have access to, an access error occurs. This PR changes this behavior so that the user is redirected to the inbox instead. task-5374528
A malformed tag in the web report tests was corrected so the test suite works reliably with newer XML parsing libraries. This is an internal quality fix that helps prevent avoidable test failures during upgrades or validation.
Original PR description
This commit fixes a malformed HTML/XML tag in TestReports. Note: before libxml2 v2.14.0, this issue was automagically cleaned up, but not anymore.
This fix reverts a previous change that unintentionally marked normal editor buttons as using a custom style. It helps keep button styling behavior consistent for users editing links and buttons in the HTML editor.
Original PR description
This reverts commit 6eaf2afcbb4be84b1e986ef43eb7cf9b62a4cd95. After 19.0, the custom button style is introduced again. The previous fix causes another problem by setting the button style as custom in normal editor. Thus it should be fixed differently. task-6061443 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The form view now only shows the Export XML option for bills that can actually be exported. This avoids users seeing an action that would not work, reducing confusion when handling electronic invoices.
Original PR description
Problem --------- Since the UBL export refactor, it was not possible to export the XML of non-imported bills and not self-bills. The Export XML option had been removed from the list view in odoo/odoo#255289. The Form view was omitted. Solution --------- Show the button "Export XML" only if the move can actually be exported. opw-6083344 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257910
Point of Sale session reports now round category totals for quantities and prices to the expected precision. This prevents confusing long decimal values in reports, making totals easier to read and trust when many decimal quantities are sold.
Original PR description
When selling a lot of product with different quantities (quantities with decimals) the session report total by category might have a lot of decimals instead of 2. Steps to reproduce: ------------------- * Open PoS * Make an order with a lot of product and modify the quantities to have random values with decimals * Close the session * Generate the session report > Observation: The total qty by category has a lot of decimals instead of the 2 expected. The same error also happens for the total price Why the fix: ------------ We round each value with their respective precision to make sure we don't have 15 decimals. opw-6039016 Forward-Port-Of: odoo/odoo#257603 Forward-Port-Of: odoo/odoo#256038
The shopping cart quantity control now displays with consistent borders, even when products have very large prices. This improves the cart’s visual presentation and avoids a stretched or broken-looking checkout experience.
Original PR description
Steps to produce: --- - Install the `E-commerce` module. - Configure a product with a very large price. - Open the product on the website, add it to the cart, and navigate to the cart. Issue: --- -…
Steps to produce: --- - Install the `E-commerce` module. - Configure a product with a very large price. - Open the product on the website, add it to the cart, and navigate to the cart. Issue: --- - The quantity input group appears visually stretched, and the border rendering is inconsistent. Root Cause: --- - After upgrading from Bootstrap 5.1 to 5.3, border utility behavior changed. Classes like `border-end-0` no longer apply unless a base border class is also present. Solution: --- - Explicitly add the `border` class alongside `border-end-0` on the affected elements to restore the intended border styling. Before: --- <img width="822" height="185" alt="image" src="https://github.com/user-attachments/assets/6478083e-f5c1-4374-9c9a-979254eaee3d" /> After: --- <img width="828" height="188" alt="image" src="https://github.com/user-attachments/assets/5a1cb138-c9a5-4508-ad34-64d988904407" /> opw-6075996 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256797
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 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 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 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 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 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