Daily updates from Odoo
Monday, January 5, 2026
34 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 an issue where Australian BAS W2 reports were displaying incorrect negative signs due to a change in how signs were handled in Odoo 19.0. The fix ensures the correct sign is applied to W2 reports, aligning with report aggregation logic and preventing double sign inversions.
Original PR description
Since 19.0, sign handling was moved out of tax tags. In community commit 9f55bc242e71e96260edc425d227409775b6b096, the sign was removed from tax tags, but for BAS line W2 a negative sign was mistakenly kept at the tag level, while the report aggregation already applies a negative sign. This resulted in a double sign inversion. This commit fixes W2 by applying the correct sign. enterprise pr -https://github.com/odoo/enterprise/pull/102114 task- [5416350](https://www.odoo.com/odoo/project.task/5416350)
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 resolves an issue where files attached to activity notes within the Chatter interface were not being displayed. The change adjusts how HTML content is rendered within activity notes to ensure attachments are correctly shown. This improves the user experience when sharing files and collaborating on activities.
Original PR description
Currently, when a user creates an activity with a note containing a file using `/file`, the attached file is not displayed in the chatter. **Steps to produce:** * Install `crm` with demo data * crm >…
Currently, when a user creates an activity with a note containing a file using `/file`, the attached file is not displayed in the chatter. **Steps to produce:** * Install `crm` with demo data * crm > open any lead > Activity > use `/file` to attach a file > Save **Observed Behavior:** The user cannot see attached files in the chatter. **Root cause:** * This behavior occurs because after commit [1], the `EmbeddedFilePlugin` started being used for all HTML fields with embedded components enabled, and since commit [2], all HTML fields have `embedded_component` set to true by default. * As a result, file attachments may not display correctly, since embedded components do not render when HTML content is shown outside the editor. **Solution:** Disable the embedded component option for the note field in the activity to display the full HTML and make the attachment visible, instead of rendering-related data. **Before:** <img width="640" height="150" alt="image" src="https://github.com/user-attachments/assets/edabbe9f-eedf-4ef1-8f0d-749e0145ce8f" /> **After:** <img width="651" height="148" alt="image" src="https://github.com/user-attachments/assets/8a3d1d3d-a5f8-4726-83be-6134e96db689" /> [1]: https://github.com/odoo/odoo/pull/216572/commits/86c7176833fc36b9ca7d2989d31587c353bd5800 [2]: https://github.com/odoo/odoo/commit/a44b05fd06d8c157b5edacbd6a7061197eb4ee5f opw-5426126,5361933
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 fixes an issue where refund transactions incorrectly displayed the customer as the author instead of the user who initiated the refund. The change ensures the logged-in user is always identified as the author for refund, capture, and void transactions, improving data accuracy and reporting. This resolves a discrepancy in message attribution.
Original PR description
Currently, the customer, who did not perform the operation, is set as the author of the refund, capture, and void transaction messages. **Steps to reproduce:** - Install the `sale_management` module…
Currently, the customer, who did not perform the operation, is set as the author of the refund, capture, and void transaction messages. **Steps to reproduce:** - Install the `sale_management` module and enable the `demo` payment provider. - Create a new quotation and from the `gear` icon, select `Mark Quotation as Sent`. - From the `gear` icon, choose `Generate a Payment Link`, and copy the link. - Open the link in an incognito window, and complete the payment. - Return to the original tab and open the payment transaction from the chatter. - Click `Refund` > `Refund` and observe the `author` of the messages in the chatter. **Observation:** The refund messages entry shows the customer as the author instead of the logged-in user who executed the refund. **Root Cause:** At [1] and [2], when the logged-in user is not a superuser, the code assigns the customer (`self.partner_id`) as the author, even during `refund`, `capture`, and `void transactions`, resulting in an incorrect message author. **Fix:** This commit ensures that during refund, capture, and void transactions, the message author is set to the logged-in user instead of the customer. [1]: https://github.com/odoo/odoo/blob/bbf3bd7b0e1d3e015350f9c959fad056384e2318/addons/account_payment/models/payment_transaction.py#L223 [2]: https://github.com/odoo/odoo/blob/5cf325dfff1ffbc1c4b4d0bcfc44ac9f55ea7c51/addons/sale/models/payment_transaction.py#L110 **Before:** <img width="1910" height="624" alt="5379376_before" src="https://github.com/user-attachments/assets/decdd620-d741-488e-9dec-e5c8c9bafc48" /> **After:** <img width="1917" height="622" alt="5379376_after" src="https://github.com/user-attachments/assets/5f38f3c3-fd2c-489e-afc9-d7a356fde23a" /> opw-5379376 Forward-Port-Of: odoo/odoo#241923 Forward-Port-Of: odoo/odoo#239224
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 resolves an issue where loyalty programs weren't correctly applying pricelist conditions in the Point of Sale (POS) system. The fix ensures the POS configuration properly loads the pricelist ID, allowing loyalty programs to function as intended. This improves the accuracy of loyalty rewards and discounts.
Original PR description
Task: [#4974070](https://www.odoo.com/odoo/my-tasks/4974070) Runbot build error: [#229672](https://runbot.odoo.com/odoo/runbot.build.error/229672) --- ## Error FAILED: [12/46] Tour…
Task: [#4974070](https://www.odoo.com/odoo/my-tasks/4974070)
Runbot build error: [#229672](https://runbot.odoo.com/odoo/runbot.build.error/229672)
---
## Error
FAILED: [12/46] Tour test_refund_does_not_decrease_points → Step selection popup has '$ 1 per point on your order' (trigger: .selection-item:contains("$ 1 per point on your order")).
## Qualifiers
{
"module": "pos_loyalty",
"test_path": "/pos_loyalty/tests/test_frontend.py",
"tour_name": "test_refund_does_not_decrease_points",
"tour_step": ".selection-item:contains(\"$ 1 per point on your order\")",
"test_class": "TestUi",
"test_method": "test_refund_does_not_decrease_points",
"test_module": "pos_loyalty"
}
## Fix
In some cases, the POS config's `pricelist_id` was not available in the frontend, causing loyalty program conditions to be skipped when checking for a matching pricelist.
By explicitly setting `use_pricelist` to True on the POS config, we ensure that `config.pricelist_id` is properly loaded and available at runtime, allowing loyalty programs with pricelist conditions to behave as expected.
Forward-Port-Of: odoo/odoo#221921This update corrects a problem where delivery pickings remained 'Waiting Another Operation' after cancelling a manufacturing order (MTO) in multi-step production processes. The fix reuses existing logic to properly unlink related stock moves, ensuring availability is correctly updated and preventing delays in order fulfillment.
Original PR description
Issue ----- After cancelling a MO created by a SO (MTO), user cannot reserve quantity from stock for the delivery picking. This happens for both MO & Reception as long as they are multi-step. Steps…
Issue ----- After cancelling a MO created by a SO (MTO), user cannot reserve quantity from stock for the delivery picking. This happens for both MO & Reception as long as they are multi-step. Steps to reproduce ----- - Enable multi step routes - Set WH to 3-step manufacturing - Create a product - empty bom - MTO & manufacturing routes - 5 in stock - Create a SO for the product - Cancel the linked MO - Open the delivery picking - Click "Check Availability" > The product is not getting reserved from stock > The delivery picking is still "Waiting Another Operation" Cause ----- The problem happens in `action_cancel` https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1995 In 1-step case, `move.propagate_cancel` is false so we go through https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2017-L2021 where `move_dest_ids` is the move of the delivery picking. This makes it so that, when we go to the delivery picking and do `action_assign` we go through the first condition while skipping the second of https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1929-L1931 instead of going into the `else` part https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L1947-L1949 In 3-step, when we `action_cancel`, `move.propagate_cancel` so we go through https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2009-L2014 which lacks the swap to MTS and unlink `move_dest_id` logic. Solution ----- We can re-use the logic of unlink and MTS swap to `move_dest_ids` that were not cancelled by https://github.com/odoo/odoo/blob/0eb44aec8867e292f8258df02045efe7fbd3303f/addons/stock/models/stock_move.py#L2012 This also takes care of the problem of the status of the delivery picking being `waiting` instead of `confirmed` because it gets recomputed https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L754 and since it was set to MTS, it goes into the `else`part of https://github.com/odoo/odoo/blob/3f7d79731fd5e5a751f7f1aeae63379c6211de5c/addons/stock/models/stock_move.py#L2202-L2216 ----- Ticket: opw-5124380 Forward-Port-Of: odoo/odoo#241579 Forward-Port-Of: odoo/odoo#237890
This update addresses a previous issue where planning managers were blocked if employee work emails were missing. Now, a notification is displayed listing employees with incomplete email information, allowing managers to easily resolve the issue by contacting HR or the employees directly. This streamlines the planning process and prevents workflow interruptions.
Original PR description
Before this commit, when the planning manager wants to send the planning and for some employees the work email is missing, the user is blocked on the wizard to fill the work email on those employees if he does not edit access to employee model. This commit makes sure the wizard to fill in the missing work email is not displayed if the user cannot edit the information of the employees. It also displays a notification listing the employees for which the work email is missing. By doing that, the user can easily remove those employees to continue his flow or ask to HR user or the employees concerned to complete the missing information. task-5090163 Forward-Port-Of: odoo/enterprise#102458 Forward-Port-Of: odoo/enterprise#96111
This update allows users to export Intrastat reports in XML format directly from the system, addressing previous limitations that prevented successful report submissions. Previously, users needed to create a separate return to export, now they can directly download the XML file containing both arrivals and dispatches, improving reporting efficiency and compliance.
Original PR description
**Behavior:** Currently Intrastat reports are exported from the account.return view, and will be exported specifically in their extended mode and will contain both arrivals and dispatches. This…
**Behavior:** Currently Intrastat reports are exported from the account.return view, and will be exported specifically in their extended mode and will contain both arrivals and dispatches. This causes issues for some users that want more specific formats like standard over extended, only arrivals/dispatches or both, etc... And this can cause them to not be able to submit their reports. The solution is to currently reenable the user to export their report to XML from a cog menu in the Intrastat Report view. While still leaving the current flow through account.return possible, until a better solution is thought of. **Steps to reproduce:** - Connect to a company under Belgian Localisation. - Create a product and, under the Accounting tab, specify a Commodity code (eg Live asses) and Country of Origin (Belgium) - Create an Invoice containing the product to a Client in another EU Country (eg Luxembourg) and under the 'Other Info' tab, specify Intrastat Countrt (Belgium) - You can choose to leave out Intrastat Transport Mode and Incoterm, this will make the resulting XML have some missing informations - Create a Bill with the product with the same settings - If you go to Intrastat Report, after changing the 'Report' filter to Intrastat (Goods) you will now be able to see an arrival and a dispatch. The extended mode filter is enabled by default, if you didnt fill Intrastat Transport Mode and Incoterm, you will see these missing. - From this view there is currently no way to export the XML, to do that click the Returns button (select an Opening Date for accounting if needed), click on 'New' and specify Intrastat in the Return Type and a time window containing your Invoice and Bill. - Then you will see an Intrastat Report show up and after selecting Review, then Submit, you will be able to download the XML. which will contain dispatches and arrivals and will be in Extended Mode. Which, if missing Transport/Incoterm, will fail when submitted to OneGate opw-5347238 Forward-Port-Of: odoo/enterprise#102531
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 resolves an issue where employees were incorrectly receiving duplicate deductions on their CFDI payslips. The change removes a redundant CFDI concept from the payroll rules, ensuring accurate calculation of employee withholdings and compliance with Mexican tax regulations. This improves payroll accuracy and avoids potential financial discrepancies.
Original PR description
Avoid duplicate employee deductions on the CFDI payslip by eliminating the CFDI concept that is currently generating a second retention already accounted for in the “IMSS Total (Employee)” payroll rule. target: 19.0 task-5436851
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 corrects a bug that caused subscription order processing to repeat unnecessarily, leading to potential delays and inefficiencies. The fix ensures that order progress is accurately tracked, preventing redundant reprocessing and improving order execution times. This resolves a technical issue impacting subscription order management.
Original PR description
Before this commit, when the continue instruction was called before the _subscription_commit_cursor call, the order would be reprocessed again and and again. Commit with a progress=1 was commited but if the continue was called before, progress with 0 was never called.
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 HR Officers without payroll access could inadvertently access sensitive salary adjustment data. The changes restrict access to relevant data models and views, ensuring that HR Officers only see information aligned with their assigned roles. This improves data security and prevents unauthorized access to payroll-related information.
Original PR description
* = hr_contract_salary Steps to reproduce: - Install 'hr', 'hr_payroll', 'hr_work_entry', and/or 'hr_contract_salary'. - Log in as an HR Officer without payroll access. - On an employee form: -…
* = hr_contract_salary
Steps to reproduce:
- Install 'hr', 'hr_payroll', 'hr_work_entry', and/or 'hr_contract_salary'.
- Log in as an HR Officer without payroll access.
- On an employee form:
- Switch to the 'Salary Adjustments' tab.
- Edit/save a record (tracking reads 'salary_offer_ids').
- Click the 'Work Entries', 'History', or 'Offers' smart buttons.
Cause:
- HR Officers could still reach payroll-only data:
- 'salary_offer_ids' (one2many to 'hr.contract.salary.offer') triggered
tracking reads on a model restricted to HR Managers/Recuriters.
- The 'Salary Adjustments' tab and offer buttons remained visible even when
the user lacked payroll rights.
- The payroll overrides changed 'contract_date_start' to
'hr_payroll.group_hr_payroll_user', so the 'Work Entries'/'History' buttons
show AccessErrors while the buttons stayed visible.
Fix:
- Restricted 'salary_offer_ids' to 'hr.group_hr_manager'.
- Made the 'Salary Adjustments' tab visible only to
'hr_payroll.group_hr_payroll_user' and existing 'Offers' buttons stay for
HR Managers.
- Added dedicated overrides giving 'Work Entries' and 'History' buttons the
'hr_payroll.group_hr_payroll_user' group when payroll is installed.
Task - 5188997This update restricts access to certain features on employee forms based on user roles. Specifically, HR Officers can no longer create users or access sensitive payroll-related data, preventing errors and ensuring data security. This change aligns with access control best practices for HR data management.
Original PR description
* = hr_work_entry
Steps to reproduce:
- Install 'hr' and 'hr_work_entry'.
- Log in as an HR Officer.
- Open an employee form and click:
- 'Create User'
- 'Work Entries' smart button
- 'History' smart button
Cause:
- 'Create User' was visible to HR Officers, but only users with Settings rights
('base.group_erp_manager') can create 'res.users', causing an AccessError.
- The 'Work Entries' and 'History buttons were visible to HR Officers, but
fields as 'contract_date_start' which only HR Managers can read when
payroll is not installed.
Fix:
- Restricted 'Create User' to 'base.group_erp_manager'.
- Limited the 'History' smart button to 'hr.group_hr_manager'.
- Limited the 'Work Entries' smart button to 'hr.group_hr_manager'.
Task - 5188997This 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 significantly speeds up invoice processing by optimizing how the system determines parent IDs for accounting lines. Previously, the system performed numerous individual updates, leading to performance issues and potential memory errors. Now, the system efficiently updates multiple related lines at once, resulting in a 4-second improvement on invoices with 2000 lines.
Original PR description
Before this commit, computing the `parent_id` of `account.move.line` records, involved looping over the `move_lines` grouped by their `move_id` sorted by the `sequence`. The updates on the move_lines…
Before this commit, computing the `parent_id` of `account.move.line` records, involved looping over the `move_lines` grouped by their `move_id` sorted by the `sequence`. The updates on the move_lines are done per line and this involves an individual write operation on each one of them. The cardinality of the set of possible values of the new `parent_id` may involve a lot of values in cases where a big number of lines have a display type of either 'line_section' or 'line_subsection', in most of the cases it is not the case, so a possible performance improvement in the method is to upper bound the number of write operations by the cardinality of the set of possible values instead of a single write operation on each single `move_line`. This can be done by mapping the values to a record set of move lines and updating the move_lines that share the same value. The benchmark below is done on an invoice that contained **2000** `move.line` records. An individual **write** operation is being done on each one of them. | Scenario | Time (seconds) | |-----------|----------------| | **Before** | **Memory Error** | | **After** | **4s** | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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" />