Daily updates from Odoo
Thursday, March 19, 2026
15 changes · master
Resolved issues and error corrections
This update resolves a technical issue preventing the automatic download of employee data (EMPF) from the Hong Kong payroll module. The fix ensures the download functionality continues to operate correctly, avoiding errors and maintaining accurate payroll processing. This change is a critical fix to ensure seamless operations.
Original PR description
The downloading logic was not properly updated following https://github.com/odoo/odoo/commit/41fe2ebdb9cc37341362d7af829c087a5f72f9f1 . This causes the button to fail downloading with an errors 500, so we need to update it to ensure the feature keeps working. Task 6046824
This update ensures users can now see the PIN associated with virtual expense cards, which are increasingly used through digital wallets. Previously, this PIN was only visible for physical cards, causing potential transaction blocks for users. This change improves the user experience and ensures seamless payments.
Original PR description
Before this commit: - Currently, we show the PIN code for physical expense cards only, not for virtual cards. - In some case transactions are made via virtual cards (through digital wallets) also requires a PIN. The users will be blocked because they currently can't access this information. After this commit: - Now we show the PIN code for both physical and virtual cards. task-5926462 Forward-Port-Of: odoo/enterprise#107231
This update resolves an issue where users on Firefox couldn't hear incoming calls through their softphones. The fix ensures that incoming call tracks are processed immediately, regardless of the session's establishment status, restoring full functionality. This impacts Odoo Enterprise versions 19.1 and 19.2.
Original PR description
Steps to reproduce the bug: - Install voip and open the Odoo backend on Firefox - Setup your voip settings - Call your softphone number, thanks to your smartphone - Once the softphone opens with the…
Steps to reproduce the bug: - Install voip and open the Odoo backend on Firefox - Setup your voip settings - Call your softphone number, thanks to your smartphone - Once the softphone opens with the call, answer => The caller can hear you but you cannot hear the caller. This happens since [1]. Before that commit, we had something like "when the session is established, listen to tracks being added to the call and also set up the audio". After that commit, this became "when the session is established *or is establishing*, listen to tracks being added to the call... *but don't set up the audio otherwise*". The problem is that on Firefox, the timing is such as the tracks of incoming calls are being added just before the session is establishing (or established), meaning we listen to tracks being added too late. Note that commit [1] was further diluted afterwards by commits like [2] (doing stuff with the audio before establishing) and [3] (which simply removed the "established" part, relying on "establishing" being done). Later on, commit [4] prepared some other work by moving and improving things around and it actually fixed this issue here by chance. What did the trick is listening to tracks being added from the start: as soon as SIP.js notifies that the remote stream exists. This commit fixes the issue in impacted versions (19.1 and 19.2) by backporting the relevant part: listening to tracks being added as soon as possible and not once establishing/established. A test was added. [1]: https://github.com/odoo/enterprise/commit/d24d7f3406ca47e7ac529d69957b0ad481d553bf [2]: https://github.com/odoo/enterprise/commit/71d78810ae7f6c9169912276da18e04ad4f7bef0 [3]: https://github.com/odoo/enterprise/commit/942f32316ab02d8c739fe7fdd5ec2bdde472a68e [4]: https://github.com/odoo/enterprise/commit/33fc327c1c74ee874d546a98879dbbf468809850 task-5902700 Forward-Port-Of: odoo/enterprise#111025 Forward-Port-Of: odoo/enterprise#110833
This update adds a crucial test to ensure the correct formatting of payment data within the Odoo Enterprise system. A previous oversight during a software update caused a reliance on a now-missing field, and this fix prevents potential errors in payment processing. This ensures data integrity and reliable payment functionality.
Original PR description
This commit safeguards the `_prepare_payment_data` method. Reason: We were using a field that no longer exists due to an oversight during a FW and having no tests to catch it. Fix here https://github.com/odoo/enterprise/pull/110266 No task ID Forward-Port-Of: odoo/enterprise#110338
This update optimizes the Point of Sale system to use less memory, particularly when handling large product catalogs. The changes result in a significant reduction in memory consumption across browsers (Chrome, Safari, Firefox) when loading a large number of products, leading to a smoother and more responsive user experience.
Original PR description
This commit reduces memory consumption in the POS, especially when loading a large number of products. Reactivity usage has been optimized, particularly for product data. Additional optimizations were implemented to handle large product sets more efficiently. Metrics 5,000 products • Chrome: 440 MB → 75 MB • Safari / Firefox: 1 GB → 250 MB 20,000 products • Chrome: 1.5 GB → 135 MB • Safari / Firefox: 4 GB → 300 MB Community PR: https://github.com/odoo/odoo/pull/249542 Forward-Port-Of: odoo/enterprise#110223 Forward-Port-Of: odoo/enterprise#107978
This update resolves a problem preventing invoices generated with the l10n_gt_edi module from being correctly sent to the tax agency. The issue stemmed from incorrect encoding of data transmitted as XML, which was restricted. This fix ensures invoices are successfully submitted, improving compliance and preventing potential delays in tax reporting.
Original PR description
With l10n_gt_edi and the credentials: - Create an invoice and try to send it to the tax agency. You will get the following traceback: Only base64 data is allowed (after 41fe2eb) opw-6043140
This update corrects a bug preventing the system from accurately checking if invoices meet EC Sales List requirements for intra-EU customers. The fix ensures that warnings are triggered correctly when invoices with 'Intra-Community' fiscal positions are issued, improving compliance and reporting accuracy. This impacts how sales data is reported for European customers.
Original PR description
The EC Sales List return check "Only intra-EU customers" is reviewed when an invoice that match the condition for the warning same_country is present. To Reproduce: - Create a company in Belgium - Create a customer in Belgium with "Intra-Community" as a Fiscal Position - Create an invoice with this customer (in the previous month of the current month, for example February if the current date is in March - Open the Tax Returns - Open the EC Sales List Return - The Only intra-EU customers check is reviewed when it should show an anomaly. Forward-Port-Of: odoo/enterprise#107137
This update resolves an error that occurred when users attempted to modify the employee associated with a salary simulation. The fix ensures the system correctly handles versioning of salary data, preventing a runtime error. This improves the stability and usability of the salary simulation feature.
Original PR description
Currently, an error occurs when user tries to change simulation employee in salary simulation. Steps to replicate: - Install `hr_contract_salary_payroll` with demo. - Open any employee (e.g.- Abigail…
Currently, an error occurs when user tries to change simulation employee in salary simulation.
Steps to replicate:
- Install `hr_contract_salary_payroll` with demo.
- Open any employee (e.g.- Abigail Peterson).
- Click `Simulation` > Change `Yearly Employer Cost` to `Gross Per Month`.
- Try to change the Employee, error will occur.
Error:
```
File '/home/odoo/odoo19/enterprise/hr_contract_salary_payroll/models/hr_contract_salary_offer.py', line 157, in _compute_offer_values_from_template
version = offer._get_version()
^^^^^^^^^^^^^^^^^^^^
File '/home/odoo/odoo19/enterprise/hr_contract_salary/utils/hr_version.py', line 39, in hr_version_context_wrapper
raise RuntimeError(
RuntimeError: Method '_get_version' must be called within a savepoint context. Use `hr_version_context(...)` context manager before calling this method.
```
Cause:
- The method `_get_version()` has the decorator `@requires_hr_version_context()` which makes the method to be callable within a savepoint context for `hr.version` [1] i.e. it can only be called within a `hr_version_context()` block.
- As here the method was not called under the `hr_version_context()`it raises an error from [here].
Solution:
- Used the `hr_version_context()`block instead of savepoint (similar to [this]).
[this]: https://github.com/odoo/enterprise/pull/108005/changes#diff-97aeb940d5058abc95cb617e5a2015320c37e8d50a15cffc2c08eac1839ac16dL98-R100
[here]: https://github.com/odoo/enterprise/blob/626598abe4fdbc8391a428928e197e7735cbb298/hr_contract_salary/utils/hr_version.py#L39-L42
[1]: https://github.com/odoo/enterprise/blob/626598abe4fdbc8391a428928e197e7735cbb298/hr_contract_salary/utils/hr_version.py#L14-L17
sentry-7335824597
Forward-Port-Of: odoo/enterprise#111090This update resolves an issue where the Documents Activity view became unusable after exiting Studio, preventing users from filtering or adding new activities. The fix ensures the view correctly loads necessary data, restoring full functionality and preventing frustrating user experiences.
Original PR description
Problem: When returning to the Documents Activity view after closing Studio, the view becomes unusable with an error that `folderId` is `undefined`. Users are forced to refresh the page or switch…
Problem: When returning to the Documents Activity view after closing Studio, the view becomes unusable with an error that `folderId` is `undefined`. Users are forced to refresh the page or switch views to fix it. Specifically: - Filters can no longer be selected. - Adding new activities throws UI errors (even if technically successful). Cause: The `getSelectedFolder` method returned undefined because the `searchPanel` logic was skipped. The Activity view does not display the `searchPanel`, so the model failed to run `_fetchSections` which retrieves the data used by `getSelectedFolder`. Under normal circumstances, the view relies on data already loaded by the Kanban or List views, but that data is unavailable here. Solution: - Force the search model to load the data explicitly, ensuring the view initializes correctly regardless of the `searchPanel` visibility. We kept the dependency upon `_fetchSections` rather than removing it, as it is required by the `search_model` to maintain other features like `breadcrumbs`. - Add a test to verify the fix and prevent regression. Co-authored-by: Pierre-Yves Dufays <pydu@odoo.com> Co-authored-by: Charlier Florian <flch@odoo.com> Forward-Port-Of: odoo/enterprise#110471
This update resolves an issue where the Odoo payroll system would generate errors if only the core payroll module was installed. The fix ensures that salary rules correctly utilize a key field, preventing these errors and improving stability. This change primarily impacts Mexican payroll functionality.
Original PR description
The `l10n_mx_min_wage_zone` field is used in `l10n_mx_hr_payroll`, but it was originally defined in `l10n_mx_hr_payroll_account_edi`. This causes errors when a user only installs the `l10n_mx_hr_payroll` module, as the field is missing. Fix salary rules in `l10n_mx_hr_payroll` to use the `zsmg` value and avoid tracebacks when the EDI module is missing. In `l10n_mx_hr_payroll_account_edi`, override these rules to use the `l10n_mx_min_wage_zone` field instead. Related commit: https://github.com/odoo/enterprise/commit/11bb6db4884083b3f48582b749c01ae75a09cf66 target: saas-19.2 task-6047772 Forward-Port-Of: odoo/enterprise#110985
This update resolves a bug where subscriptions were incorrectly reopening after a credit note payment. The fix prevents the system from reopening subscriptions when a credit note payment (specifically 'out_refund' invoices) is processed, ensuring subscriptions remain in the correct churned state. This improves subscription management accuracy.
Original PR description
Steps to reproduce: ------------------------------ 1. Install Subscription module 2. Create a new subscription and confirm it 3. Create an invoice from the subscription. * Register a payment and…
Steps to reproduce: ------------------------------ 1. Install Subscription module 2. Create a new subscription and confirm it 3. Create an invoice from the subscription. * Register a payment and ensure the invoice is in the Paid state. 4. Go back to the subscription and close it with any reason 5. Open the related invoice. * Create and Confirm Credit Note. * Register a payment for the credit note. 6. Go back to subscription Observation: ------------------------------ The subscription is automatically set back to `In Progress` even though it was previously churned. Issue: ------------------------------ The method `_reopen_paid_churned_subscription` reopens churned subscriptions when an invoice is set to `in_payment` or `paid`. There was no check to exclude refund moves (`move_type = 'out_refund'`), causing the subscription to be reopened when a credit note is paid. Solution: ------------------------------ Add a condition to exclude refund invoices from the reopening logic opw-5947999 Forward-Port-Of: odoo/enterprise#108487
This update fixes an issue where bank statement reconciliation in foreign currency journals incorrectly used invoice currency instead of payment currency. When reconciling batch payments, the system now accurately converts amounts to the payment's original currency, ensuring correct bank statement balances. This improves the reliability of financial reporting.
Original PR description
When reconciling a batch payment in a foreign currency journal where payments do not have outstanding accounts, the resulting bank statement lines could use the wrong currency for balance conversion. Steps to reproduce: - Create a journal in a foreign currency (e.g., CHF) - Create two invoices in company currency (e.g., EUR) - Pay both invoices using the foreign journal - Create a batch payment for these payments. - Reconcile a bank statement line against this batch payment. Issue: Reconciliation make use of the payments amount in the wrong currency. Analysis: During the reconciliation of a batch payment, the system creates new amls from the payment values. However, the currency of the computed amount should be the source payment currency, and not the invoice line currency. opw-5887218 Forward-Port-Of: odoo/enterprise#110381 Forward-Port-Of: odoo/enterprise#108745
This update resolves an issue where users couldn't successfully create events using the Quick Create feature within the Gantt view for Dental Care appointments. The fix ensures that the Quick Create functionality now works as expected, streamlining the process of scheduling appointments. This improves usability for our dental care clients.
Original PR description
Steps to reproduce: - Go to Appointments - Dental Care -> Gantt - Quick Create an event => bug task-6037337
This update adds validation for employee identification IDs within salary configuration settings. Previously, this caused errors when contracts were created, leading to delays. The change ensures data integrity and prevents errors during the contract signing process, streamlining workflow.
Original PR description
Previously, the `identification_id` field could be saved in the salary configuration version model without any validation. However, when the contract is signed by the employer, an employee record is created from this version record. At that moment, a validation error occurs because the `identification_id` field is validated on the employee model in the Belgian localization. To prevent this late validation error, validation for `identification_id` has been added in the salary configuration. I added custom validation`_fieldValidators` but validating fields separately caused duplicate notifications when the field was empty (one from the required field check and another from the localization validator). The validation logic was therefore integrated so both checks work together without producing duplicate errors, while still preserving the required field highlighting. Task Id: 6025668
This update fixes an issue where subscription products weren't displaying prices with tax, even when the website setting was enabled. The change ensures that prices accurately reflect tax-inclusive amounts by correctly considering company IDs when calculating taxes. This improves the accuracy of subscription pricing for customers.
Original PR description
subscriptions Despite enabling the website setting to display tax-inclusive prices, subscription products show prices without tax when a recurring pricelist is configured. In `_get_sales_prices`, the product’s company ID is compared to the website’s company, but products visible to all have a false company ID, and products assigned to a parent company retain the parent’s company ID. As a result, when the product’s company ID does not match the website’s company ID, no taxes are applied.Instead, _filter_taxes_by_company should be used to determine whether the company can access the product’s tax_id. opw-5222411 Forward-Port-Of: odoo/enterprise#102102 Forward-Port-Of: odoo/enterprise#100662