Friday, June 19, 2026
18 changes · saas-19.3
New functionality added to Odoo
This update incorporates support for the states of Tajikistan, Turkmenistan, Kyrgyzstan, Armenia, and Kazakhstan, aligning with international ISO 3166-2 standards. This change improves data accuracy and consistency by displaying state names instead of codes within address fields. This update is considered an improvement for our global user base.
Original PR description
Added the states of Tajikistan, Turkmenistan, Kyrgyzstan, Armenian, and Kazakhstan to align with official ISO 3166-2 standards. In addition change their address format of the country to show state name instead of state code. task-6237707 task-6237595 task-6237473 task-6237440 task-6237284 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269091
Enhancements to existing features
This update changes the unit of measure for the 'Flour' product in the Point of Sale system to kilograms. This adjustment is necessary to properly configure product weighing, particularly for compliance with the l10n_eu_iot_scale certification, ensuring accurate inventory tracking.
Original PR description
This small PR sets the "Flour" product's units of measure to kilograms. This helps to configure the weighing of the product, especially for the l10n_eu_iot_scale cert Forward-Port-Of: odoo/odoo#270508
Resolved issues and error corrections
This update addresses a reported issue where users could join live chat conversations that had already ended. The fix hides the 'join' button when a conversation is marked as finished, improving the user experience and preventing unnecessary attempts to engage. This ensures a cleaner and more accurate representation of available chat channels.
Original PR description
Feedback came from our live chat team. It is possible to join a conversation despite the conversation having ended already. so from now the **join button will be hidden** if the livechat is ended. task-6314128 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a bug where the duration field in Odoo was incorrectly returning 0 when using formulas. Now, the field accurately calculates duration and displays an error message if the input is invalid, ensuring accurate time tracking. This improves data reliability and prevents miscalculations.
Original PR description
Before this commit, using a formula in the duration field was returning 0. Now, it resolves the formula. TASK-6150460 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263301
This update fixes an issue where an incorrect journal entry was inflating the reported amount of liabilities on the Balance Sheet in the French financial reporting module. The change ensures that a specific account (45) is not incorrectly categorized as a 'borrowing,' improving the accuracy of financial reporting. This resolves a discrepancy identified in the reporting.
Original PR description
1. Create a journal entry with: -> 455100 Partners/Associates - Current Accounts - Principal → Credit -> 512001 Bank → Debit 2. Navigate to Accounting → Reporting → Balance Sheet. -> Observe that the amount of the journal entry appears twice in the Balance Sheet: 1. Under Borrowings and Similar Liabilities 2. Under Partners' Current Accounts 45 accounts should not be included under borrowings and similar liabilities opw-6271305
This update resolves an issue preventing users with Sales access from inserting data into Quotation templates through the spreadsheet management feature. The change adds a setting to ensure the necessary permissions are recognized, now allowing seamless data entry.
Original PR description
Current behavior before PR: - The `can_insert_in_spreadsheet` session flag was not set by the spreadsheet_sale_management module. - Users with proper Sale access rights still could not insert into Quotation templates. Desired behavior after PR is merged: - Added logic to set `can_insert_in_spreadsheet` when the module is installed and the user has the required access rights. Task: [5960761](https://www.odoo.com/odoo/project/2328/tasks/5960761) Forward-Port-Of: odoo/enterprise#120903 Forward-Port-Of: odoo/enterprise#108674
This update improves how our connected scales communicate tare status to the Odoo frontend. Previously, the system wasn't reliably indicating when a scale was in tare mode. Now, the frontend receives this information, ensuring accurate weight readings and a better user experience for weighing operations.
Original PR description
See: https://github.com/odoo/enterprise/pull/119960 Before this commit, there was no way for the frontend to know if the tare function on the connected scale was active, despite the driver keeping track in the `tare_mode` variable. After this commit, we optionally send the `tare_mode` alongside the weight when `read_once` is called. By default it still returns just the weight for backwards compatibility. The `tare_mode` is now also updated by the status command, allowing it to be set as soon as tare is pressed, instead of after weight is applied. task-6273412 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269211
This update adjusts the checksum within the EU IoT Scale Certification module to align with recent changes in the core Odoo system. This ensures compatibility and stability following a related update in Odoo itself, preventing potential issues with data integrity. It's a routine maintenance task.
Original PR description
This commit simply adjusts the checksum to align with the changes in odoo/odoo#269211. task-6273412 Forward-Port-Of: odoo/enterprise#120954
This update resolves an issue where UBL invoices with embedded PDF attachments caused import errors due to unexpected whitespace in the attachment data. The change adjusts how attachments are processed, ensuring compatibility with newer Odoo versions and preventing import failures.
Original PR description
Steps to reproduce: 1. Go to [Accounting -> Vendors - Bills] and click Upload 2. Import a UBL BIS3 XML invoice containing an embedded PDF attachment in `AdditionalDocumentReference/Attachment/EmbeddedDocumentBinaryObject` where the content contains internal line breaks or spaces (file available in ticket attachments). Issue: `Error during import: Only base64 data is allowed` Why this happens: Following changes in v19.3 (7662537c878ffe58ed5c7248e4114062c333312b), the import logic in `_import_attachments` was changed to use the `raw` field instead of the `datas` field when creating the ir.attachment record. The `raw` field takes the raw bytes directly, whereas `datas` previously stored the base64 computed version of `raw`, which handled whitespace characters. Some XML files produce `EmbeddedDocumentBinaryObject` content with internal newlines. These were harmless in older versions but now cause a crash. opw-6271352
This update corrects a technical error that prevented the system from correctly calculating virtual leave durations. The fix ensures that the system properly utilizes resource calendars when generating reports, resolving a singleton error and improving the accuracy of leave calculations. This ensures accurate reporting of employee availability for holiday-related tasks.
Original PR description
resource_calendar was not being when calculting virtual leaves, it leads to a singleton error here:…
resource_calendar was not being when calculting virtual leaves, it leads to a singleton error here:
https://github.com/odoo/odoo/blob/11b0195dddad5055fc33fa3e28b2d2ca60f24935/addons/l10n_fr_hr_holidays/models/hr_leave.py#L163
```
File "/home/odoo/src/odoo/saas-19.2/odoo/orm/models.py", line 519, in _table_sql
table_query = self._table_query
^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.2/addons/hr_holidays/report/hr_leave_employee_report.py", line 40, in _table_query
self._compute_leave_duration(report_records)
File "/home/odoo/src/odoo/saas-19.2/addons/hr_holidays/report/hr_leave_employee_report.py", line 94, in _compute_leave_duration
leaves_durations = virtual_leaves._get_durations(additional_domain=[('holiday_id', 'not in', leave_ids)])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.2/addons/l10n_fr_hr_holidays/models/hr_leave.py", line 160, in _get_durations
while not leave.resource_calendar_id._works_on_date(date_start):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.2/addons/resource/models/resource_calendar.py", line 877, in _works_on_date
self.ensure_one()
File "/home/odoo/src/odoo/saas-19.2/odoo/orm/models.py", line 5253, in ensure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: resource.calendar()
```
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
Forward-Port-Of: odoo/odoo#266084This update fixes alignment issues within the Timesheet Assistant, specifically in the 'By Project' and 'Chronological' views. It ensures that long descriptions don't cause text to wrap incorrectly, and adds a consistent margin to the section indicating no billable time was recorded. This improves the overall clarity and usability of the timesheet reporting.
Original PR description
# [FIX] timesheet_grid: alignment issues in assistant This commit resolves the following alignment issues in the Timesheet Assistant: - View "By Project", the time wraps if description too long - View "Chronological", the time wraps if descriptions too long and project / task is not truncated - No timesheet recorded does not have a margin start # [FIX] sale_timesheet_enterprise: alignment issues in assistant This commit adds margin start on the "No (non-)billable time recorded" information. task-6264756 Forward-Port-Of: odoo/enterprise#120608
This update fixes a display issue where overtime details weren't showing correctly in attendance records. The change reverses a condition in the system's settings, ensuring that overtime information is now accurately presented for all employee attendance records, regardless of their overtime ruleset configuration.
Original PR description
Steps: * Create an extra-hours attendance for an employee that has overtime ruleset OR * Create an extra-hours attendance for an employee that has no overtime ruleset Issue: * The overtime details in the attendance view visibility condition was flipped Solution: * Reverse the visibility condition of the XML element Task: 6295710 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 Forward-Port-Of: odoo/odoo#270399 Forward-Port-Of: odoo/odoo#269744
This update fixes an error in the Luxembourg localization settings, ensuring the correct stock valuation account (301 Inventories of raw materials) is used instead of an expense account (60761 Merchandise). This ensures accurate financial reporting for Luxembourg businesses using Odoo.
Original PR description
**Problem:** Valuation account for luxembourg is currently 60761 Merchandise which is incorrect because it's an expense account. We should rather use a current asset account like 301 Inventories of raw materials **Steps to reproduce on a fresh db:** - create a new db with modules stock_account and accountant (without demo data) - On the 'fiscal localization setting' set the package as 'Luxembourg' and save - ativate the automatic accounting setting **Current Behavior:** The 'stock valuation account' appearing below the automatic accounting setting is : 60761 Merchandise **Expected behaviour:** It should be 301 Inventories of raw materials Forward-Port-Of: odoo/odoo#270048 Forward-Port-Of: odoo/odoo#269469
This update fixes an issue where imported Peppol/UBL vendor bills with 100% discounts were incorrectly processed. The fix ensures that a line with a LineExtensionAmount of 0 is correctly interpreted as a fully discounted line, preventing incorrect quantity and discount calculations. This improves the accuracy of imported financial data.
Original PR description
When importing a Peppol/UBL vendor bill containing a line with a 100% discount, the line was created in Odoo with quantity=1 and discount of 100*original_qty, instead of the expected…
When importing a Peppol/UBL vendor bill containing a line with a 100% discount, the line was created in Odoo with quantity=1 and discount of 100*original_qty, instead of the expected quantity=qty_original and discount=100%. This happened because the line-level branching in `_import_ubl_invoice_line_add_price_unit_quantity_discount` relied on the truthiness of `line_extension_amount` to detect whether the `LineExtensionAmount` node was present in the XML. a line with a genuine `<cbc:LineExtensionAmount>0</...>` was indistinguishable from a line where the node was missing, and fell through to the fallback branch intended for incomplete XML. That fallback reconstructs the quantity from `<cbc:BaseQuantity>`, ignoring `<cbc:InvoicedQuantity>`, and then computes the discount percentage against the wrong denominator. a `LineExtensionAmount` of 0 is the only legal way to express a fully discounted line, so this case must be distinguished from the node being absent. the fix is simply checking if the line exist not if its True opw-6176349 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#269322 Forward-Port-Of: odoo/odoo#265261
This update resolves an issue where sending NFC-e invoices would halt the POS synchronization process when IAP credits were exhausted. The fix prevents a system error and ensures that POS transactions continue to sync smoothly, even when IAP credit limits are reached. This improves the reliability of the POS system for businesses using the l10n_br_edi_pos module.
Original PR description
When sending an NFC-e, tax calculation is done by calling Avatax through IAP. If the IAP account has no credits left, iap_jsonrpc() raises an InsufficientCreditError. opw-6290857 Forward-Port-Of: odoo/enterprise#120700
This update corrects a previous issue where customers who had fully paid their outstanding balances no longer saw the Customer Statement button appear. The fix now checks for any past pay-later payment lines, ensuring that customers with a history of using pay-later options can still generate their statements. This improves the user experience for settled customers.
Original PR description
The override of _compute_has_moves was checking `total_due != 0` to set `has_moves` on for PoS pay_later customers. Once the customer is fully settled however, `total_due` is 0 and the check does not pass anymore, so `has_moves` goes back to `False` and the Customer Statement button hides for them, even though they had past pay_later payment lines. The fix is to check directly for any past pay_later `pos.payment` instead, which covers the cases where partner had used pay_later payment methods before, regardless if they have settled their total due or not. opw-6173760 Forward-Port-Of: odoo/enterprise#120911 Forward-Port-Of: odoo/enterprise#116536
This update resolves a minor issue in the marketing automation dashboard by correcting calculations for key engagement metrics. Specifically, the KPI engagement rate and its n-1 version are now accurately calculated, ensuring more reliable reporting on marketing campaign performance. This improves the accuracy of the data presented to marketing teams.
Original PR description
This commit fixes two issues:
- KPI engagement rate ('Mailing Statistics'!B16) should be =iferror((B7+B9)/B10),0)
- KPI engagement rate n-1 ('Mailing Statistics'!C16) should be =iferror((C7+C9)/C10),0)
Task: 5418449
Forward-Port-Of: odoo/enterprise#120962This update resolves an issue where opening the chat feature in the account module was unintentionally expanding detailed financial data. The change prevents this expansion, improving the user experience and ensuring data is only displayed when needed. This is a minor fix to enhance efficiency.
Original PR description
Before this commit, open_chatter use the selectStatementLine function that will unfold the line. But we don't want the unfold when opening the chatter. task-6306311 Forward-Port-Of: odoo/enterprise#120847