Thursday, April 9, 2026
14 changes · 17.0
Resolved issues and error corrections
This update fixes an issue where credit notes were incorrectly displayed with positive amounts in Thai tax reports. The fix automatically reverses the sign of the amount if the transaction is a refund, ensuring accurate reporting of credit note values. This ensures compliance with Thai tax regulations.
Original PR description
# How to reproduce - Install the l10n_th module - Use the demo TH company - Ensure you have the demo invoices and credit notes associated to that company - Go to the Tax Report - Select Tax Report…
# How to reproduce - Install the l10n_th module - Use the demo TH company - Ensure you have the demo invoices and credit notes associated to that company - Go to the Tax Report - Select Tax Report (TH) - Click on "Sales Tax Report (xlsx)" # The problem The Credit Notes' Total Amount, Total Excl and Vat Amount are positives. They should be negative instead. The same issue appear for "Purchase Tax Report (xlsx)". This issue also concerns Credit Notes created manually in the Journal Entries # Why The logic for the sign of the value fields in the reports is the following : ```py sign = move.reversed_entry_id.payment_state == 'partial' and -1 or 1 ``` This is unreliable because a Credit Note will not always have a reversed_entry_id associated or if it has one, it's payment_state may change A refactor of theses reports has been made for versions 19.0+ but it seems too big to backport (https://github.com/odoo/enterprise/pull/75645/changes) Instead, we just check if the current move's type is a refund. If yes, we reverse the sign. opw-6006720
This update corrects a bug where negative discounts were incorrectly shown in Field Service reports. The fix ensures that negative discount values are properly handled during report generation, preventing inaccurate reporting and improving data clarity. This resolves an issue impacting sales reporting accuracy.
Original PR description
Steps to produce: --- - Install the `Field Service` module. - Enable discounts and Worksheets from settings. - Navigate to `Field Service > Open task > Add product`. - Open related sale order and `apply negative discount`. - Return to the task > print the `Field Service Report`. Issue: --- - Negative discount is printed in the report. Root cause: --- - The report generation logic does not check for negative discounts. As a result, negative discount values are being rendered as-is in the generated PDF. Solution: --- - Added a condition to handle negative discounts during report generation. Before: --- <img width="774" height="107" alt="image" src="https://github.com/user-attachments/assets/bb4bf646-1462-4f19-b977-3450f9a5f100" /> After: --- <img width="755" height="110" alt="image" src="https://github.com/user-attachments/assets/1bd2a68d-1fb8-4b5a-97ff-7ef7098d222c" /> community PR: https://github.com/odoo/odoo/pull/255735 opw-6061568
This update fixes a labeling error in the Dutch Profit & Loss report. The 'Cost of Goods Sold' and 'Cost of Sales' labels were reversed, misrepresenting the accounting definitions. This change ensures the report accurately reflects Dutch accounting standards and provides correct financial reporting.
Original PR description
**Steps to reproduce:** 1. Install l10n_nl_report. 2. Go to Accounting → Configuration → Accounting Reports. 3. Open Profit and loss report (tags). 4. Click on Cost of Goods Sold or Cost of Sales and…
**Steps to reproduce:** 1. Install l10n_nl_report. 2. Go to Accounting → Configuration → Accounting Reports. 3. Open Profit and loss report (tags). 4. Click on Cost of Goods Sold or Cost of Sales and check the related codes. **Issue:** In the Dutch Profit and Loss report, the names "Cost of Goods Sold" and "Cost of Sales" are swapped. Currently: - Cost of Goods Sold is linked to code: NL_SALE - Cost of Sales is linked to code: NL_COGS According to Dutch accounting standards: - Cost of goods sold should represent direct costs ([mapping to NL_COGS / 7xxx](https://github.com/odoo/odoo/blob/master/addons/l10n_nl/data/template/account.account-nl.csv#L288-L317)). - Cost of sales should represent indirect selling costs ([mapping to NL_SALE/45xx](https://github.com/odoo/odoo/blob/master/addons/l10n_nl/data/template/account.account-nl.csv#L249-L260)) **Cause:** The names were incorrectly applied, leading to reversed definitions between Cost of Goods Sold and Cost of Sales. See: https://www.investopedia.com/terms/c/cogs.asp **Solution:** Swap the definitions so that: - Cost of Goods Sold is correctly linked to NL_COGS - Cost of Sales is correctly linked to NL_SALE Related community PR : https://github.com/odoo/odoo/pull/245185 **opw-5407885**
This update fixes an issue where translated strings in the Odoo Enterprise module didn't consistently reflect changes made to group names. By adding specific identifiers, the system now correctly exports and translates these overridden group names, ensuring accurate translations across the platform. This improves the consistency of our software's language.
Original PR description
The `account_accountant` module overrides the English name of several `res.groups` records owned by `account`. Without `account_accountant`-scoped XMLIDs for those records, the overridden names are never exported into this module's POT file. At runtime, `account`'s translations are loaded instead, which no longer match the overridden English source strings. We fix this by registering additional XMLIDs under `account_accountant` so the overridden names get translated independently.
This update resolves an issue where material resources with assigned roles were incorrectly displayed when filtering by employees in the Planning app. The fix improves the filter domain to accurately exclude these resources, ensuring that only employee-type resources are shown. This enhances the accuracy of the Planning view and simplifies resource management.
Original PR description
Steps to Reproduce: 1. Open the Planning app. 2. Go to Configuration -> Materials. 3. Set a role on either the demo material resource laptop or toolkit. 4. Go back to the Planning view. 5. Apply the view filter employee (filter by Employees). Issue: The material resource with a role should not be visible, but it is still present. Current behaviour: When filtering the Planning view by Employees, material resources with an assigned role remain visible. Expected behaviour: Material resources with an assigned role should be excluded from the Planning view when filtered by Employees — only employee-type resources and resources on which role is not set should appear. Fix: Improved the filter domain so unnecessary data are excluded. Task-4526989
This update fixes an issue where the Helpdesk return wizard incorrectly displayed receipts as available pickings. The change specifically excludes receipts from the wizard's domain, ensuring that only deliveries are shown, streamlining the return process for users. This resolves a bug present in versions prior to 19.0.
Original PR description
Steps to reproduce: - 1. Create a Sale Order for a customer and fully process the delivery. 2. Create a Helpdesk ticket for that customer. 3. From the ticket, click the 'Return' button to open the wizard. 4. Select the sales order or open the 'Delivery to Return' dropdown. Issue: - The list of available pickings shows both receipts and deliveries operations. Fix: - The domain for the return wizard is updated to explicitly exclude receipts. Note: - This bug is present until saas-18.4. From 19.0 onward it is already fixed in this PR: https://github.com/odoo/enterprise/pull/90371 task-5075205
This update corrects a bug that prevented Peppol invoices from importing correctly. Specifically, it stops users from changing the type of Peppol journal to something other than 'purchase,' which was causing import failures. This ensures smooth and reliable processing of Peppol invoices.
Original PR description
Prevent changing a Peppol journal to a non-purchase type, to avoid import errors when receiving Peppol invoices. Step to reproduce: - Setup a company with Peppol - Change the Peppol reception journal type to non-purchase - Try to run Peppol cron to import invoice, it fails with "Cannot create a purchase document in a non purchase journal" opw-6071992 opw-6064502 Forward-Port-Of: odoo/odoo#256823
This update fixes a labeling error in the Dutch Profit & Loss report, ensuring 'Cost of Goods Sold' and 'Cost of Sales' are correctly associated with their respective accounting codes according to Dutch standards. This ensures accurate reporting and compliance with local regulations.
Original PR description
**Steps to reproduce:** 1. Install l10n_nl_report. 2. Go to Accounting → Configuration → Accounting Reports. 3. Open Profit and loss report (tags). 4. Click on Cost of Goods Sold or Cost of Sales and…
**Steps to reproduce:** 1. Install l10n_nl_report. 2. Go to Accounting → Configuration → Accounting Reports. 3. Open Profit and loss report (tags). 4. Click on Cost of Goods Sold or Cost of Sales and check the related codes. **Issue:** In the Dutch Profit and Loss report, the "Cost of Goods Sold" and "Cost of Sales" names are swapped. According to Dutch accounting standards: - Cost of goods sold should represent direct costs ([mapping to NL_COGS / 7xxx](https://github.com/odoo/odoo/blob/master/addons/l10n_nl/data/template/account.account-nl.csv#L288-L317)). - Cost of sales should represent indirect selling costs ([mapping to NL_SALE/45xx](https://github.com/odoo/odoo/blob/master/addons/l10n_nl/data/template/account.account-nl.csv#L249-L260)) **Cause:** In [PR : #157362 ](https://github.com/odoo/odoo/pull/157362/files#diff-1ba769f7e47f7a941e45b6c662ec2a0558272e9fe8bdbfed368f261c8e43aa5dR55), The names were swapped. While the technical codes and expressions correctly targeted the intended account ranges **Solution:** Updated account_tag_7 and account_tag_10 to match corrected naming convention. Related Enterprise PR : https://github.com/odoo/enterprise/pull/103150 **opw-5407885**
This update corrects a tax-related issue in invoices where multiple GmbH names appeared in the delivery address field. The fix ensures invoices clearly identify the correct recipient, preventing potential input tax deduction rejections by tax authorities. It updates the display name to show only the primary delivery address.
Original PR description
If two GmbH (Ltd.) names appear in the invoice address field (e.g., "Proveco GmbH, Test GmbH"), the invoice is problematic from a tax perspective, as two GmbH are considered separate legal entities, and it is not clearly identifiable who the actual recipient of the service is. Consequently, the tax office can refuse the input tax deduction if the invoice recipient is not clearly identifiable. Steps: - Create a company contact (X) and a delivery address (Y) - Create an invoice for X, delivery address will be Y - Open preview -> The delivery partner's display name is 'X, Y', it should be only 'Y' Fix: Adding a context key to the invoice document to conditionally display the parent contact name in the display_name Ticket [link](https://www.odoo.com/odoo/project.task/5900567) opw-5900567
This update resolves an issue where Chrome subprocesses weren't fully terminated, leading to potential problems like lingering network connections and directory issues. The fix ensures all Chrome processes are closed, preventing these disruptions and improving system stability. This is a critical fix to avoid unexpected behavior.
Original PR description
It's not clear when it started to happen (possibly forever), but apparently waiting for the main chrome process to terminate does not ensure all subprocesses are also terminated. Depending how long these subprocesses stick around, this can lead to: - remaining http or websocket requests - the inability to delete or re-creation of the user directory - possibly other confusing situations Update the chrome termination flow to make sure every subprocess is gone before proceeding to the next step. Kinda-sorta backport of #258062
This update fixes an issue where product names on reprinted invoices didn't automatically translate based on the customer's language. The change updates the invoice report template to dynamically use the product's displayed name, ensuring accurate translations after language changes. This improves the customer experience by presenting invoices in the correct language.
Original PR description
**Problem:** When a customer's language is changed and an invoice is reprinted, all invoice fields translate correctly except for product names and descriptions, which remain in the original…
**Problem:** When a customer's language is changed and an invoice is reprinted, all invoice fields translate correctly except for product names and descriptions, which remain in the original language. **Steps to reproduce:** 1. Create an invoice for a customer with English language 2. Post the invoice (product names appear in English) 3. Change the customer's language to French 4. Reprint/download the invoice PDF 5. Observe that product names still appear in English instead of French **Current behavior:** Product names remain in the original language when reprinting invoices after changing the customer's language. **Expected behavior:** Product names and descriptions should dynamically translate based on the customer's current language setting when the invoice is reprinted. **Cause of the issue:** The invoice report template uses `line.name`, which is a stored text field frozen at invoice creation time. This field contains the product name in whatever language was active when the line was created and does not update when the partner's language changes. When rendering the PDF, this frozen text is displayed regardless of the current language context. **Fix:** Use `product_id.display_name` instead of `line.name` for product-linked invoice lines. The `display_name` field is computed dynamically and respects the current language context during PDF generation. For lines without a product (manual entries, notes, sections), fall back to `line.name` to preserve existing behavior. This allows product names to translate on reprint while maintaining compatibility with non-product lines. opw-5887170
This update resolves a technical issue during the migration of accounts for the Danish localization (l10n_dk) module. The previous code incorrectly assumed all accounts had a 6-character code, causing errors. This fix allows the system to properly handle accounts without a code, ensuring accurate accounting and reporting for Danish businesses using Odoo.
Original PR description
From https://github.com/odoo/odoo/pull/256541.
```yml
File "/home/.../odoo/addons/l10n_dk/migrations/1.4/end-migrate.py", line 102, in migrate
if len(account.code) < 6:
TypeError: object of type 'bool' has no len()
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an issue where product names on invoices weren't always displayed in the correct language when using child contacts. The change ensures that invoice line labels are translated based on the language of the selected invoice contact, providing accurate and consistent translations across multilingual setups. This improves the user experience for international customers.
Original PR description
### Issue before this commit: When creating an invoice using the child contact of a parent contact that has a different language with respect to the father, the label of the invoice line was not…
### Issue before this commit: When creating an invoice using the child contact of a parent contact that has a different language with respect to the father, the label of the invoice line was not always displayed in the child contact language but in the father's contact language. ### Steps to reproduce the issue: 1. Activate at least 2 languages (X and Y) 2. Create a product and set the translation for that product in the activated languages 3. Create a Contact with the language X 4. Create a child contact (invoice adress type) for that contact with language Y 5. Create a new invoice setting the customer as the child contact 6. Add the product you created 7. See the label is displayed in the language of the parent contact ### Cause of the issue: The computation of the invoice line name relied on line.partner_id.lang. However, the partner_id of the move line is automatically set to the commercial partner that can be different (can be the father's contact) to the contact used on the invoice. As a result, the product description was translated using the wrong language. ### Reason to introduce the fix: To ensure that invoice line labels are correctly translated according to the language of the selected invoice contact, the computation now uses the language of move_id.partner_id instead of line.partner_id. This guarantees consistent and expected behavior in multilingual environments, especially when using different contacts under the same commercial partner. opw-5955875 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that negative discounts applied to sales orders are consistently displayed in both the portal preview and generated PDF reports. Previously, the PDF reports showed negative discounts while the portal preview did not, due to a discrepancy in how discounts were filtered. This change aligns the report output with the portal view for a more accurate representation of sales data.
Original PR description
Steps to produce: --- - Install the `Sales` module. - Enable discounts from settings. - Create a Sale Order with a negative discount on an order line. - Preview the Sale Order and click on the view…
Steps to produce: --- - Install the `Sales` module. - Enable discounts from settings. - Create a Sale Order with a negative discount on an order line. - Preview the Sale Order and click on the view details button. Issue: --- - Negative discount values are not shown in the preview (portal view), but they are displayed in the generated PDF. Root cause: --- - At [1], the portal template includes a condition to display discounts only when they are greater than 0, while the report templates lack this check, leading to inconsistent behavior. Solution: --- - Applied the same condition in the report templates to align the PDF output with the portal preview behavior. Before: --- <img width="787" height="136" alt="image" src="https://github.com/user-attachments/assets/d32311be-4aec-4d6f-b905-d5e52f712ba4" /> After: --- <img width="775" height="139" alt="image" src="https://github.com/user-attachments/assets/2614a8ad-dca6-49ca-b720-5c234aa91cf6" /> [1]https://github.com/odoo/odoo/blob/0f463fd247d2f5da79d6ec2b6bec18774f6f600b/addons/sale/views/sale_portal_templates.xml#L539 Enterprise PR: https://github.com/odoo/enterprise/pull/111916 opw-6061568