Daily updates from Odoo
Navigate
Branch
Monday, May 4, 2026
181 changes
22 changes
Enhancements to existing features
This update enhances the accuracy of write-off reconciliation within the account reconciliation wizard. It now restricts displayed reconciliation models to those that are manually created or directly linked to the statement lines' journal, preventing potential errors and streamlining the reconciliation process. This ensures users only see relevant 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 update ensures accurate tax calculations for employees with Income from Let-Out Property in India, aligning with local regulations. A 30% standard deduction is now applied to rental income, and a new configuration option allows for future adjustments to this deduction. This improves compliance and reporting accuracy.
Original PR description
Purpose: Ensure correct tax computation for Income from Let-Out Property by applying the standard 30% deduction as per Indian tax regulations. This PR includes: - Applied 30% standard deduction on let-out property during tax input value computation. - Added rule parameter for let-out property deduction to allow future changes via configuration. - Updated tax input values to consider only 70% of the declared rental income for tax calculation. - Added tooltip on let-out property field to clarify that a 30% standard deduction is applied on gross rental income for tax computation. This change aligns the payroll tax computation with Indian income tax rules, Income from Let-Out Property is calculated after deducting the standard maintenance deduction of 30% from the gross annual rental income. task-5848157
Resolved issues and error corrections
This update removes a confusing setting related to WHT return types in the Sri Lanka (l10n_lk) reports. Previously, the system was incorrectly mixing WHT closing entries with VAT closing entries, leading to potential reporting errors. This change ensures accurate reporting of withholding taxes.
Original PR description
WHT does not require a closing entry. The current return type is causing VAT closing entry to mix with WHT closing entry or vice versa. task-6157814 Forward-Port-Of: odoo/enterprise#115576
This update prevents invoices from being silently rolled back to draft when a payment batch reconciliation fails due to approval rules. Previously, a third-party module could block the posting process, requiring users to manually correct the invoice. Now, the system correctly handles these scenarios, ensuring payments remain posted.
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 clarifies the tax selection process on Saudi invoices by disabling the incorrect '0% Not Subject to VAT' option. Previously, users were selecting this option instead of the appropriate '0%' tax rates, leading to potential compliance issues with ZATCA regulations. This change ensures invoices accurately reflect supply characteristics and meets legal requirements.
Original PR description
This commit aims to make the invoice line tax drop-down cleaner and more straightforward. The tax `15% PH PE HS` is already handled through the `0% PE` and `0% PH` taxes and `0% Not Subject to VAT`…
This commit aims to make the invoice line tax drop-down cleaner and more straightforward. The tax `15% PH PE HS` is already handled through the `0% PE` and `0% PH` taxes and `0% Not Subject to VAT` is visible with the other `0%` taxes such as `0% EX G`, etc. The users were incorrectly selecting the `0% Not Subject to VAT` instead of the actual `0%` taxes according to the characteristics of the supply; leading to non-compliance with the ZATCA rules. Before this commit: - `15% PH PE HS` tax was `active`. - `0% PE & 0% PH` had distribution for invoices: `base tax grid = 3(B)` and distribution for refunds: `base tax grid = 3(B)`. - `0% Not Subject to VAT` tax was `active` and had distribution for invoice: `base tax grid = 3(B)` and distribution for refunds: `base tax grid 3(B)` - `0% IT G and 0% QT` taxes were `active`. After this commit: - `15% PH PE HS` tax is `inactive`. - `0% PE & 0% PH` taxes have distribution for invoices: `base tax grid = 2(B)` and distribution for refunds: `base tax grid = 2(B)` - `0% Not Subject to VAT` tax is set to `inactive`, `sequence = 17` and tax grid has been removed. - `0% IT G and 0% QT` taxes have been set to `inactive`. task-5959979 Forward-Port-Of: odoo/odoo#253598
This update ensures the session cookie is consistently set for Odoo.sh users, preventing frequent disconnections when sending messages. Previously, the cookie was only set if a specific database was defined, which caused issues with the Odoo.sh environment. This change enhances the overall reliability of the Odoo.sh connection.
Original PR description
Before this commit, the session cookie was only being set when the `db_name` is defined in `odoo.conf`. This was because it was used to identify the correct DB in a multi-DB setup. However, having the session cookie set also prevents frequent disconnects on every message when connected to an odoo.sh DB. After this commit, the session cookie is always set even when no `db_name` is defined. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261802
This update resolves a bug in the POS system where tours would incorrectly terminate. The issue stemmed from a misinterpretation of the tour progress, preventing the tour from stopping when the JS bundle wasn't fully loaded. The fix ensures the tour correctly identifies its completion point, improving the user experience.
Original PR description
There is an issue with the POS since 19.3, when a tour is running, the tour service would get the tour name from the backend with 0 steps, and because the JS bundle of the tours is not loaded by the…
There is an issue with the POS since 19.3, when a tour is running, the tour service would get the tour name from the backend with 0 steps, and because the JS bundle of the tours is not loaded by the POS frontend the tour would continue with 0 steps.
Most of the time the currentActionIndex would be > 0, so the check on line 87 of `tour_interactive.js` would pass
```
if (this.currentActionIndex === this.actions.length)
```
and later run into a
```
TypeError: Cannot read properties of undefined (reading 'step')
at TourInteractive.play (http://localhost:8069/web/assets/debug/point_of_sale.assets_prod.js:121705:33) (/web_tour/static/src/js/tour_interactive/tour_interactive.js:95)
at TourInteractive.start (http://localhost:8069/web/assets/debug/point_of_sale.assets_prod.js:121655:14) (/web_tour/static/src/js/tour_interactive/tour_interactive.js:45)
at TourService.resumeTour (http://localhost:8069/web/assets/debug/point_of_sale.assets_prod.js:123226:39) (/web_tour/static/src/js/tour_service.js:260)
```
I'm not sure what's the correct fix,
- either what I did here
- change the condition on the `play()` to `this.currentActionIndex >= this.actions.length` instead of `this.currentActionIndex === this.actions.length`
- bundle the tours inside the POS front end (although they are not used there so it seems unnecessary)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an issue where correction payslips were failing validation due to missing information. The update ensures that correction payslips include the necessary structure ID and adjusts the payrun period to accommodate multi-month corrections, improving the accuracy of payroll processing.
Original PR description
Ensure `structure_id` is set when creating correction payslips to avoid validation errors. Group payslips by structure before creating pay runs for corrections/reverts, and set the payrun period from the minimum to maximum payslip dates. Fix condition in "Payslip period does not match payrun" to exclude correction payslips (they may span multiple months). task: 6089082
This update fixes a bug preventing users from seeing all available employee types within the Payroll module. The issue stemmed from a recent change that incorrectly filtered employee types based on country settings. This ensures all employee types are consistently visible, streamlining the employee onboarding process.
Original PR description
Version: - saas-19.3 Steps to reproduce: - Install the Payroll module - Navigate to the Employees menu - Open an employee record - Go to the Payroll tab - Try selecting an Employee Type Issue: - Users are unable to see all employee types. This happens because some employee types do not have a country set, causing them to be excluded by the domain filter. However, users should be able to view all employee types regardless of the country field. Fix: - A recent change introduced in PR https://github.com/odoo/odoo/pull/258284 modified the domain, which caused this issue. This PR updates the domain to ensure all employee types are visible as expected. Task-6167327 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 fixes an issue preventing users from deleting time off allocations that were created after a payslip had been validated. Previously, the system incorrectly blocked deletion, requiring manual adjustments through HR. This change ensures time off allocations can be deleted regardless of when they were created relative to payslip validation.
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 fixes a critical issue where gift cards and e-wallets could be reused after being refunded, leading to potential fraud. Refunds for these cards are now prevented, and the system now correctly handles products linked to multiple loyalty programs, ensuring distinct order lines are created.
Original PR description
Previously, it was possible to refund a gift card or e-wallet after creation. However, the associated code remained usable, allowing the gift card or e-wallet to be reused, which is not the expected behavior. To address this, refunds for gift cards and e-wallets are now prevented. Additionally, when a product is part of the trigger products for multiple gift card or e-wallet programs, it was not possible to create separate order lines for the same product with different programs selected. The second line was merged into the first. A condition has been added to prevent merging when different programs are selected. --- Task: https://www.odoo.com/odoo/project/1737/tasks/6052281 Forward-Port-Of: odoo/odoo#262208 Forward-Port-Of: odoo/odoo#256896
This update resolves a bug where editing an already-edited message would cause unexpected behavior, like incorrect selection or empty message fields. The fix removes a redundant 'edited' span from the editor content, ensuring messages are edited correctly and consistently. This improves the user experience for message composition and editing.
Original PR description
When editing an already-edited message, the `(edited)` span was included in the editor's editable content because `prepareBodyForEditing` (formerly `getNonEditableMentions`) passed the raw body…
When editing an already-edited message, the `(edited)` span was included in the editor's editable content because `prepareBodyForEditing` (formerly `getNonEditableMentions`) passed the raw body directly to the composer. This caused two issues: - CTRL+A would select the `(edited)` label, allowing it to be styled, repositioned, or accidentally deleted. - CTRL+A + Backspace + retype left the body empty after saving, because the self-closing `<span class="o-mail-Message-edited"/>` in the stored HTML was parsed by browsers as an open tag (spans are not void elements), swallowing subsequent content as its children. Fix: strip `.o-mail-Message-edited` from the body before loading it into the editor. The server always re-appends a fresh `(edited)` span at the end when saving, so removing it from the editor content is safe and correct. Also align the mock server with the real server behavior: - Place the span *inside* the last `div`/`p` element instead of after it. Rename `getNonEditableMentions` → `prepareBodyForEditing` to reflect that the function now covers both making mentions non-editable and stripping the edited label. task-6172161 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261772
This update resolves critical issues with the Documents Sign feature, preventing crashes when deleting sign templates and ensuring accurate tracking of document lineage across multiple templates. The change improves stability and data integrity for users managing signature workflows.
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 fixes an issue where the namespace for DIAN credit notes was incorrectly configured, causing errors when submitting to the DIAN tax authority. The change ensures that only the top-level node of the credit note has the correct namespace, aligning with DIAN requirements and preventing submission failures. This resolves a recurring problem identified previously.
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 transcription summaries were incorrectly duplicated across multiple chat records. The fix ensures that summaries are now only posted to the relevant current chat, and also addresses 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 fixes a technical issue that caused error messages when generating tax reports via the Odoo wizard. Now, if a certificate isn't set up, users receive a helpful message guiding them to configure one, preventing confusing tracebacks and ensuring smooth report submission.
Original PR description
Description of the issue this commit addresses: When sending the tax report or ec sales list xbrl file via the wizard to the authority, if no certificate has been set, a traceback shows up. This happens because some processes try to use the certificate without checking its existence. Desired behavior after the commit is merged: When sending via the xbrl wizard, if no certificate has been set up, an error offering the user to go to the certificate set up shows up and no traceback. task-6065382 Forward-Port-Of: odoo/enterprise#112951
This update ensures that vendor bills can now be searched using the 'expense_direct_cost' account type. Previously, this account type wasn't searchable, which limited reporting capabilities. The change removes a restriction on account code filtering during searches, improving search accuracy and usability.
Original PR description
The expense direct cost account (account_type: expense_direct_cost) should also be searchable on vendor bills, and search by account code should ignore filters (reverted change) task-id: [6138677](https://www.odoo.com/odoo/project/967/tasks/6138677) origin pr: https://github.com/odoo/odoo/pull/257850 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260076
This update adds a configuration setting to enable logging of order data during support investigations. By including the order's receipt reference, it makes identifying and tracking specific orders in logs much easier. This enhancement improves our ability to quickly resolve customer issues.
Original PR description
During support investigations, it can be useful to log the data of the orders being processed in `sync_from_ui`. This commit adds a configuration parameter `point_of_sale.log_order_data` that allows to enable this logging. By default, it is disabled to avoid filling the logs with potentially sensitive data. Also, the pos_reference field is added to the order representation in the logs, as it's printed in the receipt and can be useful to identify the order in the logs. opw-6145038 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262109 Forward-Port-Of: odoo/odoo#261792
This update addresses a user experience issue where a lingering Point of Sale session remained active after a user closed their browser tab or navigated away. This caused confusion for users and prevented proper session management. The fix ensures sessions are correctly terminated when the Point of Sale is no longer in use.
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 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261207 Forward-Port-Of: odoo/odoo#258933
This update addresses a user experience issue where a session in the opening_control POS module wouldn't automatically close when the user left the browser tab or navigated away. This prevented confusion for users and ensured sessions were properly terminated, improving overall system stability. The change was driven by a reported problem (opw-6114420).
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 optimizes how prices are calculated in Point of Sale (POS) transactions. Previously, redundant price recalculations were slowing down the system, especially during order merges. This change consolidates price updates, resulting in faster and more efficient POS operations. The update also improves performance by preventing unnecessary data serialization in production environments.
Original PR description
Calling triggerRecomputeAllPrices() synchronously on every orderline mutation (create, merge, delete) caused the full tax/price computation to run 3 times per addLineToOrder call when a merge occurred, and triggered an expensive JSON.parse/JSON.stringify of the price data on each of those calls via logPosMessage. Replace the eager synchronous recompute with a microtask coalescer: the first call within a synchronous operation schedules a single Promise.resolve().then() microtask; subsequent calls within the same tick are no-ops. Because the microtask is queued before the outer await continuation (updatePrograms), _updatePrograms still reads fresh prices when it accesses line.prices. Also guard the args serialization in logPosMessage behind odoo.debug so the JSON deep-clone of the price data object is skipped entirely in production. opw-6091501 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260436
This update corrects a problem where existing ARCA connections persisted after duplicating an Odoo database. This prevented users from properly testing without impacting live production connections. The fix ensures ARCA connections are cleared when database credentials are updated, improving stability and preventing unintended production usage.
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
11 changes
Resolved issues and error corrections
This update enhances the accuracy of write-off reconciliation within the accounting module. 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 a cleaner and more reliable reconciliation process.
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 update resolves an issue preventing accurate overtime pay calculations. The system was failing to correctly associate work entry types with overtime rules, leading to missed overtime hours on payslips. The fix restores the necessary data file and corrects the system's reference to ensure overtime is properly accounted for.
Original PR description
Issue: The issue here is that work_entry_type is not associated with the overtime ruleset. That's why when creating a payslip, it is not considering overtime hours. From this PR - https://github.com/odoo/enterprise/pull/98952 the data file is missing from the manifest file. Fix: Added back file to manifest and fixed reference for work_entry_type_id. task-6073921 Forward-Port-Of: odoo/enterprise#112934
This update restores a previous system for tracking changes made to payslip lines, providing a clearer audit trail. Previously, changes were logged more comprehensively, now all affected lines are recorded when a user modifies a payslip. This enhances transparency and accountability for payroll adjustments.
Original PR description
purpose: We want to reintroduce the same way of logging payslip lines changes as previously done by the removed payslip edit wizard - changed the log in chat to include all affected lines by the user's change task-id: 6144266
This update fixes an issue where the namespace for DIAN credit notes was incorrectly configured, causing problems when submitting to the DIAN tax authority. The fix ensures that only the top-level node of the credit note has the correct namespace, aligning with DIAN requirements. This resolves a recurring problem identified and addressed previously.
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 adds a configuration setting to enable logging of order data during support investigations. This allows support teams to better understand and troubleshoot issues with point-of-sale orders. A new 'pos_reference' field is added to the logs for easier identification.
Original PR description
During support investigations, it can be useful to log the data of the orders being processed in `sync_from_ui`. This commit adds a configuration parameter `point_of_sale.log_order_data` that allows to enable this logging. By default, it is disabled to avoid filling the logs with potentially sensitive data. Also, the pos_reference field is added to the order representation in the logs, as it's printed in the receipt and can be useful to identify the order in the logs. opw-6145038 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262109 Forward-Port-Of: odoo/odoo#261792
This update addresses a user experience issue where a Point of Sale session wouldn't automatically close when the user left the browser tab or navigated away. This prevented confusion for users and ensured sessions were properly terminated. The change removes the lingering session to improve clarity.
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 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261207 Forward-Port-Of: odoo/odoo#258933
This update addresses a user experience issue where a lingering session in the opening_control POS module persisted after a user closed their browser tab or navigated away. This caused confusion for users. The fix ensures sessions are properly terminated, improving the overall POS experience.
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 optimizes how prices are calculated in the Point of Sale system. Previously, price recalculations were performed repeatedly, causing performance issues. This change consolidates these calculations into a single, efficient process, resulting in faster order processing and a smoother user experience. Additionally, the update improves the system's efficiency by preventing unnecessary data serialization in production environments.
Original PR description
Calling triggerRecomputeAllPrices() synchronously on every orderline mutation (create, merge, delete) caused the full tax/price computation to run 3 times per addLineToOrder call when a merge occurred, and triggered an expensive JSON.parse/JSON.stringify of the price data on each of those calls via logPosMessage. Replace the eager synchronous recompute with a microtask coalescer: the first call within a synchronous operation schedules a single Promise.resolve().then() microtask; subsequent calls within the same tick are no-ops. Because the microtask is queued before the outer await continuation (updatePrograms), _updatePrograms still reads fresh prices when it accesses line.prices. Also guard the args serialization in logPosMessage behind odoo.debug so the JSON deep-clone of the price data object is skipped entirely in production. opw-6091501 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260436
This update resolves an issue preventing Winbooks import files from correctly mapping tax accounts. The fix re-enables a temporary workaround that allows Odoo to recognize the standard Winbooks account (411000) for Belgian companies, ensuring successful import and accurate data transfer. This prevents users from needing to manually adjust account settings.
Original PR description
Steps to reproduce: ------------------- 1. Install account_winbooks_import, and switch to a Belgian company 2. Open Accounting > Configuration > Settings and click "Import", then click "Import WBK"…
Steps to reproduce: ------------------- 1. Install account_winbooks_import, and switch to a Belgian company 2. Open Accounting > Configuration > Settings and click "Import", then click "Import WBK" 3. Upload a Winbooks zip whose chart of accounts uses 411000 typed as asset_current (Winbooks default for "VAT Recoverable") 4. Confirm the import The import fails with: "You must select a receivable account for 'Tax Receivable Account'." Why the issue ------------- In Winbooks, account 411000 is the V01 central account (tax receivable). In Odoo, 411000 comes from l10n_be (account "a411") with type "asset_current", not "asset_receivable". When the import wizard sets it on the existing tax groups via `manage_centralid` in import_wizard.py, the constraint `_constrains_payable_receivable_account` on account.tax.group rejects the write because the account is not "asset_receivable" + "non_trade". This case was already handled in 20804db6d87: we bypassed the constraints on accounts coming from Winbooks, as those are imported in draft anw and the user finishes the configuration after. However later, [2a38e771a826](https://github.com/odoo/odoo/commit/2a38e771a826) and ff5dee81080 removed the initial constraint and the code that bypassed it for account_winbooks_import. Finally, [746a06fab485](https://github.com/odoo/odoo/commit/746a06fab485) added back a similar constraint "_constrains_payable_receivable_account" to fix a NL issue (same account used as both payable and receivable on a tax group). The Winbooks bypass however was not added back, so the original Winbooks issue appeared again. The fix ------- Add back the same bypass originally introduced in 20804db6d87. opw-6092464
This update corrects a problem where existing ARCA connections persisted after duplicating an Odoo database. This prevented users from properly testing in a sandbox environment, potentially leading to production connections being used. The fix now clears these connections when credentials are updated, ensuring a clean testing environment.
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 adds logging of Amazon's request identifiers to the SP-API responses. Previously, this information was missing, making it harder for support teams to troubleshoot issues with Amazon. Logging this identifier will significantly improve support efficiency and response times.
Original PR description
Each response from Amazon's SP-API includes a request identifier used by their support team for debugging. This identifier was not previously logged, making support investigations more difficult. Forward-Port-Of: odoo/enterprise#114483
15 changes
Enhancements to existing features
This update adds the delivery address to the TicketScreen in Point of Sale. This allows sales teams to quickly view and confirm the correct delivery address while scheduling deliveries, streamlining the order fulfillment process. It's a small change designed to improve efficiency and reduce errors.
Original PR description
In this commit: =============== - Added address details on the TicketScreen when the order preset identification type is `address`. - This helps to easily see the delivery address while scheduling the delivery. Task-5974595 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251389
Resolved issues and error corrections
This update simplifies the selection of tax rates on invoices for Saudi Arabia (l10n_sa). Previously, incorrect tax selections led to compliance issues. This change ensures the correct tax rates are applied based on supply characteristics, resolving a potential regulatory problem.
Original PR description
This commit aims to make the invoice line tax drop-down cleaner and more straightforward. The tax `15% PH PE HS` is already handled through the `0% PE` and `0% PH` taxes and `0% Not Subject to VAT`…
This commit aims to make the invoice line tax drop-down cleaner and more straightforward. The tax `15% PH PE HS` is already handled through the `0% PE` and `0% PH` taxes and `0% Not Subject to VAT` is visible with the other `0%` taxes such as `0% EX G`, etc. The users were incorrectly selecting the `0% Not Subject to VAT` instead of the actual `0%` taxes according to the characteristics of the supply; leading to non-compliance with the ZATCA rules. Before this commit: - `15% PH PE HS` tax was `active`. - `0% PE & 0% PH` had distribution for invoices: `base tax grid = 3(B)` and distribution for refunds: `base tax grid = 3(B)`. - `0% Not Subject to VAT` tax was `active` and had distribution for invoice: `base tax grid = 3(B)` and distribution for refunds: `base tax grid 3(B)` - `0% IT G and 0% QT` taxes were `active`. After this commit: - `15% PH PE HS` tax is `inactive`. - `0% PE & 0% PH` taxes have distribution for invoices: `base tax grid = 2(B)` and distribution for refunds: `base tax grid = 2(B)` - `0% Not Subject to VAT` tax is set to `inactive`, `sequence = 17` and tax grid has been removed. - `0% IT G and 0% QT` taxes have been set to `inactive`. task-5959979 Forward-Port-Of: odoo/odoo#253598
This update enhances the accuracy of write-off reconciliation within the accounting module. 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 trustworthy.
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 update fixes an issue where applying a global discount and a gift card resulted in an incorrect order total. The system was incorrectly adding back a portion of the gift card amount as a discount. The fix ensures gift card deductions are handled properly, preventing this calculation error.
Original PR description
Applying a global order discount and then paying with a gift card (or eWallet) caused the POS to recompute the global discount as if the gift card deduction were part of the taxable merchandise base.…
Applying a global order discount and then paying with a gift card (or eWallet) caused the POS to recompute the global discount as if the gift card deduction were part of the taxable merchandise base. The negative reward line was included in `isGlobalDiscountApplicable()`, so the percentage discount shrank and the order total increased by “global_discount% × gift card amount” (e.g. 10% of $50 → $5 added back). Steps to reproduce: ------------------- * Open PoS with global discount and a gift card / eWallet program. * Add a product (e.g. $100), apply a global discount (e.g. 10%). * Apply a gift card for part of the balance (e.g. $50). > Observation: Total is wrong (e.g. $45 instead of $40): the gift card amount is reduced, then a fraction of that amount is added back via the recomputed global discount line. Why the fix: ------------ `pos_discount` only skips tip and discount-product lines; gift card reward lines use another product and were still “discountable”. The fix belongs in `pos_loyalty`: override `isGlobalDiscountApplicable()` to return false only for gift card and eWallet reward lines (`isGiftCardOrEWalletReward()`), and fall to `super` otherwise so promotion/loyalty reward behavior stay correct. opw-6104090 Forward-Port-Of: odoo/odoo#259577
This update fixes a critical issue preventing the correct import of PINT invoices for Australia, Japan, Malaysia, Singapore, and New Zealand. By adding logic to identify these specific UBL document types, the system now accurately processes and imports these invoices, ensuring data integrity and compliance.
Original PR description
## PINT modules (`l10n_*_ubl_pint`)
The UBL module wasn't able to import PINT documents because there was no logic to detect the type of UBL document for PINT invoices (`urn:peppol:pint:billing-1@{anz, jp, my, sg}-1`). This PR adds the methods to detect PINT UBL documents and provide appropriate EDI decoder model names. Along with the fix, test cases are added to verify proper import of the said UBL's.
## Base EDI module (`account_edi_ubl_cii`)
Additionally, `_correct_invoice_tax_amount` in the base UBL import is fixed to only process TaxSubtotal nodes in the document currency. Previously it iterated over all `TaxTotal/TaxSubtotal` nodes regardless of currency, which caused the JP PINT import to pick up the company-currency tax amount instead of the document-currency one. JP PINT is the only format that includes TaxSubtotal in both TaxTotal nodes.
Forward-Port-Of: odoo/odoo#258017This update resolves an issue preventing users from canceling invoices through the ECPay integration. The fix adds necessary permissions to access a key configuration field, ensuring the cancellation wizard functions correctly for all user roles. This prevents a disruption in invoice processing.
Original PR description
Before this commit, the invoice cancellation wizard failed when clicking "Request Cancel" because l10n_tw_edi_ecpay_staging_mode lacked sudo access, while similar fields had it. The cancel wizard (l10n_tw_edi.invoice.cancel) needs to read this field to determine the API endpoint, but non-superuser accounts couldn't access it, causing a permission error. This commit adds sudo() when accessing staging_mode, consistent with other ECPay API configuration fields. Steps to reproduce: - Install l10n_tw modules with ECPay staging credentials (MerchantID: 2000132) - Use valid Tax ID (10430481) to create and send invoice - As Accounting/Administrator user, cancel the invoice - Access error occurs on button_request_cancel opw-6101478 --- 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 namespace for DIAN credit notes was incorrectly configured, causing errors when submitting to the DIAN tax authority. The change ensures the correct namespace is applied to the credit note, resolving a recurring problem identified in previous development. This ensures accurate and compliant electronic filing of credit notes 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 fixes an issue where closed Helpdesk tickets were sending out emails with the ticket's database ID instead of the reference number. This ensures that customers receive consistent and accurate information about their ticket status, improving communication and transparency. The change updates a key email template to use the correct ticket reference.
Original PR description
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the…
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the "Helpdesk: Ticket Received" mail template; Observe that the correct reference (100) is used. (Open the full composer to use "Load template") 4. Now send a message using the "Helpdesk: Ticket Closed" mail template and Observe that it displays the database ID (e.g., 1) instead of the reference. Cause: ------ `new_ticket_request_email_template` uses the ticket reference(`object.ticket_ref`) correctly. https://github.com/odoo/enterprise/blob/d39e291ba89ad018ba6f5f9591d280a834822f27/helpdesk/data/mail_template_data.xml#L18-L19 However, the `solved_ticket_request_email_template` uses the database ID (`object.id`) instead of the actual ticket reference (`object.ticket_ref`), leading to inconsistent references in customer communications. related commit: 3ed5273 Solution: --------- Update `solved_ticket_request_email_template` to use `object.ticket_ref` instead of `object.id` opw-6087466 Forward-Port-Of: odoo/enterprise#114852 Forward-Port-Of: odoo/enterprise#113932
This update corrects a previous issue where loyalty point transactions in a single POS order were only recorded as a net difference. Now, the system accurately tracks both the points earned and the points spent, providing a complete and precise history of loyalty card activity. This ensures accurate reporting and better customer understanding of their loyalty points.
Original PR description
When a loyalty card both earned and spent points in the same POS order, the history entry only reflected the net difference instead of the gross amounts. The root cause was that the JS payload sent only a single `points` field representing the net change. Fix by tracking `points_earned` and `points_spent` separately in `couponData` and sending them to the server. opw-6041420 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261399 Forward-Port-Of: odoo/odoo#256022
This update addresses a user experience issue where a lingering Point of Sale session remained active after a user closed their browser tab or navigated away. This caused confusion for users. The fix ensures that sessions are properly terminated when the Point of Sale is no longer in use.
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 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261207 Forward-Port-Of: odoo/odoo#258933
This update corrects a problem where lingering Point of Sale sessions in the opening_control module persisted after a user closed their browser tab. This prevented proper session cleanup, leading to potential confusion for users. The change ensures sessions are automatically terminated when a user navigates away, improving the overall user experience.
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 optimizes how prices are calculated in Point of Sale, resolving a previous issue that caused unnecessary and costly calculations. By using a smarter system, we've significantly reduced the strain on our system and improved the speed of order processing. The changes also ensure price data is handled efficiently in production environments.
Original PR description
Calling triggerRecomputeAllPrices() synchronously on every orderline mutation (create, merge, delete) caused the full tax/price computation to run 3 times per addLineToOrder call when a merge occurred, and triggered an expensive JSON.parse/JSON.stringify of the price data on each of those calls via logPosMessage. Replace the eager synchronous recompute with a microtask coalescer: the first call within a synchronous operation schedules a single Promise.resolve().then() microtask; subsequent calls within the same tick are no-ops. Because the microtask is queued before the outer await continuation (updatePrograms), _updatePrograms still reads fresh prices when it accesses line.prices. Also guard the args serialization in logPosMessage behind odoo.debug so the JSON deep-clone of the price data object is skipped entirely in production. opw-6091501 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260436
This update resolves an issue where the system incorrectly skipped remuneration declarations in certain scenarios, particularly when employees had no worked days but still received a bonus. The fix ensures that all remuneration amounts are accurately declared, preventing potential discrepancies in payroll reporting for Belgian employees. This improves the reliability of the payroll process.
Original PR description
Forward-Port-Of: odoo/enterprise#106689
This update addresses a change in Sendcloud's API, ensuring continued delivery functionality for our users. We've added a key to requests, allowing our system to communicate with Sendcloud using the older, maintained API version. This ensures a seamless transition and continued delivery service.
Original PR description
Sendcloud pass their api v2 to maintenance and only provide new api V3 key to the new customers. In order to make a smooth transition for the user we add the partner key, so they know that the customer are coming from odoo and they use the v2 api. Future work will be done to upgrade our module and support the v3. API key. Forward-Port-Of: odoo/enterprise#114441
This update resolves an issue where duplicate Odoo databases would retain active connections to ARCA web services. This prevented users from properly testing in a development environment, potentially leading to production connections being used. The fix ensures ARCA connections are cleared when database credentials are updated.
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
5 changes
Resolved issues and error corrections
This update fixes an issue where closed Helpdesk tickets were sending out emails with the incorrect ticket ID instead of the reference number. This ensures that customers receive consistent and accurate information about their resolved tickets. The change updates a key email template to use the correct ticket reference.
Original PR description
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the…
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the "Helpdesk: Ticket Received" mail template; Observe that the correct reference (100) is used. (Open the full composer to use "Load template") 4. Now send a message using the "Helpdesk: Ticket Closed" mail template and Observe that it displays the database ID (e.g., 1) instead of the reference. Cause: ------ `new_ticket_request_email_template` uses the ticket reference(`object.ticket_ref`) correctly. https://github.com/odoo/enterprise/blob/d39e291ba89ad018ba6f5f9591d280a834822f27/helpdesk/data/mail_template_data.xml#L18-L19 However, the `solved_ticket_request_email_template` uses the database ID (`object.id`) instead of the actual ticket reference (`object.ticket_ref`), leading to inconsistent references in customer communications. related commit: 3ed5273 Solution: --------- Update `solved_ticket_request_email_template` to use `object.ticket_ref` instead of `object.id` opw-6087466 Forward-Port-Of: odoo/enterprise#114852 Forward-Port-Of: odoo/enterprise#113932
This update corrects an issue where the Swedish EC Sales Report exported to KVR (a key reporting format) displayed values with decimal places, which is not permitted by Swedish regulations. The fix ensures that all report values are rounded to integers, aligning with reporting requirements and improving data accuracy for Swedish businesses. This resolves a previous bug reported by our team.
Original PR description
**PROBLEM** EC Sales Report in Sweden needs to be reported with integer values. **STEP TO REPRODUCE** 1. Install l10n_se 2. On the se company, create a invoice with lines with EU tax and confirm it. 3. Go to Accounting/Reporting/EC Sale List and export to KVR. 4. Notices the KVR uses numbers with decimals places. opw-6045289 Forward-Port-Of: odoo/enterprise#115459 Forward-Port-Of: odoo/enterprise#114292
This update addresses a previous issue where a Point of Sale session wouldn't automatically close when a user left the browser tab or navigated away. This caused confusion for users. The change ensures sessions are properly terminated, improving the overall user experience.
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 error in how Odoo calculates overtime for employees on flexible work schedules. Previously, flexible schedules with varying hours resulted in incorrect overtime indications. The fix ensures accurate overtime calculations by correctly handling time zone conversions and date ranges, improving the accuracy of timesheet reporting.
Original PR description
**problem:** On timesheets, the overtime indication next to an employee's name is incorrect when using flexible work schedules. for example: a "Flexible 20h" schedule (4h a day) shows 1h of negative…
**problem:** On timesheets, the overtime indication next to an employee's name is incorrect when using flexible work schedules. for example: a "Flexible 20h" schedule (4h a day) shows 1h of negative overtime even when the employee has logged exactly 20h for the week. **steps to reproduce:** 1. Create a new working schedule with flexible hours enabled for example (20h/week, 4h/day average) 2. Assign this schedule to an employee 3. Go to Timesheets, search for the employee 4. Navigate to a past week 5. Enter 4h on each working day 6. Observe the overtime indication shows incorrect value (-01:00) **cause:** In `resource/models/resource_calendar.py`, the flexible hours algorithm that determines the date range by converts UTC boundaries to the employee's timezone. When the employee's timezone has a positive UTC offset (UTC+1, like in brussels time zone), `Sun 23:59:59 UTC` becomes `Mon 00:59:59 CET`, pushing `end_date` to the next Monday. This creates an 8 day range instead of 7. The algorithm then starts a new weekly budget for the spillover day and allocates 1 extra hour, making `allocated_hours` 20.9999998 instead of 20. **fix:** - Use the UTC date before conversion to the employee's timezone when determining the flexible date range. - prefer `self` when it is the flexible calendar being queried, so hr_contract's `_get_calendar_at()` override cannot substitute the contract's calendar parameters (full_time_required_hours, hours_per_day) for the flexible ones. **note** Updating the test (`test_no_carried_over_leaves_for_flexible_resource`) in `hr_holidays/tests/test_expiring_leaves.py` expected duration logic, is to match the corrected inclusive day range and prevent asserting the previous spillover behavior. link to the enterprise PR: https://github.com/odoo/enterprise/pull/112879 link to the community PR: https://github.com/odoo/odoo/pull/257269 opw-5970511 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#115435 Forward-Port-Of: odoo/enterprise#112879
This update adds logging of Amazon's SP-API request identifiers to our system. Previously, these identifiers were missing, making it harder for support teams to troubleshoot issues with Amazon. Now, support can more easily investigate and resolve problems related to Amazon sales.
Original PR description
Each response from Amazon's SP-API includes a request identifier used by their support team for debugging. This identifier was not previously logged, making support investigations more difficult. Forward-Port-Of: odoo/enterprise#114483
16 changes
New functionality added to Odoo
This update introduces a new VAT provision account (411800) in the Odoo accounting module for Belgium. Starting May 1st, this account will replace the existing account for filing periodic VAT returns, aligning with new Belgian regulations. This change ensures accurate reporting and compliance.
Original PR description
Starting May 1st, in Belgium the VAT provision account will replace the current account for periodic returns - Adding the new bank account - Adding a new account 'Tax Provision Account' 411800 Enterprise PR: odoo/enterprise#111599 Task [link](https://www.odoo.com/odoo/project.task/6044017) task-6044017 Forward-Port-Of: odoo/odoo#261782 Forward-Port-Of: odoo/odoo#255272
This update prepares Odoo for a change in Belgian VAT regulations. Starting May 1st, a new 'Tax Provision Account' (411800) is being added to ensure accurate reporting for periodic VAT returns. This change aligns Odoo with the latest accounting standards in Belgium.
Original PR description
Starting May 1st, in Belgium the VAT provision account will replace the current account for periodic returns - Adding the new bank account - Adding a new account 'Tax Provision Account' 411800 Community PR: odoo/odoo#255272 Task [link](https://www.odoo.com/odoo/project.task/6044017) task-6044017 Forward-Port-Of: odoo/enterprise#115481 Forward-Port-Of: odoo/enterprise#111599
Resolved issues and error corrections
This update fixes an issue where closed Helpdesk tickets were sending out emails with the incorrect ticket ID instead of the reference number. Previously, the 'Ticket Closed' email template used the internal database ID, leading to inconsistent information for customers. This change ensures all email communications accurately reflect the ticket reference number.
Original PR description
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the…
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the "Helpdesk: Ticket Received" mail template; Observe that the correct reference (100) is used. (Open the full composer to use "Load template") 4. Now send a message using the "Helpdesk: Ticket Closed" mail template and Observe that it displays the database ID (e.g., 1) instead of the reference. Cause: ------ `new_ticket_request_email_template` uses the ticket reference(`object.ticket_ref`) correctly. https://github.com/odoo/enterprise/blob/d39e291ba89ad018ba6f5f9591d280a834822f27/helpdesk/data/mail_template_data.xml#L18-L19 However, the `solved_ticket_request_email_template` uses the database ID (`object.id`) instead of the actual ticket reference (`object.ticket_ref`), leading to inconsistent references in customer communications. related commit: 3ed5273 Solution: --------- Update `solved_ticket_request_email_template` to use `object.ticket_ref` instead of `object.id` opw-6087466 Forward-Port-Of: odoo/enterprise#114852 Forward-Port-Of: odoo/enterprise#113932
This update ensures correct processing of invoices from KSeF (a Polish tax system) by requiring vendors to use the Polish NIP number instead of VAT numbers. This is a regulatory requirement for foreign companies with a Polish presence, and the change corrects a previous system error that was incorrectly searching for VAT numbers. This ensures compliance and accurate invoice import.
Original PR description
When we import bills from KSeF, the vendor (`Podmiot1`) XML tag must include a Polish `NIP` number XML tag. The `NIP` is the base number composing a polish `vat` number, but without the prefix `PL`.…
When we import bills from KSeF, the vendor (`Podmiot1`) XML tag must include a Polish `NIP` number XML tag. The `NIP` is the base number composing a polish `vat` number, but without the prefix `PL`. This is true even if the vendor is from another country like Luxembourg: if they have a stable organization in Poland and sells in Poland - then they have to use a polish `NIP` to use the KSeF and issue their invoices. Two issues: - We search the vendor by `NIP` as it was a `vat` number, but we add the `vendor_country` code as prefix instead of `PL`. I.e. we search for `LU012345678` instead of `PL012345678`. - When we don't find the vendor in the database, we create one using the `NIP` number coming straight from the tag, as it was a `vat` number. I.e. for a partner in Luxembourg, `vat` will become `LU012345678` instead of `PL012345678` ref: https://ksef.podatki.gov.pl/media/4u1bmhx4/information-sheet-on-the-fa-3-logical-structure.pdf Ticket [link](https://www.odoo.com/odoo/project.task/6148039) opw-6148039 Forward-Port-Of: odoo/odoo#261964
This update fixes a test related to invoice grouping within the account_edi_ubl_cii module. The change ensures that users can correctly ungroup lines after an invoice has been imported, grouped, and posted, providing a more robust and user-friendly experience. This fix applies to version 18.3 and a subsequent PR will address newer versions.
Original PR description
[FIX] account_edi_ubl_cii: fix group lines test Fix the test `test_import_invoice_group_lines_by_tax` to cover the case where an invoice was imported, grouped and posted, the next one will be grouped but the user still can ungroup lines up to 18.3, an other PR will be opened for 18.4+ no-task Forward-Port-Of: odoo/odoo#261731
This update resolves an issue where the EC Sales Report exported to KVR (a key reporting tool) displayed decimal values instead of the required integer format for Swedish tax reporting. The fix ensures that all sales report values are rounded to integers before export, complying with Swedish reporting regulations. This prevents data discrepancies and ensures accurate reporting.
Original PR description
**PROBLEM** EC Sales Report in Sweden needs to be reported with integer values. **STEP TO REPRODUCE** 1. Install l10n_se 2. On the se company, create a invoice with lines with EU tax and confirm it. 3. Go to Accounting/Reporting/EC Sale List and export to KVR. 4. Notices the KVR uses numbers with decimals places. opw-6045289 Forward-Port-Of: odoo/enterprise#115459 Forward-Port-Of: odoo/enterprise#114292
This update resolves a bug that prevented accurate balance calculations during bank reconciliation when editing a move line in a different currency. Previously, re-editing a line would reset the balance to zero. This fix ensures correct balance updates, improving the reliability of financial reporting.
Original PR description
Fixed an issue where when editing a move line for the bank reconciliation and setting the currency to a currency other than the company's currency if we edit the move line again we will find that the balance is equal to 0. task-6037835
This update resolves a technical issue preventing the posting of vendor bills in LATAM purchase journals. The system's hashing logic requires sequential document numbers, which conflicts with vendor-assigned numbers. By hiding the 'Secure Posted Entries with Hash' option for these journals, we ensure data integrity and avoid misleading security indicators.
Original PR description
Steps to reproduce 1. Install l10n_ar (or any LATAM localization). 2. Go to Accounting > Configuration > Journals and open a Purchase journal that has "Use Documents?" enabled. 3. Enable "Secure…
Steps to reproduce 1. Install l10n_ar (or any LATAM localization). 2. Go to Accounting > Configuration > Journals and open a Purchase journal that has "Use Documents?" enabled. 3. Enable "Secure Posted Entries with Hash". 4. Create and post a vendor bill with a high document number (e.g. 00001-00009999). 5. Create another vendor bill with a lower document number (e.g. 00001-00000100) and try to post it. Issue Posting the second vendor bill fails with: "This move could not be locked either because some move with the same sequence prefix has a higher number. You may need to resequence it." The hashing logic in account_journal.py enforces a strict continuous sequential chain per journal: https://github.com/odoo/odoo/blob/89993885823f7309b921145eacc7bbe2c3c1e427/addons/account/models/account_journal.py#L671-L678 In LATAM countries, vendor bill document numbers are assigned by the vendor, not by Odoo. A bill with a lower number can legitimately be entered after one with a higher number, which breaks the sequential assumption the hash chain relies on. Allowing it would produce a hash that no longer represents a proper chain, giving users a false sense of security. Sales journals are unaffected because Odoo controls their sequence. Solution Hide the "Secure Posted Entries with Hash" field on purchase journals that have "Use Documents?" enabled, preventing users from enabling an option that cannot work correctly for vendor-assigned document numbers. Sales journals keep the option available since Odoo controls their sequence. opw-6076673 Forward-Port-Of: odoo/odoo#259206
**Steps to reproduce:** - create a storable product avco auto - make sure that a purchase tax is set in 'General Information' - create and confirm a PO for 30 quantities with a price of 0 - receive the products - create and validate a delivery for 10 units of the product - from the PO create the bill - set a date and save - set a price of 100 - on the Bill set the total tax at 500 (it's bellow 'untaxed amount' on the bottom right of the bill and should be 450 before you change it,
Original PR description
**Steps to reproduce:** - create a storable product avco auto - make sure that a purchase tax is set in 'General Information' - create and confirm a PO for 30 quantities with a price of 0 - receive…
**Steps to reproduce:** - create a storable product avco auto - make sure that a purchase tax is set in 'General Information' - create and confirm a PO for 30 quantities with a price of 0 - receive the products - create and validate a delivery for 10 units of the product - from the PO create the bill - set a date and save - set a price of 100 - on the Bill set the total tax at 500 (it's bellow 'untaxed amount' on the bottom right of the bill and should be 450 before you change it, if the tax is 15%) - confirm the bill **Current behavior:** The total tax was reset to 450 **Expected behavior:** It should stay 500 as it was manually set **Cause of the issue:** The total tax amount is computed based on the tax lines in Journal Items https://github.com/odoo/odoo/blob/2744396733bb3ad60813e9e093d67192c0d38b36/addons/account/models/account_move.py#L1171 So the problem is actually that a recomputation of the balance of the tax account.move.line (the one with the account "tax paid" in journal items) is triggered when we confirm the Bill. That's because : When we confirm the bill, because the price is different than the one on the PO, _apply_price_difference does 2 things : (1) it creates an svl (with corresponding amls) for the quantities that are still in stock (here 20) (2) it adds amls on the bill (crediting stock interim received and debiting expense) to compensate the cogs deficit for the already out of stock quantities (here 10). cf https://github.com/odoo/odoo/pull/126536 for more details When we create those amls from (2), the create method from account.move.lines calls super() inside a context manager calling _sync_dynamic_lines(). https://github.com/odoo/odoo/blob/5583cbcebae00d8122dce5ce929b650929966a90/addons/account/models/account_move_line.py#L1628-L1635 the yield of sync_dynamic_lines() is inside a context manager calling _sync_tax_lines. https://github.com/odoo/odoo/blob/5583cbcebae00d8122dce5ce929b650929966a90/addons/account/models/account_move.py#L3250 Therefore, the first half of sync_tax_lines() (untill the yield) is ran before the call to super and the rest (from the yield) is ran after the call to super. Because we added two lines in the account.move, get_changed_lines will return those 2 new line and because there is a tax_ids on the new lines round_from_tax will be False. https://github.com/odoo/odoo/blob/5583cbcebae00d8122dce5ce929b650929966a90/addons/account/models/account_move.py#L3034-L3041 Therefore we won't reach continue. https://github.com/odoo/odoo/blob/73d73c5c6606e0b34c754bfc4de035840951dd3b/addons/account/models/account_move.py#L3055-L3059 And the tax line will be recomputed using _prepare_tax_line() https://github.com/odoo/odoo/blob/73d73c5c6606e0b34c754bfc4de035840951dd3b/addons/account/models/account_move.py#L3065 Here is why there is a tax_ids on the new lines : The field is precompute so if we don't set a value for it, _compute_tax_ids will be ran to compute it. As the account move on which the lines are added is a bill, the tax_ids will the supplier_tax_id of the product. https://github.com/odoo/odoo/blob/73d73c5c6606e0b34c754bfc4de035840951dd3b/addons/account/models/account_move_line.py#L898-L901 **Fix:** There is no need for a tax_ids on these lines as they are not meant to (and should'nt) impact the taxes. opw-5413798 Forward-Port-Of: odoo/odoo#261559
This update addresses a user experience issue where lingering sessions in the Point of Sale (POS) system caused confusion after a user closed their browser tab or navigated away. The change ensures that sessions are properly terminated when the POS is no longer active, improving usability and preventing unexpected behavior.
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 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261207 Forward-Port-Of: odoo/odoo#258933
This update addresses a user experience issue where a Point of Sale session wouldn't automatically close when the user left the browser tab or navigated away. This prevented proper session cleanup, leading to potential confusion. The change ensures sessions are correctly terminated, improving usability and data consistency.
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 simplifies the process for creating Unsplash attachments, reducing complexity and potential security risks. By restricting sudo access only to the attachment URL setting, rather than the entire attachment creation process, the system is more efficient and secure. This change improves the overall stability and maintainability of the Unsplash integration.
Original PR description
Only grant `sudo` to set the attachment `url` rather than applying sudo on the whole `.create` dict The purpose of the previous `_can_bypass_rights_on_media_dialog` was to allow employees uploading unsplash images to be able to create an attachment with an `url` while being a `type='binary'`, for the images to be able to be served with the URL `/unsplash/...`. Just applying `sudo` at the right needed spot rather than on the whole `create` requires less code to achieve the same goal. Forward-Port-Of: odoo/odoo#261358 Forward-Port-Of: odoo/odoo#261056
This change fixes an issue where products were incorrectly displayed on the website when the user's company setting was different from the product's assigned company. The update ensures product searches accurately reflect the user's current company affiliation, preventing potential problems with sales orders. This improves data consistency and accuracy.
Original PR description
# Setup Have 2 companies : A & B # How to reproduce - Set your website's company to Company B - Create product X : - Company : Company A - Published - Name : xyz - Go to Users > Any User > Acces…
# Setup
Have 2 companies : A & B
# How to reproduce
- Set your website's company to Company B
- Create product X :
- Company : Company A
- Published
- Name : xyz
- Go to Users > Any User > Acces Rights > Allowed Companies => leave only Company A
- Connect as that user on the website
- Go to the Shop tab and search xyz
# The problem
The product X is displayed, even though we currently use the company B's website and the product is limited to company A.
This causes problem later when Sales Order are created using that product.
If you set the Allowed Companies of the user to both Company A and Company B, then the product is correctly hidden
# Why
When you search something in the search bar, the server does a `_search_with_fuzzy()` that ends up calling a simple `model.search()`.
In our case, this search should not return product X because there is an `ir.rule` that hides product not in the current company :
https://github.com/odoo/odoo/blob/0bb5ac6c1a87367c1ebb343ad6e6e6e56188cf13/addons/product/security/product_security.xml#L34-L38
But the `website` module has some particular rule about setting the current company :
https://github.com/odoo/odoo/blob/0bb5ac6c1a87367c1ebb343ad6e6e6e56188cf13/addons/website/models/ir_http.py#L249-L261
So, in our case, since the user does not have company B in its allowed companies, then
`allowed_company_ids` = Company A. So `('company_id', 'parent_of', company_ids)` is trucy and the product is displayed
# Proposed solution
Doing the search with `with_company` raise an AccessError because the company is not present in the allowed_companies. Chaging the allowed companies logic seems risky because it
may lead to unintended side effects.
We instead enforce the website's company in the search's domain
opw-6115647
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#260138This update resolves an issue where Amazon's stock synchronization was failing due to incorrect fulfillment channel data. The system now uses a new API field to accurately determine available stock by channel, defaulting to FBM when multiple channels are present. This ensures reliable stock updates for Amazon listings.
Original PR description
During the upgrade from XML-based feeds to the new JSON Listings API for stock management, we chose to use Amazon's API to fetch a listing's fulfillment channel information. However, Amazon does not…
During the upgrade from XML-based feeds to the new JSON Listings API for stock management, we chose to use Amazon's API to fetch a listing's fulfillment channel information. However, Amazon does not provide a clear answer for a given listing. After some research, we assumed an offer was FBM when the listing contained a `merchant_shipping_group`, because this setting is specific to FBM listings. See also e6d620e4b200cadabb00ce37ab03289cfeb4ae58. This assumption was flawed: Amazon can keep the shipping group even after a listing switches to FBA, which can block stock synchronization. This commit uses the `fulfillmentAvailability` field from the Listings API instead. This field stores the available quantity for each fulfillment channel in which the listing is sold. When multiple fulfillment channels are present, the offer defaults to FBM so stock synchronization can continue. The `sale_amazon_channel_management` module can then be installed to manually select and disambiguate the channel. This commit also upgrades the patching method used to update the FBM stock to ensure user specific configuration aren't overriden during the synchronization. opw-6064896 opw-5152359 Forward-Port-Of: odoo/enterprise#114473
This update adds logging of Amazon's request IDs from the SP-API responses. Previously, these IDs were missing, making it harder for support teams to investigate issues with Amazon integrations. This change streamlines troubleshooting and improves response times for support requests.
Original PR description
Each response from Amazon's SP-API includes a request identifier used by their support team for debugging. This identifier was not previously logged, making support investigations more difficult. Forward-Port-Of: odoo/enterprise#114483
This update resolves an issue where attachments weren't always uploading correctly when navigating between records in the chatter. The fix ensures attachments are properly associated with the intended record, preventing data inconsistencies and improving the user experience. It’s a small but important improvement for reliable communication.
Original PR description
Currently, when uploading a bunch of attachments or a big one to the chatter, if you click on the pager (e.g. next) before the upload is complete, the attachments that have not yet been uploaded are uploaded to the next record. Due to the persistence of the Chatter component during record navigation and the fact that the `FileUploader` logic is tied to `state.thread`, an async callback that finishes after a record switch will attempt to update the currently active thread rather than the one that initiated the upload. With this change we tie uploader lifecycle to a specific record and ensure the completion callback only affects that record. task-5119290 Forward-Port-Of: odoo/odoo#261552
1 change
Resolved issues and error corrections
This update corrects an issue where the Swedish EC Sales Report exported to KVR (a key reporting format) displayed decimal values. The fix ensures that all report values are rounded to integers, aligning with Swedish reporting requirements and preventing data discrepancies. This improves the accuracy of reports for Swedish businesses.
Original PR description
**PROBLEM** EC Sales Report in Sweden needs to be reported with integer values. **STEP TO REPRODUCE** 1. Install l10n_se 2. On the se company, create a invoice with lines with EU tax and confirm it. 3. Go to Accounting/Reporting/EC Sale List and export to KVR. 4. Notices the KVR uses numbers with decimals places. opw-6045289 Forward-Port-Of: odoo/enterprise#115459 Forward-Port-Of: odoo/enterprise#114292
19 changes
Enhancements to existing features
This update enhances how Odoo listens for IoT events by simultaneously checking HTTP and WebSocket connections. This ensures faster response times, especially when the connection to the IoT box is weak, and prevents duplicate callbacks. The WebSocket timeout is also extended for more reliable event monitoring.
Original PR description
This commit changes the behaviour of `iot_http_service.onMessage`. Previously, it would listen only via HTTP to the `/event` route on the IoT box. Only if this caused a network error would it start to listen for websocket messages instead. In a scenario where the client has a weak connection to the IoT box but a good connection to the DB, this could result in delayed responses. After this commit, both the `/event` call and the websocket message subscription are done as soon as `onMessage` is called. The first one that returns a result will abort the other, preventing callbacks from being called twice. In addition, the websocket will no longer timeout after 6 seconds when being used to listen for events.
This update simplifies the payroll dashboard by consolidating multiple export code warnings into a single, relevant alert. Previously, users saw several unrelated warnings, creating confusion. Now, the dashboard provides clearer, more actionable feedback to payroll managers regarding time off export codes.
Original PR description
If applied, this commit will consolidate multiple export code alerts into a single warning that only triggers for work entry types actually used in the timeoff.
Why:
Previously, the payroll dashboard displayed up to four separate warnings regarding missing or incorrect export codes. This created unnecessary noise. By merging these into a single, context-aware alert, the dashboard remains clean and provides more actionable feedback to the payroll manager.
What:
Replaced the four separate export code validation checks with a single unified check.
Task-5979681This update allows businesses to choose the frequency of their 274XX withholding tax reports – either monthly or quarterly. The reporting frequency is determined by the company's withholding tax amount, with smaller companies needing quarterly reports and larger companies needing monthly ones. This change improves reporting flexibility and compliance.
Original PR description
The frequency of the 274xx form depends on the withholding tax amount the company has to pay. Basically small companies have to do it for each quarter while big companies must do it each month. This commit adds a setting to choose the frequency of the declaration between monthly and quarterly. task-5977723
This update enhances the security of Odoo's reporting add-ons by moving the whitelist configuration to the module's `__init__.py` file. This change restricts the use of potentially risky `safe_eval` functions, reducing the risk of unauthorized code execution within these add-ons. It's a proactive step to strengthen the security posture of our core reporting features.
Original PR description
Move the whitelist to the `__init__.py` of the modules. Task-6041164
This update adds a confirmation step before starting the ‘Test Print’ function in the pay run process. Previously, users were unsure of the action's impact and the process's completion. This change provides clarity and prevents accidental clicks, ensuring a smoother user experience.
Original PR description
Before this change, when a user clicked “Test Print” on a pay run, there was no confirmation or message. Users could not clearly understand what would happen or when the process was finished, except for a small loading icon in the browser. in this commit, - Add a confirmation step before starting the Test Print - This helps users understand the action and avoid accidental clicks task-6147784
This update enhances the reporting of pay runs by adding a new field that combines the counts of employees needing review and those with anomaly issues. This provides a more complete picture of outstanding payroll tasks, allowing for better management and reconciliation of pay runs.
Original PR description
Add `version_to_review_or_anomaly_count` field that sums both `version_to_review_count` and `version_anomaly_count`. task-6116368
This update expands the list of Mastercard codes used for expense reporting, streamlining the process for users. By adding broader MCC ranges, users no longer need to manually select individual company codes, improving efficiency and reducing the need for detailed configuration. This change ensures accurate expense tracking and simplifies reporting.
Original PR description
## [IMP] hr_expense_stripe: Add Mastercard MCCs Add extended MCC list defined by Mastercard, including three range codes to avoid specifying a thousand companies-specific codes The user only allow one code to allow every airline company instead of having to select them all ## [IMP] hr_expense_stripe: Force quotes in mcc files task-5486945
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
4 changes
Resolved issues and error corrections
This update fixes an issue where closed Helpdesk emails incorrectly displayed the ticket's database ID instead of its reference number. The change ensures that all customer communications consistently use the correct ticket reference, improving clarity and accuracy in tracking. This was a simple fix to a template configuration.
Original PR description
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the…
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the "Helpdesk: Ticket Received" mail template; Observe that the correct reference (100) is used. (Open the full composer to use "Load template") 4. Now send a message using the "Helpdesk: Ticket Closed" mail template and Observe that it displays the database ID (e.g., 1) instead of the reference. Cause: ------ `new_ticket_request_email_template` uses the ticket reference(`object.ticket_ref`) correctly. https://github.com/odoo/enterprise/blob/d39e291ba89ad018ba6f5f9591d280a834822f27/helpdesk/data/mail_template_data.xml#L18-L19 However, the `solved_ticket_request_email_template` uses the database ID (`object.id`) instead of the actual ticket reference (`object.ticket_ref`), leading to inconsistent references in customer communications. related commit: 3ed5273 Solution: --------- Update `solved_ticket_request_email_template` to use `object.ticket_ref` instead of `object.id` opw-6087466 Forward-Port-Of: odoo/enterprise#114852 Forward-Port-Of: odoo/enterprise#113932
This update fixes a restriction preventing users from deleting time off requests created after a payslip was validated. Previously, an error message blocked deletion, even if the time off wasn't impacting the payslip. This change ensures requests can be deleted regardless of payslip validation status, streamlining HR processes.
Original PR description
## Issue After confirming a payslip for a period, no time off request within that period can be deleted, even though requests are ont taken into account in the payslip if they are not approved. ##…
## Issue
After confirming a payslip for a period, no time off request within that period can be deleted, even though requests are ont taken into account in the payslip if they are not approved.
## 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 Time Off > Management > Time off, create a new time off allocation for Employee E:
- Date: anywhere during March
- **Do not validate the time off**
4. In Payroll > Payslips, create a new Off-Cycle for Employee E:
- Period: March 1 - March 31
- *Compute Sheet*, *Confirm* and *Mark as paid*
5. Try to delete the allocation created in step 3
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."_, even though the time off is not taken into account in the payslip.**
## Cause
The condition to raise the error message does not take into account the state of the leave:
https://github.com/odoo/enterprise/blob/2d2056766441157dc45ebc37b677841c44e5c513/hr_payroll_holidays/models/hr_leave.py#L195-L204
This commit completes https://github.com/odoo/enterprise/pull/114895, which was preventing the error from being raised when time off were generated after validating the payslip. The error should also not be raised for leaves that are not approved yet, as they did not impact the generation of the payslip.
(related to)
opw-6089990This update addresses a confusing issue where a Point of Sale session would remain active even after the user closed their browser tab. The change ensures that sessions are properly terminated when the user navigates away, improving the user experience and preventing potential data inconsistencies. This resolves a reported problem (opw-6114420).
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 resolves an issue where the Swedish EC Sales Report (KVR export) was incorrectly displaying decimal values. The fix ensures that all sales report values are rounded to integers as required by Swedish reporting regulations, preventing data discrepancies and ensuring accurate financial reporting.
Original PR description
**PROBLEM** EC Sales Report in Sweden needs to be reported with integer values. **STEP TO REPRODUCE** 1. Install l10n_se 2. On the se company, create a invoice with lines with EU tax and confirm it. 3. Go to Accounting/Reporting/EC Sale List and export to KVR. 4. Notices the KVR uses numbers with decimals places. opw-6045289 Forward-Port-Of: odoo/enterprise#115459 Forward-Port-Of: odoo/enterprise#114292
7 changes
Enhancements to existing features
This update ensures compliance with Belgian regulations regarding invoices issued using the 'Co-Contractant' tax scheme. It adds a required field for specifying the tax exemption reason and code, aligning Odoo with local legal requirements. This change is necessary for accurate financial reporting in Belgium.
Original PR description
It is mandatory in BE to add a legal note on the invoice when using a "Co-Contractant" tax task-5905176 Forward-Port-Of: odoo/odoo#251797
Resolved issues and error corrections
This update resolves a problem with the Intrastat CSV export in the Dutch localization module. The technical changes corrected an issue where commodity flow data was incorrectly formatted and a database refresh was added to ensure accurate export data. This ensures reliable reporting for Intrastat compliance.
Original PR description
Since the technical refactoring of intrastat in 18.0, the csv export in `l10n_nl_intrastat` seems broken. Here is the fixes done in this commit: 1. `Commodity flow` is supposed to be a single diggit (6 or 7) but an empty blank space was hidden. 2. Switching the condition on `country_origin_code` as it was the opposite 3. Add a `flush_all` before calling the report during the export, to be sure the database is up to date. opw-5799126
This update fixes an issue where the CustomGroupByItem dropdown in the search bar wasn't correctly styled on hover. The fix ensures the dropdown items appear as expected and also restores keyboard navigation functionality for this feature. This improves the overall user experience of the search functionality.
Original PR description
The CustomGroupByItem select was missing the `o-navigable` class, so the navigation system never registered it. On hover, it would not receive the `focus` class, which ensures proper styling of dropdown items. The fix also restores the ability to reach the CustomGroupByItem select with keynav. task-6108677
This update resolves an issue where self-billing invoices were incorrectly processed as standard invoices, specifically when generating UBL documents for Peppol. The change ensures the correct document type ('credit_note') is used, enabling proper self-billing functionality. A demo setup has also been added for testing.
Original PR description
To reproduce: - Activate Peppol - Activate selfbilling on your purchase journal - Create a Vendor Refund - Generate the UBL => The InvoiceTypeCode is 389, meaning it's considered a selfbilling invoice, not a selfbilling credit note. The issue is that we never put the document type of credit_note for selfbilling documents as it wasn't expected. invoice was, due to a else encompassing invoices and bills. Also add a handle demo to be able to create selfbilling documents in demo mode. opw-6132226 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260941
This update resolves a duplication issue in the French Profit & Loss report by removing a redundant account (6492) that was previously included alongside account 649. This ensures accurate financial reporting for French businesses using the Odoo Enterprise system.
Original PR description
This commit is an addon to this commit[[1]] where we tried to avoid duplicate accounts in the Profit And Loss report. The problem is that we don't exclude the separated account 6492 from the original one (649). This commit adds the removal of this account in the report formula. task-6053784 Here is the coverage: [Profit and loss account (FR) - Accounts Coverage Report (2).xlsx](https://github.com/user-attachments/files/27011824/Profit.and.loss.account.FR.-.Accounts.Coverage.Report.2.xlsx) The correct separation: <img width="837" height="485" alt="image" src="https://github.com/user-attachments/assets/ebe98976-f689-4389-866a-c9a0c8b50534" /> [1]: https://github.com/odoo/enterprise/commit/4587c49c4b220305652150d2f21a95fb7cfa188d Forward-Port-Of: odoo/enterprise#114858
This update resolves an issue where Amazon's stock synchronization was failing due to incorrect fulfillment channel data. The system now uses a new API field to accurately determine channel availability, defaulting to FBM when needed to ensure stock updates. Users can further manage channel selections with the `sale_amazon_channel_management` module.
Original PR description
During the upgrade from XML-based feeds to the new JSON Listings API for stock management, we chose to use Amazon's API to fetch a listing's fulfillment channel information. However, Amazon does not…
During the upgrade from XML-based feeds to the new JSON Listings API for stock management, we chose to use Amazon's API to fetch a listing's fulfillment channel information. However, Amazon does not provide a clear answer for a given listing. After some research, we assumed an offer was FBM when the listing contained a `merchant_shipping_group`, because this setting is specific to FBM listings. See also e6d620e4b200cadabb00ce37ab03289cfeb4ae58. This assumption was flawed: Amazon can keep the shipping group even after a listing switches to FBA, which can block stock synchronization. This commit uses the `fulfillmentAvailability` field from the Listings API instead. This field stores the available quantity for each fulfillment channel in which the listing is sold. When multiple fulfillment channels are present, the offer defaults to FBM so stock synchronization can continue. The `sale_amazon_channel_management` module can then be installed to manually select and disambiguate the channel. This commit also upgrades the patching method used to update the FBM stock to ensure user specific configuration aren't overriden during the synchronization. opw-6064896 opw-5152359 Forward-Port-Of: odoo/enterprise#114473
This update adds logging of Amazon's request IDs from SP-API responses. Previously, these IDs weren't recorded, making it harder for support teams to troubleshoot issues with Amazon integrations. Logging these IDs will significantly improve support efficiency and resolution times.
Original PR description
Each response from Amazon's SP-API includes a request identifier used by their support team for debugging. This identifier was not previously logged, making support investigations more difficult. Forward-Port-Of: odoo/enterprise#114483