Daily updates from Odoo
Monday, May 4, 2026
18 changes · master
Resolved issues and error corrections
This update resolves an issue where unreconciling batch payments would unexpectedly revert vendor bills to draft status due to approval checks triggered by third-party modules. Because the repost is internal and approved initially, it can bypass these checks, preventing user disruption. This ensures users can correctly reconcile payments without manual intervention.
Original PR description
When unreconciling a batch payment from a bank statement line, delete_reconciled_line() resets the linked invoice to draft to recompute its amount_residual, then re-posts it. If a third-party module…
When unreconciling a batch payment from a bank statement line, delete_reconciled_line() resets the linked invoice to draft to recompute its amount_residual, then re-posts it. If a third-party module (e.g. Studio Approvals) silently rejects action_post for the current user, the invoice stays in draft and the user has to redo the work manually. This internal repost is not a business action, the move was already approved when initially posted, so it can run as sudo to bypass approval checks. Steps to reproduce: 1. Add a Studio Approval rule on account.move.action_post with an approver other than the current user 2. As a user without that approval right, post a vendor bill and register a payment 3. Add the payment to a batch payment 4. Reconcile a bank statement line with the batch payment 5. With the user without approval rights, try to unreconcile the bank statement line (delete_reconciled_line) - Expected: the bill stays Posted. - Actual (before fix): the bill silently rolls back to Draft because action_post is rejected by the approval hook. opw-6121448 Forward-Port-Of: odoo/enterprise#115579 Forward-Port-Of: odoo/enterprise#115241
This update enhances the accuracy of write-off reconciliation within the accounting system. It now filters reconciliation models to only display those that are manually created or directly linked to the statement lines' journal, preventing errors caused by unrelated journal associations. This ensures reconciliation reports are more reliable and reflect true financial transactions.
Original PR description
In the account reconciliation wizard: - Only show manually created reconciliation models. - Only display reconciliation models that are not linked to any journal or are specifically linked to the journal of the statement lines. task-6059342 Forward-Port-Of: odoo/enterprise#111644
This pull request addresses several minor bugs in the Documents module, enhancing the user experience. Specifically, it fixes issues with scrolling after file uploads, the placement of icons in thumbnails, and display problems with the 'You' badge under certain conditions. These changes improve stability and visual consistency.
Original PR description
[FIX] documents: scroll to uploaded record How to reproduce: - install documents - open the "All" folder and ensure there is enough folder to not see any file - open the detail panel - drag&drop file…
[FIX] documents: scroll to uploaded record How to reproduce: - install documents - open the "All" folder and ensure there is enough folder to not see any file - open the detail panel - drag&drop file in that folder The file is uploaded, but you have to scroll to it to see it. Moreover, despite the file being selected, it's not shown the detail panel. We solve the problem here by waiting the record to be rendered before scrolling to it and notify the detail panel. [FIX] documents: fix icon position in thumbnail How to reproduce: - install documents - open the chatter of a document - click on log a note, and upload a file The "trash" icon/button in the thumbnail is weirdly positioned (neither centered, neither on a border). We fix here the position the icon/button. [FIX] documents: fix "you" badge layout How to reproduce: - install documents - change the name of Mitchell Admin to a very long name - open the share panel owned by Mitchell Admin The "You" badge is not correctly displayed (the badge appears as "Y..." instead of "You" and the shape is not correct). We fix here the layout of the badge in such configuration. Task-5152517 Forward-Port-Of: odoo/enterprise#115621 Forward-Port-Of: odoo/enterprise#107686
This pull request restores a previously removed CSS style that was essential for the functionality of the spreadsheet dashboard edition. The change was made to correct a visual issue impacting the dashboard's appearance and usability. This ensures the dashboard displays correctly for all users.
This update resolves a crash that prevented users from adding videos to product pages via the website builder's 'Extra Media' feature. The issue stemmed from a mismatch in how the system handled video URLs, causing a technical error. The fix ensures videos are now correctly saved as extra media, improving the website builder's functionality.
Original PR description
**Problem:** Adding a video (or image) via Extra Media on a product page in the website builder crashes with: "TypeError: loadPromiseResolveFunction is not a function" **Steps to reproduce:** 1.…
**Problem:** Adding a video (or image) via Extra Media on a product page in the website builder crashes with: "TypeError: loadPromiseResolveFunction is not a function" **Steps to reproduce:** 1. Install ai_website_sale 2. Go to a product page and enter edit mode 3. In the right panel → Images → click "Add More" (Extra Media) 4. Switch to Videos tab → paste a YouTube URL → click Add 5. Observe the crash **Current behavior:** A traceback dialog appears: "loadPromiseResolveFunction is not a function" **Expected behavior:** The video is saved as extra media on the product. **Cause of the issue:** The `ai_website_sale` patch for `ProductAddExtraImageAction.getMediaDialogProps` destructures the argument with key `loadResolveFunction` (renamed to `loadPromiseResolveFunction` locally), but the caller in `load()` passes `loadPromiseResolveFunction` as the key. The key mismatch means the local variable is always `undefined`, and the `save` closure in the parent's `getMediaDialogProps` closes over `undefined` instead of the Promise's `resolve` function. Calling `undefined()` throws the TypeError. **Fix:** Aligning the parameter key with the parent API ensures the Promise's `resolve` function is correctly captured in the `save` closure. opw-6107097
This update resolves an issue where time off allocations couldn't be deleted if a payslip for the relevant period had already been validated. The fix adjusts the system's logic to allow deletion of time off created *after* the payslip has been processed, streamlining time off management. This prevents unnecessary HR intervention.
Original PR description
## Issue When creating a time off for a date that is already covered by a confirmed payslip, that time off cannot be deleted. ## Steps to reproduce 1. Install *Time Off in Payslips*…
## Issue
When creating a time off for a date that is already covered by a confirmed payslip, that time off
cannot be deleted.
## Steps to reproduce
1. Install *Time Off in Payslips* (`hr_payroll_holidays`)
2. Create or use an employee E with a running contract, e.g.:
- Contract: Jan 1 to Indefinite
- Wage: $1000/month
3. In Payroll > Payslips, create a new Off-Cycle for Employee E:
- Period: March 1 - March 31
- *Compute Sheet*, *Confirm* and *Mark as paid*
4. In Time Off > Management > Time Off, create a new time off allocation for Employee E:
- Date: anywhere during March
- *Save* and *Validate*
5. Try to delete the allocation
6. **An error occurs: _"The pay of the month is already validated with this day included. If you need to adapt, please refer to HR."_**
## Cause
The condition under which this error is raised is defined in `_check_uncovered_by_validated_payslip`:
https://github.com/odoo/enterprise/blob/0226ad15abc8db70f8e379fddec3d83d15749c85/hr_payroll_holidays/models/hr_leave.py#L195-L203
It was originally added by https://github.com/odoo/enterprise/commit/1abb4a815ecb32557fc773cae54baf3e205d9b8c to prevent the deletion of holidays created **before** validating a payslip.
The condition does not take in account the moment when the leave was created. If a leave is created after the computation of the payslip, it did not impact that payslip, and thus can be deleted without risk.
opw-6089990
Forward-Port-Of: odoo/enterprise#115659
Forward-Port-Of: odoo/enterprise#114895This update corrects a technical issue that could cause problems with voice message tests in Odoo. The fix ensures that asynchronous operations complete before promises are resolved, preventing potential race conditions and improving test reliability. This ensures smoother voice messaging functionality.
Original PR description
Before this commit, voice message tests don't wait until the voice player is drawn before resolving the corresponding promise. This may lead to race conditions. This commit fixes the issue by properly `await`ing the completion of the asynchronous code before resolving the promise. Related runbot error: https://runbot.odoo.com/odoo/error/242411 Community: https://github.com/odoo/odoo/pull/261910 Forward-Port-Of: odoo/enterprise#115587
This update corrects a previous error in Odoo's French reporting module. Accounts 657 and 757, introduced by a recent French accounting reform (PCG 2025), are now correctly classified as current operations, resolving discrepancies in profit and loss statements. This ensures accurate financial reporting for French businesses.
Original PR description
…tions As part of the PCG 2025 reform in France, accounts 657 and 757 were introduced to handle capital gains and losses on the disposal of tangible and intangible assets related to normal, current activities. Previously, Odoo incorrectly categorized these under exceptional items which led to mismatches in the P&L. Source: https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/Plans%20comptables/PCG--1er-janvier-2025.pdf Relevant excerpts: <img width="630" height="372" alt="image" src="https://github.com/user-attachments/assets/88a66dac-1cc0-4a33-a902-edb6b626f18f" /> <img width="631" height="318" alt="image" src="https://github.com/user-attachments/assets/403b65dc-20ba-447e-937d-20575f1f45ab" /> opw-6105764 Forward-Port-Of: odoo/enterprise#115216 Forward-Port-Of: odoo/enterprise#114837
This update resolves a critical bug where deleting sign templates caused document corruption and broken lineage tracking. The fix ensures documents remain intact and accurately track signature requests regardless of the number of templates created, enhancing data integrity and reliability.
Original PR description
Steps to reproduce: Bug 1 (The Crash): 1. Open Documents app, select a PDF, and click Action > Sign. 2. In the Sign app, delete the newly created Sign Template. 3. Return to the Documents app. 4. A…
Steps to reproduce:
Bug 1 (The Crash):
1. Open Documents app, select a PDF, and click Action > Sign.
2. In the Sign app, delete the newly created Sign Template.
3. Return to the Documents app.
4. A traceback occurs (`KeyError: <document_id>`) in `web_read`.
Bug 2 (The Broken Lineage):
1. Create two separate Sign Templates from the exact same Document.
2. Send a signature request from the second template.
3. The `reference_doc` on the signature request fails to link back to the original Document.
Current behavior:
When creating a sign template from a document, `documents_sign` intentionally unlinks the original `ir.attachment` (`res_model = False`) to pass custody to `sign.document`. If the template is deleted, the attachment is orphaned, permanently corrupting the original `documents.document` and crashing the UI.
Furthermore, the lineage tracking (`reference_doc`) relies strictly on a 1:1 shared `attachment_id`. If a user creates multiple templates from one document, the system is forced to make a copy for the second template, natively breaking the lineage tracking because the IDs no longer match.
Expected behavior:
Documents should not be corrupted when generating or deleting sign templates. Furthermore, lineage tracking (`reference_doc`) should successfully link back to the original document regardless of how many templates have been generated from it.
Fix:
1. Replaced the `res_model = False` custody-handoff hack in `documents_sign` with a safe `.copy({'original_id': attachment.id})`. This sandboxes the Sign app's files, completely preventing the deletion crash and the multi-template conflicts.
2. Updated the `reference_doc` computation in `sign.request` to dynamically search for both the current `attachment_id` AND its `original_id` (utilizing a minimal-diff recordset union `|`). This perfectly preserves the lineage tracking for all templates without requiring database schema changes.
Task: 5432116
Forward-Port-Of: odoo/enterprise#114221
Forward-Port-Of: odoo/enterprise#113167This update addresses a user experience issue where lingering session data in the opening_control POS module caused confusion. The change ensures that sessions are properly terminated when a user closes their browser or navigates away, improving clarity and reducing potential errors.
Original PR description
When the user closes the browser tab or navigates away after a session in opening_control, the session is not deleted and it causes confusion. opw-6114420 Forward-Port-Of: odoo/enterprise#115056
This update fixes an issue where the namespace for DIAN credit notes was incorrectly configured, causing errors when submitting to the DIAN tax authority. The fix ensures the correct namespace is applied, resolving a recurring problem identified in previous development. This ensures accurate and compliant credit note submissions for Colombian companies.
Original PR description
Issue: Incorrect `sts` namespace raises several issues when sent to dian Steps to reproduce: - On a Colombian company - Create a credit note - Send to DIAN Current Behavior: - Credit note have `sts` namespace defined to `dian:gov:co:facturaelectronica:Structures-2-1` while their Extension node has another `sts` namespace to `http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures` Expected Behavior: - Only the top level Node should have `sts` namespace defined to `dian:gov:co:facturaelectronica:Structures-2-1`. It was forgotten that Credit Note were part of the Invoices in the last refactor. As it's the second time(odoo/enterprise#68619 3rd commit) it happens, I updated the test. opw-6077050 Forward-Port-Of: odoo/enterprise#114725 Forward-Port-Of: odoo/enterprise#113643
This update resolves an issue where duplicate Odoo databases would retain connections to ARCA web services, potentially leading to incorrect production data being used during testing. The change ensures that ARCA connections are cleared when database credentials are updated, improving data integrity and preventing misconfigurations.
Original PR description
Problem and Cause: When duplicating a database with existing ARCA connections, the connections to ARCA webservices are not cleared. Users using the duplicate database may not realize that the ARCA connections are still present. This may lead to production connections getting used while users are testing. Solution: Clear connections to ARCA webservices when updating the credentials. Forward-Port-Of: odoo/enterprise#115068
This update simplifies the management of simulation employee offers within Odoo Enterprise by removing a redundant field. The change consolidates data and ensures simulation offers are automatically deactivated after one month, improving data cleanliness and reducing potential confusion. This improves the overall efficiency of the HR contract management process.
Original PR description
- Replaced the `simulation_employee_id` field with the `employee_id` field from
regular offer to reduce code duplication.
- The `simulation_employee_id` field was redundant as it served the same purpose
as `employee_id` but only for simulation offers.
- The filtering now uses `is_simulation_offer` instead of checking field.
- The original domain [('contract_date_start', '!=', False)] is preserved
in the simulation view.
- To prevent simulation offers from appearing in employee offer lists,
they are now marked as `active=false` on creation. As it will be get cleanup
after one month by cron.
task-[5993083](https://www.odoo.com/odoo/project/1251/tasks/5993083)This update resolves an issue where transcription summaries were incorrectly sent to multiple chatter channels. The fix ensures summaries are now only posted to the relevant current chatter, and also corrects a previous error that occurred when closing the composer window. This improves the user experience and prevents redundant notifications.
Original PR description
Before this commit, there was an issue where the message of the transcription summary would get posted to the chatters of all records of a given model. With this commit, the message is only posted on the current chatter. This commit also fixes a regression where closing the composer window would cause an exception to occur. task-6147951 Forward-Port-Of: odoo/enterprise#115829
This update adjusts the checksum calculation for the IoT scale certified module, aligning it with recent changes in the related iot_drivers module. This ensures data integrity and stability for users relying on this certified module, preventing potential issues with data processing.
Original PR description
This PR adapts the expected checksum for the scale certified module corresponding change in iot_drivers module Forward-Port-Of: odoo/enterprise#115825 Forward-Port-Of: odoo/enterprise#115771
This update resolves an issue preventing mobile users from uploading documents to shared folders within the Odoo portal. The fix adjusts how the mobile file picker interacts with the portal interface, ensuring the file upload process functions correctly. This improves the user experience for mobile portal users.
Original PR description
Steps to reproduce: 1. Install `documents` 2. Create a portal user and share a document folder with edit access 3. Log in as the portal user on a mobile device 4. Try to upload a document inside the…
Steps to reproduce:
1. Install `documents`
2. Create a portal user and share a document folder with edit access
3. Log in as the portal user on a mobile device
4. Try to upload a document inside the shared folder
Issue:
- After selecting a file from the file picker, the document is not uploaded.
Cause:
- On mobile in the portal flow, Upload is triggered from a nested dropdown (inside New) inside the adaptive control-panel dropdown (bottom sheet). By default, DropdownItem uses closingMode="all", so tapping Upload closes parent dropdowns immediately. That unmounts the hidden <input type="file"> before the OS file picker returns. When the user comes back, the input no longer exists, so change never fires and upload does not start.
- Admin/internal users do not hit the same nested adaptive-dropdown path in this view
Solution:
- Set closingMode="'none'" on the Upload DropdownItem so the menu stays mounted while the native picker is open. After a file is selected and onFileInputChange starts upload, close the bottom sheet programmatically with: `window.dispatchEvent(new Event("popstate"))`
opw-5937105
Forward-Port-Of: odoo/enterprise#108486This update ensures that changes to employee contract dates don't inadvertently exclude previously paid payslips. The system now validates that new contract start and end dates align with existing payslip dates, preventing data inconsistencies and ensuring accurate payroll reporting. This protects against potential errors and compliance issues.
Original PR description
Prevent changing a contract's contract_date_start or contract_date_end in a way that would exclude already validated/paid payslips for that version and there is not a departure set. It raises a ValidationError if: - the new contract_date_start is after the earliest payslip date_from - the new contract_date_end is before the latest payslip date_to. task-6088963
This update resolves an issue where the tax return dashboard wouldn't expand all tax return groups, leaving some sections empty. The fix ensures that all generated tax returns are displayed correctly within the list view, providing a complete overview for users. This improves the usability of the accounting reporting feature.
Original PR description
When navigating to the tax return list view from the accounting dashboard, only the first few groups were expanded, leaving subsequent groups appearing empty with only a date header visible. Steps to reproduce: - Generate several tax returns. - Open the main Accounting dashboard. - On a Tax Return card, click one of the generated buttons. - Scroll down the resulting list view. Issue: After 10 groups, following sections appear empty, showing only the header Analysis: By default, the web client limits the number of automatically opened groups. This change adds 'max_number_opened_groups' to the buttons context, aligning the behavior with the primary 'Tax Return' button action. https://github.com/odoo/enterprise/blob/1a2afda205c41773747ed5f174d75843effbbe9f/account_reports/views/account_return_views.xml#L183 opw-5769978 Forward-Port-Of: odoo/enterprise#114673 Forward-Port-Of: odoo/enterprise#113332