Monday, January 5, 2026
22 changes · 19.0
Resolved issues and error corrections
This update resolves a technical issue that prevented invoices reconciled with multiple bank transactions from displaying correctly in reports. The fix ensures the system handles complex reconciliation scenarios accurately, avoiding a common error that disrupted reporting. This improves the reliability of financial data presented to users.
Original PR description
### Issue description: The `_compute_full_amount_switch_html` method assumes that `reconciled_lines_excluding_exchange_diff_ids` contains at most one line (which is true only for move lines of bank statement lines). However, if an invoice is reconciled with multiple bank transactions, when accessing the `full_amount_switch_html` for any move line in the invoice, it triggers `ValueError: Expected singleton`, as the compute method uses the reconciled_lines as if they are a single line. ### Steps to reproduce: 1. Create an invoice 2. Reconcile the invoice with multiple bank transactions. 3. Perform a read on the `full_amount_switch_html` field on the invoice line from the invoice (using the web tool, or add the field to any view). 4. You will get `ValueError: Expected singleton: account.move(XX, XX)` opw-5224135 Forward-Port-Of: odoo/enterprise#102048
This update fixes inaccuracies in the Thai tax report test cases. The changes align the test data with the latest Thai tax regulations, ensuring accurate reporting and compliance. This improves the reliability of the Thai localization for financial reporting.
Original PR description
Replaced outdated tax references in test cases with updated tax references to align with the recent changes in the Thai localization. Task-5395076
This update resolves a test failure related to the course review tour within the website. The issue stemmed from a test requiring a user account (admin) with a properly configured email address, which was missing in newer versions of Odoo. The fix ensures the test runs correctly by adding a default email to the user account.
Original PR description
We fix the tour test_course_reviews_elearning_admin that was failing when running it without demo data because user admin was posting a message on a channel without an email set on its partner. The same test works in version 18.0 and not in 18.2 because since 18.1, user admin no longer have an email by default (unless the demo data are installed, see odoo/odoo#185809). To fix the test, we just set an email on the partner of user admin before posting the message. Task-5418242 Forward-Port-Of: odoo/odoo#240070
This update fixes an issue where items within Kanban card dropdown menus weren't easily navigable or highlighted on hover. The team added a styling class to these items, ensuring they function correctly and provide a better user experience when selecting options from Kanban cards. This improves usability and efficiency.
Original PR description
Issue:
Dropdown item-ish (such as `<a class="dropdown-item">` and ViewButton) inside kanban cards dropdown do not have the proper hover styling and are not navigable.
Steps to reproduce:
- Go to project -> open any card dropdown menu ("...") -> Items are not navigable
- Go to CRM -> open any card dropdown menu ("...") -> Items are not highlighted on hover
Fix:
This commit adds the "o-navigable" class to dropdown items and view buttons
which are inside a kanban card's dropdown menu, this makes them navigable
and adds proper hover and focus styling.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#240090This change fixes a JavaScript error that occurred when installing the Quality IoT module and enabling debug mode. The issue stemmed from a dependency conflict related to the QualityCheck component, which was incorrectly located. This update ensures proper module loading and resolves the error, allowing for seamless Quality IoT functionality.
Original PR description
### Issue: The QualityCheck component is defined in the `mrp_workorder` module:…
### Issue: The QualityCheck component is defined in the `mrp_workorder` module: https://github.com/odoo/enterprise/blob/7c64908258d5a0fb9adecd6dd2760e255e46314b/mrp_workorder/static/src/mrp_display/mrp_record_line/quality_check.js#L7 which is not a dependency (even indirectly) of the `quality_iot` module. Hence, if you install the `quality_iot` and enable debug mode, you will raise a JS [error](https://github.com/odoo/odoo/blob/a1583d0564552007a3d5f12d967c2c0036e05e44/addons/web/static/src/module_loader.js#L164-L169) because of missing dependencies: > The following modules are needed by other modules but have not been defined, they may not be present in the correct asset bundle. This happens because commit a13e38006d3cba6cab4565de2b014d294d2c0af3 added a patch of the QualityCheck component in the `quality_iot` https://github.com/odoo/enterprise/blob/eda93203ec8da207768357ae91132a49881a2978/quality_iot/static/src/mrp_display/quality_check.js#L4 https://github.com/odoo/enterprise/blob/eda93203ec8da207768357ae91132a49881a2978/quality_iot/static/src/mrp_display/quality_check.js#L17 opw-5353986
This update resolves a sporadic test failure related to how partner suggestions are sorted, specifically when considering recent chats. The fix ensures the test accurately reflects the system's data by waiting for the necessary updates to be processed before verification, preventing incorrect sorting results.
Original PR description
Before this commit, the test "Sort partner suggestions by recent chats" fails non-deterministically due to a race condition. This failure occurs because the test relies on the `last_interest_dt` timestamp being updated after sending a message to "User 2". Although the message post triggers a bus notification to update the store, the UI displays the message optimistically. As a result, the assertion for the message's existence occasionally passes before the bus notification was processed, leaving the sorting logic to run with stale data (where "User 2" was still ranked behind "User 3"). This commit fixes the issue by waiting for the sidebar to reorder "User 2" to the top. Since the sidebar ordering relies on the same server data (last_interest_dt) as the suggestion sorting, this ensures the store has processed the bus event before the test verifies the suggestion order. runbot-237553 Forward-Port-Of: odoo/odoo#241619
This update resolves a minor visual issue that occasionally appeared when using the cookies bar with a Bootstrap modal open. The fix prevents a Bootstrap class from being added and removed, which was causing a brief UI disruption. This ensures a smoother user experience for all visitors.
Original PR description
When pressing `Escape` with a Bootstrap modal open, even if the config key `keyboard` is set to `false` (preventing escape from closing the modal), Bootstrap sets a class `modal-static` on the modal element and removes it shortly after. This causes a UI glitch in the case of the cookies bar. Stopping the event propagation prevents it from happening. task-5421993 Forward-Port-Of: odoo/odoo#240269
This update resolves a technical issue in the website editor where applying font colors created unnecessary HTML tags for blank text, causing problems with snippet structure. The fix ensures font tags are only applied to visible text, improving the editor's performance and stability.
Original PR description
#### Description of the issue this PR addresses: - When applying font color, <font> tags were created for text nodes that contained only invisible content (whitespace or newlines). - These whitespace-only text nodes are not visually rendered, but wrapping them in <font> tags caused unnecessary nodes to be inserted and broke the DOM structure in snippets. #### Desired behavior after PR is merged: - Apply font tags only to text nodes that contain visible content. - Ignore whitespace-only (invisible) text nodes when wrapping content with <font> elements. #### Steps to Reproduce: - Open the website editor. - Insert a content snippet (e.g., s_numbers_framed, s_comparisons). - Select multiple blocks. - Apply font color from toolbar. => <font> tags are created for whitespace-only text nodes too, breaking the snippet structure. task-5454805 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a display issue where users were receiving confusing error messages when accessing OAuth features. Specifically, AccessDenied errors were showing a lengthy, detailed message instead of the standard 'Access Denied'. This change ensures a cleaner and more straightforward user experience for OAuth authentication.
Original PR description
Description of the issue/feature this PR addresses: This PR should fix the order of error codes in the oauth controller. Current behavior before PR: Currently the user gets redirected to a different error. For instance: AccessDenied error will redirect the user to "You do not have access to this database or your invitation has expired. Please ask for an invitation and be sure to follow the link in your invitation email." Desired behavior after PR is merged: AccessDenied error should show "Access Denied" --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the Odoo import action by allowing users to specify the target model through parameters. This retrocompatibility change, previously partially reverted, ensures existing import configurations continue to function correctly. It primarily impacts the base_import module.
Original PR description
This commit follows up the commit [1] and allows adding an `model` to the parameters of the `import` action, for retrocompatibility purposes. Note that, this retrocompatibility existed before the commit [2], which was partially reverted by the commit [1]. [1] https://github.com/odoo/odoo/commit/7e351d87a5b6faad5bef447bdb077b7637f9c936 [2] https://github.com/odoo/odoo/commit/033d6afe36426067a7bada8b812898169d7968de
This update removes a previously implemented fix for the account import action. A similar correction has already been addressed in a related extended class, making this reversion redundant. This ensures consistency and avoids unnecessary code changes.
Original PR description
Since [1] the fix on account_import_action is not needed anymore, a similar fix is done in the extended class. [1] https://github.com/odoo/odoo/commit/7e351d87a5b6faad5bef447bdb077b7637f9c936
This update fixes a recurring issue in the MRP planning test that was causing it to fail intermittently. The test has been redesigned to create the planning leave manually, making it more reliable and consistent. This ensures the planning process is accurately tested and validated.
Original PR description
Before this commit: Introduced in https://github.com/odoo/odoo/commit/d06dcfbca96273b540c87252b9188603879ac1b4, the test was failing on runbot in some cases. The issue is deterministic, but requires a specific set of modules installed to fail. After this commit: Use a more robust approach in the test, by creating the leave manually instead of computing the number of operations needed. runbot-234638 Forward-Port-Of: odoo/odoo#241350 Forward-Port-Of: odoo/odoo#239717
This update resolves an issue where Studio sometimes loaded incorrect POS views due to view sequence priority. Now, developers can adjust how default views are selected, ensuring the correct views are loaded regardless of sequence. This improves Studio's reliability and prevents unexpected view behavior.
Original PR description
Task: [#5191154](https://www.odoo.com/odoo/project/1737/tasks/5191154) --- When activating some views with Studio, we could end up loading a POS view because it has a lower sequence. As a result, Studio selects this view. However, these POS views may not be loaded in the backend bundle (`web.assets_backend`), and thus are missing at runtime. Example: "Cannot find key 'pos_kanban' in the 'views' registry". This commit creates a hook to get the domain used to fetch default views (`_get_default_view_domain()`). This way, modules can override the domain of `_get_default_view_domain()` method in order to exclude some views from being selected as default ones no matter the sequence.
This update fixes a technical error that prevented users from accessing holiday attests in debug mode. The issue stemmed from a missing data field in the system's configuration, which caused an error when the system was testing its functionality. This change ensures the holiday attest feature works correctly for all users.
Original PR description
Issue: in debug mode, the function `validateProps` is called on the component so it raises an error because `payslipsYear` is in the props but not defined in the schema Steps to reproduce (developer mode): - fill in the departure notice period and payslip wizard - try to open departure: holiday attests from the cog menu - you get a traceback because of unknown key `payslipsYear` Fix: added `payslipsYear` to the props definition task-id: 5398621
This update strengthens the security process for the HR Expense Stripe module by adding a crucial neutralization step. This ensures that database copies created for support investigations are completely isolated from the live production database, preventing any potential disruptions or data breaches. It's a proactive measure to maintain data security and stability.
Original PR description
This commit adds a complement to the neutralization necessary for the hr_expense_stripe module. The main neutralization is handled by the certificates module, but this covers a rare edge case (creation of new accounts in production mode for companies that do not already have an account), and makes the overall neutralization more bullet proof. ---------------------------------------------------------------------- The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is mainly useful to allow safe support investigation on database duplicates.
This update resolves a problem where Studio was incorrectly loading POS views as default, leading to errors. The change prevents these POS views from being selected as defaults, ensuring the backend operates with the intended views and improving stability. This ensures consistent and reliable operation.
Original PR description
..., appointment, l10n_ke_edi_oscu_pos Task: [#5191154](https://www.odoo.com/odoo/project/1737/tasks/5191154) --- When activating some views with Studio, we could end up loading a POS view because it has a lower sequence. As a result, Studio selects this view. However, these POS views may not be loaded in the backend bundle (`web.assets_backend`), and thus are missing at runtime. Example: "Cannot find key 'pos_kanban' in the 'views' registry". This commit edit the domain of `_get_default_view_domain()` method in order to exclude these POS views from being selected as default ones.
This update adds a new test case to the l10n_be_hr_payroll module, ensuring accurate work entry generation. This test validates the fix implemented in a previous pull request, strengthening the reliability of the payroll calculations. It's a routine quality assurance step to maintain the integrity of the HR and payroll processes.
Original PR description
This commit adds a test for this fix PR: https://github.com/odoo/odoo/pull/239658 task-5413594
This update adds a test to verify the correct generation of work entries within the HR module. This ensures the system functions as expected and reduces the risk of errors in generating work entries. The test confirms the fix implemented in a previous pull request.
Original PR description
This commit adds a test for this fix PR: https://github.com/odoo/odoo/pull/239855 task-5413594 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
This update resolves an issue where Japanese translations were sometimes being incorrectly formatted (line wrapping) within the Equity module. This fix prevents corrupted translation files and ensures accurate Japanese text display in the Odoo Enterprise system.
Original PR description
The current version of Weblate still has issues sometimes with line wrapping in CJK scripts, causing corrupt PO files. This commit fixes the wrapping in the Japanese translation file for the equity module.
This update resolves a reporting issue that appeared when selecting certain cost measures in the Planning / Attendance Analysis report. The fix removes a misconfigured widget, addressing a conflict between the data type and the widget used, ensuring accurate reporting calculations. This change improves report reliability.
Original PR description
### Steps to reproduce: - Navigate to Planning > Reporting > Planning / Attendance Analysis - From measure select Attendance Cost or Cost Difference or Planned Cost - A traceback will pop up ### Cause: We are using widget monetary for the three fields in the view while their field type is float and there is no currency field defined in the model ### Fix: Remove the monetary widget from the view In master we will do something like this commit https://github.com/odoo/enterprise/pull/99059/commits/17f05bef0dad3e9645b6e0ed8df14d3308440812 opw-5438221
This change corrects a display inconsistency in loyalty rewards by removing a technical field that was being incorrectly populated. This field was initially added as a workaround for a previous accounting issue and has now been removed to simplify the system and prevent future errors. The fix ensures consistent discount descriptions across promotions.
Original PR description
### Issue: Due to this issue, users can change the technical field `discount product` which cause inconsistency in discount description. #### To reproduce: 1- Create a promotion called `AAA`: -…
### Issue: Due to this issue, users can change the technical field `discount product` which cause inconsistency in discount description. #### To reproduce: 1- Create a promotion called `AAA`: - Rules: If minimum 50.0 spent grant 1 point per order - Rewards: 10% discount per order in exchange of 1 point 2- Using debug mode, in promotion's reward view, change the `Description on order` to `AAA 10%`. Save the promotion and you can see the `Discount product`'s name is set to the same description. 3- Create another promotion called `BBB`: - Rules: If minimum 50.0 spent grant 1 point per order - Rewards: 10% discount per order in exchange of 1000 points. 4- In promotion reward's view change the `Discount product` to `AAA 10%` which is promotion `AAA`'s discount product. 5- Change the `Description on order` to `BBB 10%` and save. 6- You can see the name of `Discount product` is changed as well. 7- In promotion `AAA` and you can see the description and the name of `Discount product` mismatch. 8- Navigate to shop, and add a product to cart with a price of more than 50. 9. You can see after applying promotion `AAA` the description from promotion `BBB` is shown. ### Cause: The technical field `Discount product` is never meant to be changed, and this field is introduced for reporting purposes and showing the discount applied in cart. However, this field is added to view in #132857. This is done as a hack to find the `Discount product` created for the promotion, as a workaround for an accounting issue due to adding account to `Discount product`, and originally `discount_line_product_id` was not supposed to be shown or changed through form. After discussion with PO, we decided this field should be removed from the view. Also removing this field will not undo the main fix of #132857, and that workaround was introduced only to find the `Discount product` for that specific client's use case. However, in stable, it is kept for customization compatibility. It's set invisible in order to prevent the issue. opw-5229633 Forward-Port-Of: odoo/odoo#240684
This update fixes an issue where the chat hub and its message previews appeared too light in dark theme, impacting readability. The change reverts to a darker background style, enhancing accessibility and the visibility of key elements like the close button.
Original PR description
In dark theme, the chat bubble message previews have dark background for improved readability of text. The chat hub hidden menu was intended to use same color scheme, but this was mistakenly removed from style improvements to discuss. The default style of popover is too light in dark theme. This commit reverts to style before 19.0, using darker background. This improves accessibility of item selection and the "x" button. Before / After <img width="278" height="405" alt="Screenshot 2026-01-05 at 18 05 18" src="https://github.com/user-attachments/assets/d764adbf-5378-4d59-870d-baf159920898" /> <img width="288" height="410" alt="Screenshot 2026-01-05 at 18 31 03" src="https://github.com/user-attachments/assets/142605cf-fab6-499d-95fa-71fcbb7ec36a" />