Daily updates from Odoo
Friday, May 29, 2026
21 changes · master
New functionality added to Odoo
This update introduces support for Indonesian tax returns within the Odoo Enterprise system. The new module, l10n_id_reports, allows users to generate the necessary reports required for tax compliance in Indonesia. This enhancement improves the system's ability to meet local regulations and reporting needs.
Original PR description
Create new module l10n_id_reports and add return type for Indonesia. task-6239169 Forward-Port-Of: odoo/enterprise#118467 Forward-Port-Of: odoo/enterprise#118304
This update introduces new VoIP phone extensions within the Odoo Enterprise system. These extensions route incoming calls directly to Odoo users, utilizing Wazo queues for efficient call management. This enhancement improves communication capabilities for users and allows for better control over phone services.
Enhancements to existing features
This update streamlines the process of generating AI chat channel names, ensuring faster response times for users. By moving channel name coordination to the frontend and optimizing the request flow, the system now prioritizes immediate AI response streaming. This change improves the overall user experience and responsiveness of the AI chat feature.
Original PR description
AI chat responses should start streaming as soon as the user posts a message. Channel name generation must not block the main agent generation. Move channel name coordination to the frontend and split it in two steps: `/ai/compute_channel_name` returns the generated name, then the client writes it to `discuss.channel` once no agent response stream is active. The flow is: first agent response done, channel name request, channel name write. Name request and write (and corresponding retries) are skipped while a stream is active. Once a name has been computed, later turns retry writing that same name instead of generating a new one from the new user message. Furthermore, we don't use the hidden message from any prompt button in the name request. TASK-ID: 6234727
This update simplifies product views for sales users by removing unnecessary information and enhancing clarity. Specifically, the aggregation on product versions has been disabled to prevent misleading totals. This change improves the user experience and provides more accurate data for sales teams.
Original PR description
Simplify product views by hiding non-relevant fields and improving clarity for sales users. - Disable aggregation on version field to avoid misleading totals task-6131606
This update introduces a new report for Hungary, specifically designed to generate the EC Sales list. Unlike the standard report, this version groups sales data by specific tax codes (B, C, K, R & V) instead of just by partner. It also includes the necessary tax return data for this report.
Original PR description
This report is a bit different from the main EC Sales list, instead of just grouping the lines on partner_id, we need to group on specifics tax.tags [B, C, K, R & V]. It also adds the tax returns for this same report. [task-4950959](https://www.odoo.com/odoo/project/967/tasks/4950959) Linked:https://github.com/odoo/odoo/pull/253556 Forward-Port-Of: odoo/enterprise#110448
This update enhances the way outplacement benefits are calculated within the payroll system for Belgian employees. The changes refine the process to more accurately reflect collaboration end scenarios, ensuring correct payroll deductions and reporting. This improves the accuracy of HR data and compliance with Belgian regulations.
Original PR description
Task: 6147432
This update simplifies how services are shown within the Obox interface. Instead of a complex JSON array, services are now displayed as easily readable tags, enhancing the user experience. This change improves clarity and makes it easier for users to identify and select available services.
Original PR description
instead of displaying services on the Obox as a JSON array, we parse and display tags instead. <img width="628" height="215" alt="image" src="https://github.com/user-attachments/assets/694af71d-72f1-4e64-b435-768f79c82470" />
Resolved issues and error corrections
This update addresses broken templates within the social module following the recent owl3 migration. The migration caused several visual issues and inconsistencies in the social feed display. This fix restores the correct functionality and appearance of the social templates.
Original PR description
Bug === Since the owl3 migration, a lot of templates are broken in social. Task-6241607
This update fixes a problem where tax predictions were incorrectly blocking useful suggestions on invoices. Now, predictions only run when a new description is entered, ensuring accurate suggestions. Additionally, the prediction logic has been simplified and consolidated for better performance and easier future updates.
Original PR description
The confidence threshold (requiring a 10% ranking advantage to confirm a prediction) was a poor proxy for its actual goal: avoiding unwanted overwrites of values the user had already set. It blocked…
The confidence threshold (requiring a 10% ranking advantage to confirm a prediction) was a poor proxy for its actual goal: avoiding unwanted overwrites of values the user had already set. It blocked helpful predictions in ambiguous cases while still allowing unwanted ones. Replace it with a direct check: disable prediction entirely when the line already carried a label before the current edit. This is implemented by overriding `onchange` to inspect the pending form values and inject a context key before `_onchange_name_predictive` fires. Predictions now only run on a blank slate — the first time a description is typed — which is exactly when they are useful. The "anything is better than nothing" philosophy then applies freely, without needing an artificial threshold. At the same time, consolidate all field predictions (account, taxes, product, deductible amount) into a single SQL query via a `_predictive_field_getter` registry, making the feature cheaper to run and straightforward to extend. Note: the previous implementation seeded account predictions with account names from the chart of accounts, improving cold-start accuracy for partners with no history. This is dropped as a trade-off for the simpler design. task-6138749
This update corrects a flaw in the FAIA report generation where a supplier's ID was incorrectly linked to a customer record. This issue arose due to differing criteria used to determine customer vs. supplier status within the accounting system. The fix ensures the FAIA report accurately reflects supplier relationships as defined by the company's financial data.
Original PR description
## Steps to reproduce: 1. Install `l10n_lu_reports`, swap to the LU company 2. Look at the partner Azure Interior. 1. They have no open balances on `asset_receivable` or `liability_payable` accounts.…
## Steps to reproduce:
1. Install `l10n_lu_reports`, swap to the LU company
2. Look at the partner Azure Interior.
1. They have no open balances on `asset_receivable` or `liability_payable` accounts.
2. Their `supplier_count` is higher than their `customer_count`.
3. Navigate to Accounting > Reporting > General Ledger.
4. Select the 2026 fiscal year.
5. Select gear > FAIA report.
6. Open the downloaded file. Notice:
1. Azure Interior is listed under /MasterFiles/Customers/Customer.
2. There are no /MasterFiles/Suppliers.
3. Azure Interior's ID (14 in this case) is referenced in a /SupplierID section.
7. Take a gander at the official XSD for LU [1]. The SupplierID must match an element in /MasterFiles/Suppliers.
Video: [2]
## Explanation
This is one of several errors found with the FAIA export. See PR #113316 for more.
It's possible to have a /SupplierID listed on a /Transaction/Line element but not have a /Suppliers/Supplier element that it refers to. This is not valid according to the FAIA report's schema [1].
This happens because /Transaction/Line and /MasterFiles use different criteria to determine if a partner is a Customer or a Supplier.
The element /Transaction/Line [3] determines this from the `partner_vals['type']` value [4]. This value is 'customer' or 'supplier' and is determined by comparing the ResPartner fields `customer_rank` and `supplier_rank`. In case of a tie, the partner is assigned as a 'supplier'.
The element /MasterFiles allows a partner to be both a Customer and a Supplier via `partner_vals['types']` [5]. Partners with an open `asset_receivable` balance at the start or end of the reporting period are listed as Customers [6]. Likewise, partners with an open `liability_payable` balance are listed as Suppliers [7]. If there are no open balances, partners are put in the Customer list by default.
The XSD validation error will not show up in a standard Runbot database because the namespace for the XSD is incorrect. If you manually fix the XSD namespace (`xmlns:doc` instead of `xmlns`) and use xmllint to check a generated XML against the XSD, it will raise the following error.
> No match found for key-sequence ['14'] of keyref 'RefGLTransactionLineSupplier'. Downloads/general_ledger (5).xml fails to validate
[1] https://pfi.public.lu/dam-assets/backup/FAIA/FAIA/XSD_Files.zip. I will note that there are three XSDs. Version A has a different namespace and appears to be more restrictive. The "full" XSD document does not raise these errors.
[2] https://drive.google.com/file/d/1xeULpCcGgZk-kYcCjBTKxcfv4ICYRzaB/view?usp=sharing
[3] https://github.com/odoo/enterprise/blob/434d88960abb5e424fdc1106fc93935d328bff78/account_saft/data/saft_report.xml#L244-L248
[4] https://github.com/odoo/enterprise/blob/434d88960abb5e424fdc1106fc93935d328bff78/account_saft/models/account_general_ledger.py#L299
[5] https://github.com/odoo/enterprise/blob/434d88960abb5e424fdc1106fc93935d328bff78/account_saft/models/account_general_ledger.py#L303-L309
[6] https://github.com/odoo/enterprise/blob/434d88960abb5e424fdc1106fc93935d328bff78/account_saft/data/saft_report.xml#L153
[7] https://github.com/odoo/enterprise/blob/434d88960abb5e424fdc1106fc93935d328bff78/account_saft/data/saft_report.xml#L173
opw-6107107
Forward-Port-Of: odoo/enterprise#117799This update corrects a rounding error that previously caused the withholding base amount on invoices to exceed the total invoice amount. The fix ensures accurate calculations by limiting the withholding base amount to prevent over-reporting. This improves invoice accuracy and compliance.
Original PR description
**PROBLEM** In some case, because of rounding issues, the withholding base amount can be bigger than the total amount of the invoice, which should not be the case. **STEP TO REPRODUCE** 1. Install…
**PROBLEM** In some case, because of rounding issues, the withholding base amount can be bigger than the total amount of the invoice, which should not be the case. **STEP TO REPRODUCE** 1. Install l10n_pe_edi 2. Create an invoice with those 2 lines: qty: 300, unit_price: 0.481936, tax: VAT 18% + 3% IGV Withholding qty: 300, unit_price: 0.747376, tax: VAT 18% + 3% IGV Withholding 3. Confirm the invoice, and send the xml (if this fail, you may have to change the name of the invoice, using odoo inspector or other means). 4. Open the xml, and notice the base amount for the allowance on the document level is 435.18 which is bigger than the invoice payable amount. **CAUSE** We exclude the withholding taxes to compute the invoice taxInclusiveAmount. When computing this amount, we round the line base and the tax total of the VAT 18% tax leading to the result of 435.17. When creating the allowance node for the Withholding taxes, the base used for the withholding taxes is the sum of the line base, and the tax total of previous tax NOT rounded. There is no easy way to change the withholding tax computation, so we just limit the base to not be bigger than the invoice total when there is rounding issues. opw-6010388 Forward-Port-Of: odoo/enterprise#113689
This update fixes a bug that prevented accurate IT tax closing validation, particularly when dealing with quarterly reporting across year boundaries. The changes ensure correct handling of debit/credit reporting and prevent system errors, leading to more reliable tax calculations.
Original PR description
Description of the issue this commit addresses: The IT tax closing validation compared month numbers only, which broke across year boundaries and could reject valid quarterly progressions. It also assumed a balance column existed in monthly VAT report lines, but this report uses debit/credit columns, which could trigger a traceback. --- Desired behavior after this commit is merged: This commit computes the period gap with year-aware month deltas and aligns the allowed gap with periodicity (monthly or quarterly). It also checks VP lines using balance when present, or debit/credit as fallback, preventing crashes and ensuring consistent tax closing validation. --- opw-6131080 Forward-Port-Of: odoo/enterprise#118450 Forward-Port-Of: odoo/enterprise#117428
This update resolves a crash when generating PDF reports for Vietnamese tax declarations, particularly Appendix 142. It also corrects data references and ensures reports are named and ordered correctly to align with Vietnamese tax form standards, improving data accuracy and reliability.
Original PR description
This commit resolves multiple issues in the Vietnamese accounting reports module: 1. Appendix 142 PDF Export Crash: - Extracted the PDF sectioning logic into a new `_get_pdf_sections` method. - Added…
This commit resolves multiple issues in the Vietnamese accounting reports module: 1. Appendix 142 PDF Export Crash: - Extracted the PDF sectioning logic into a new `_get_pdf_sections` method. - Added safeguards to gracefully handle cases where the report has no lines, preventing an `IndexError` when attempting to access `lines[-1]`. - Added unit tests to ensure empty lines are correctly parsed without crashing. 2. XML Data and Dependency Fixes: - Fixed an invalid `report_id` reference in `account_return_data.xml` by correctly pointing it to `l10n_vn_reports.l10n_vn_tax_report` instead of `l10n_vn.form_01_gtgt_report`. - Reordered the `__manifest__.py` data loading sequence. `account_tax_report_data.xml` now loads before `account_return_data.xml` to prevent "External ID not found" errors during module installation/upgrades. 3. Naming and Sequencing Improvements: - Renamed "Vietnamese Tax Report" to "VAT Declaration - 01/GTGT" to reflect the actual Vietnamese tax form accurately. - Added explicit `sequence` fields to the tax reports (VAT Declaration: 10, Appendix 142: 20) to ensure proper UI ordering. Task-6216318 Forward-Port-Of: odoo/enterprise#117974
This update resolves a potential issue that caused Out of Memory errors during the installation of the `sale_subscription` module on databases with many sales orders. The change ensures that newly added fields are correctly initialized to 'null' during installation, preventing performance bottlenecks and installation failures.
Original PR description
### Description: Installing `sale_subscription` on databases with a large number of `sale.order` and `sale.order.line` can cause Out of Memory (OOM) errors. The issue comes from two stored compute fields, `last_invoiced_date` and `plan_id`. Since these depend on newly added fields, they should default to `null` during installation. ### Reference: opw-6201267 Forward-Port-Of: odoo/enterprise#118419 Forward-Port-Of: odoo/enterprise#118008
This update resolves an issue where the 'Info & Tags' button was hidden in the mobile Documents app's kanban view. The fix adjusts CSS styling to ensure the chatter section is always visible and accessible, improving usability on mobile devices. This ensures users can easily access important document details.
Original PR description
**Steps to reproduce:** - Go to Documents app in mobile - Go to the kanban view - Add some files and select one - Click on `Info & Tags` button in the control panel - Reload the page - Chatter is not…
**Steps to reproduce:** - Go to Documents app in mobile - Go to the kanban view - Add some files and select one - Click on `Info & Tags` button in the control panel - Reload the page - Chatter is not displayed but the button is still enabled - Switching to the list view properly shows it **Issue:** We have two conflicting css styling on mobile: - `overflow-hidden` was added for mobile to avoid multiple scroll bars - `min-height: 100%` which is due to the default `o_kanban_ungrouped` in the controller css This means that the element is present at the bottom of the page, but we can't get to it manually. When re-enabling the action we are properly moved to the existing chatter (but we can't go back to the top). Also the documents panel should have a single scrollbar to display all the records, but we still need a way to scroll the messages of the chatter. **Fix:** Set `min-height: 0;` for documents kanban to ensure the chatter is still visible and accessible on mobile by default. This makes the chatter take the full available height when displayed. original overflow fix: https://github.com/odoo/enterprise/commit/945b9e2b1c6752bd905695aa40b0babcf38c50cd opw-6061993 Forward-Port-Of: odoo/enterprise#118134 Forward-Port-Of: odoo/enterprise#113168
This update resolves an issue where Selection fields in dark mode sign templates appeared unreadable due to white-on-white text. The fix ensures that form controls within PDF sign templates consistently display with appropriate contrast, regardless of the user's dark mode preference. This improves the user experience for all sign templates.
Original PR description
**Problem:** When the user has dark mode enabled and a sign template contains a Selection field, both the displayed value and the dropdown option list are unreadable: the selected value renders…
**Problem:** When the user has dark mode enabled and a sign template contains a Selection field, both the displayed value and the dropdown option list are unreadable: the selected value renders white-on-white in the field, and clicking the dropdown shows an empty-looking popup (white options on white system menu). **Steps to reproduce:** 1. Enable dark mode in user preferences 2. Open Sign > Templates > duplicate any template 3. Add a Selection field with a few options (e.g. Low / Medium / High) 4. Save and Sign Now 5. Reach the Selection field and click it 6. Observe: the dropdown options are invisible (white on white) and, after picking one, the selected value in the field is also invisible **Cause of the issue:** The Selection sign item is rendered with a native `<select>` element inside the PDF.js iframe (`sign_items.xml`, `t-if="type == 'selection'"` branch). The iframe's stylesheet (`sign/static/src/css/iframe.css`) declares the `select` rule with `background: transparent` but no explicit `color`, and never styles `<option>` at all. When the OS or the user activates dark mode, the iframe document resolves to a `color-scheme: light dark` root, so the browser's UA stylesheet paints form controls with the dark palette (white text). The popup background stays white (`<option>` has no explicit background), so options render white-on-white. The same UA-white propagates to the displayed value of the `<select>` inside the pink-tinted sign item, which is also nearly white. **Fix:** Pinning the `<select>` text color and the `<option>` color/background to fixed light-mode values restores predictable contrast inside the iframe regardless of the surrounding color scheme. We deliberately do not rely on `color-scheme: dark` here — that would only swap which side of the contrast issue we land on (browsers don't reliably honor it for `<option>` background painting), and the sign item background (the pink dashed default style) is itself light, so dark option text on a white popup is the readable target in all themes. opw-6197638 Forward-Port-Of: odoo/enterprise#117697
This update resolves a printing problem reported by a client who was unable to print without LNA. The fix addresses a missing check within the system, preventing errors during the printing process. This ensures consistent and reliable printing functionality.
Original PR description
Based on the ticket below the client is experiencing an issue when printing without LNA. This PR fixes the missing key check opw-https://www.odoo.com/odoo/project/49/tasks/6232008 Forward-Port-Of: odoo/enterprise#118101 Forward-Port-Of: odoo/enterprise#118005
This update resolves an issue where benefit calculations incorrectly processed property fields within employee contracts. The fix prevents property fields from being used as cost inputs, ensuring accurate benefit cost computations. This ensures consistent and reliable payroll processing.
Original PR description
**Steps to Reproduce:** 1. Install `hr_contract_salary_payroll` with demo data. 2. Open Employee (e.g; Abigail Peterson) > Payroll tab > Gear Icon > Edit Properties. 3. Add a new property for Payroll…
**Steps to Reproduce:** 1. Install `hr_contract_salary_payroll` with demo data. 2. Open Employee (e.g; Abigail Peterson) > Payroll tab > Gear Icon > Edit Properties. 3. Add a new property for Payroll and fill in the value also. 4. Go to Payroll > Configuration > Benefits. 5. Create a new benefit with: Salary Structure Type: Worker Cost Field: Payroll Properties (Employee Contract) 6. Save the record. Video: https://drive.google.com/file/d/1gHRkDW5G0bURlo9_IRgCnvqpE-8Fk1xa/view?usp=drive_link **Error:** `TypeError - unsupported operand type(s) for +: 'int' and 'Property'` **Cause:** The method `_get_benefits_costs()` directly sums values using: ``` self[benefit.cost_field] ``` When the selected cost field is a property field, it returns a **fields_properties.Property** object instead of a numeric value, and this object is not directly compatible with the arithmetic sum operation. Before 19.0, property fields were not allowed to be selected as a cost field - [1]. **Fix:** This commit prevents selecting property fields as cost fields from the list of supported field types. [1] : https://github.com/odoo/enterprise/blob/04224abcc7eec1c81df7ad57a9213fd091774888/hr_contract_salary/models/hr_version.py#L183 sentry-7388663038 Forward-Port-Of: odoo/enterprise#116511 Forward-Port-Of: odoo/enterprise#113238
This update fixes an issue where users weren't notified when an expense authorization status changed (e.g., cancelled). The system now correctly responds to authorization updates, ensuring users are informed about the status of their expenses. This improves transparency and accuracy in expense management.
Original PR description
## [FIX] hr_expense_stripe: Fix error messages coherence Fix the incoherent punctuation ## [FIX] hr_expense_stripe: Fix reversed and expired authorizations Before this, when receiving an `issuing_authorization.updated` event, the event would be ignored and the user would never know that the expense had been cancelled opw-6210055 Forward-Port-Of: odoo/enterprise#118650 Forward-Port-Of: odoo/enterprise#117257
This update resolves an issue where timesheet data wasn't consistently synchronized between Odoo tabs. The fix ensures that changes made in one tab's timesheet are accurately reflected in all other tabs, improving data accuracy and user experience. This was caused by a flaw in how the system handled focus events and data persistence.
Original PR description
This PR reworks the implementation of https://github.com/odoo/enterprise/pull/116007 Task-6180394 Forward-Port-Of: odoo/enterprise#118232 Forward-Port-Of: odoo/enterprise#117914
A crash in the template editor within Odoo 19.4 has been resolved. The issue occurred when users navigated back to the template list after editing a template, resulting in a blank screen. This fix ensures proper state cleanup during editor closure, improving stability and preventing disruptions for users.
Original PR description
Version: - saas 19.4 Steps to reproduce: - Open a template in the template editor - Click the Templates button to go back to the template list Issue: Clicking the Templates button while in the template editor caused a blank screen and a js crash due to incorrect state cleanup when the editor was closing. Fix: Fixed the crash by correctly clearing the editor state through the parent component instead of directly writing to a prop when the template editor closes. taskid - 6247092