Tuesday, November 25, 2025
23 changes · master
New functionality added to Odoo
This update introduces a new report in the Odoo Enterprise system, specifically designed to generate the Finnish EC Sales List report. This report provides Finnish businesses with detailed sales data for electronic commerce transactions, facilitating compliance and financial reporting.
Original PR description
The aim of this commit is adding the Finnish EC Sales List report. task-5126664 Forward-Port-Of: odoo/enterprise#99967 Forward-Port-Of: odoo/enterprise#95901
Enhancements to existing features
In this commit, we converted the payroll benefits into salary rules and adjusted the demo data. task-5122374.
Original PR description
In this commit, we converted the payroll benefits into salary rules and adjusted the demo data. task-5122374.
Resolved issues and error corrections
This update fixes an issue where the SAFT report incorrectly assigned the same account to both customers and suppliers. The change ensures customers are assigned the correct receivable account, resolving a discrepancy in the report's financial data. This improves the accuracy of the SAFT report for Romanian businesses.
Original PR description
### Issue: In the SAFT report both the Customer and the Supplier have the same account. ### Cause: In the XML there was probably a typo and both have `property_account_payable_id` as account. ### Solution: For the `Customers` node, use `property_account_receivable_id`. opw-5144009 Forward-Port-Of: odoo/enterprise#99196
Features or functions removed from Odoo
This update removes the functionality related to digital signatures from the Accountant Knowledge module. This change simplifies the module and aligns with a strategic decision to streamline document handling processes within Odoo Enterprise. The removal addresses a previously complex integration and reduces potential maintenance overhead.
Original PR description
task-5154292
This update improves the Tyro point-of-sale system's compatibility with self-order kiosks. Specifically, it allows kiosks to access product information and prevents receipt printing, while displaying an error message for unsupported features like surcharges and tips. This ensures a smoother user experience on kiosk systems.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/231190 This commit includes some small changes to make Tyro compatible with the kiosk: - Allow the `get_tyro_product_info` method to be called from the kiosk. - Don't try to print merchant receipts from the kiosk. - Show an error message if surcharges/tips are used in the kiosk, these are not yet supported. task-4882726
This update enhances the user experience of Odoo's payroll system by refining the visual presentation of pay run and employee payslip views. Specifically, minor formatting adjustments and label changes have been made to improve clarity and consistency.
Original PR description
- Replace '-' with '→' in Period on pay run payslip form - Change label 'payslip' to 'Payslip' in pay run kanban view - Remove kanban view from the Employee Payslips task-5163907
This pull request addresses improvements to the generation of UBL test files for Odoo's tax localization modules (GT and MX). Specifically, it streamlines XML processing and formatting for better test file structure and consistency, ensuring accurate validation of invoices.
Original PR description
When backporting to 18.0, we discovered a few improvement findings which are important to add in the original master version. - `_sort_xml_attributes` is reinventing the wheel. etree has a built in method- `canonicalize` which handles converting the XML to fit in to the `c14n` v2 standard, which already includes sorting of the attributes. We should use that instead of `_sort_xml_attributes`. - collect all namespaces from the whole document and put them on the root element, after the canonicalization process. This reverts the canonicalize standard of placing namespaces as deep inside the tree as possible which makes the generated UBL test ugly & crowded, as almost all element tag in UBL files are prefixed with namespaces. These collected namespaces are also sorted to ensure consistency. - remove xml_declaration on the test files related-community-PR: https://github.com/odoo/odoo/pull/237365 task-4891206
This update optimizes the way account reports are generated by removing unnecessary data transmission. Specifically, the 'column_group_key' is no longer sent in report configurations, leading to faster report loading times and improved system performance. This change enhances the overall user experience for financial reporting.
Original PR description
task-5164369
When grouping by the ``Status (audit_status)`` field in the Chart of Accounts view, A traceback will appear. Steps to reproduce the error: - Install ``Accounting`` module - Go to Accounting > Configuration > Chart of Accounts - Group By: ``Status (audit_status)`` field Traceback: ```py SyntaxError: non-integer constant in ORDER BY LINE 1: ..."res_company_id" IN (1)) GROUP BY 'todo' ORDER BY 'todo' ASC... ``` https://github.com/odoo/enterprise/blob/289e837ff80e2697cf337fe453aab09
Original PR description
When grouping by the ``Status (audit_status)`` field in the Chart of Accounts view,
A traceback will appear.
Steps to reproduce the error:
- Install ``Accounting`` module
- Go to Accounting > Configuration > Chart of Accounts
- Group By: ``Status (audit_status)`` field
Traceback:
```py
SyntaxError: non-integer constant in ORDER BY
LINE 1: ..."res_company_id" IN (1)) GROUP BY 'todo' ORDER BY 'todo' ASC...
```
https://github.com/odoo/enterprise/blob/289e837ff80e2697cf337fe453aab09e4c569fe6/account_reports/models/account.py#L184-L189
In the main view of ``acount.account``, ``working_file_id`` is not available
in the context,
So, ``working_file`` becomes ``False`` and ``status_query`` will be empty,
and it returns ``SQL('%s', 'todo')``.
So, ordering by a string literal ``todo`` leads to the above traceback.
sentry-6944233306
Forward-Port-Of: odoo/enterprise#97490This update corrects a technical issue where stopping ringtone playback caused unnecessary HTTP requests. The fix resets the element's source instead of setting it to null, preventing the browser from attempting to load a non-existent file and improving performance. This ensures ringtones play correctly.
Original PR description
Setting the src of an element to null triggers a GET HTTP request to /null. This is not the intended behavior; we want to reset the source so that it is not linked to any file, but the browser interprets it as an attempt to load a file called "null". This commit fixes the problem by resetting the source using removeAttribute instead. [Task-5349985](https://www.odoo.com/odoo/project/5778/tasks/5349985) Forward-Port-Of: odoo/enterprise#100146
This update ensures the commercial state field is only visible when processing transactions related to Colombian companies. Previously, it incorrectly appeared on moves for companies outside of Colombia, leading to potential confusion. This change improves data accuracy and simplifies the accounting process for users.
Original PR description
The commercial state field should only be visible on moves part of Colombian companies. Steps to reproduce: load the `l10n_co_dian` module and switch a non-Colombian company, then create a move -> the commercial event is visible. task: 5232473 Forward-Port-Of: odoo/enterprise#98750
This update ensures that filters applied to composite reports in the Odoo Enterprise accounting module work correctly across all sections of the report. Previously, filters weren't consistently applied, leading to inaccurate reporting results. This change aligns with standard Odoo reporting practices for filter behavior.
Original PR description
When using a composite report whose sections aren't used independently, enabling that filter on the composite report needs to enable it on their sections as well, else it won't show in the UI. This is the standard behavior for all report filters. Forward-Port-Of: odoo/enterprise#100240 Forward-Port-Of: odoo/enterprise#100148
This update fixes an issue where users couldn't find UNSPSC codes by typing partial numbers. The system now uses a flexible search method, allowing users to enter any part of the code and receive relevant results. This improves the accuracy and usability of product categorization.
Original PR description
**Steps to reproduce:** * Install the **Accounting** and **l10n_mx** modules. * Open any product form view. * Navigate to the **Accounting** tab. * In the *UNSPSC Category* field, start typing a numerical code such as **'10101500'**. **Observed behavior:** * No results are returned, even though the corresponding UNSPSC code exists in the database. **Cause:** * The `_search_display_name` method used an exact match (`=`) on the `code` field, preventing any partial or prefix-based lookup during user input. **Fix:** * Replace the exact-match domain on `code` with a partial match using `ilike`, allowing users to find UNSPSC codes by typing any part of the numerical sequence. opw-5244705 Forward-Port-Of: odoo/enterprise#100367 Forward-Port-Of: odoo/enterprise#99651
This update resolves an issue where shared Knowledge articles weren't displaying correctly for users accessing them through different website languages. The fix corrects a URL rewriting problem, ensuring articles are accessible regardless of the user's preferred language setting, improving website usability and knowledge sharing.
Original PR description
## Issue: When multiple languages are enabled on the website (English + another), sharing a public Knowledge article may block portal users from accessing it For example, if the website’s default…
## Issue: When multiple languages are enabled on the website (English + another), sharing a public Knowledge article may block portal users from accessing it For example, if the website’s default language is Spanish and the user opens the link, they are redirected to the home page and the article does not appear in the sidebar ## Cause: When accessing `/knowledge/article/...`, the `_match` route handler automatically rewrites the URL to `/en/knowledge/article/...` However, the website only recognizes `/es/knowledge/article/...`, so the rewritten URL is not valid As a result, the user falls back to `/knowledge/article/new`, which triggers a redirection to the home page ## Steps to reproduce: - Install Knowledge and Knowledge Website - Set Spanish and English (US) as available website languages - Set Spanish as default website language - Create an article in knowledge - Click Share and activate "Share to web" - Copy the link and open it in a private window (The article should be visible) - Log in as a Portal user - Open the link - The user is redirected to the home page and the article is missing from the sidebar opw-4916118 Forward-Port-Of: odoo/enterprise#96505
A technical issue was preventing users from creating or copying recruitment stage reports. This fix addresses a problem with a specific model within the 'hr_recruitment_reports' module, ensuring users can now successfully duplicate reports. This improves the usability of the hiring velocity reporting feature.
Original PR description
When the user tries to perform create or copy operations on the ``hr.recruitment.stage.report`` model, a traceback appears. Steps to reproduce the error: - Install ``hr_recruitment_reports`` module with demo data - Go to Recruitment > Reporting > Hiring Velocity > switch to cohort view > click on any record > select any record > duplicate Traceback: ```py ObjectNotInPrerequisiteState cannot insert into view 'hr_recruitment_stage_report' ``` ``hr.recruitment.stage.report`` model is ``_auto=False``, meaning that no database table is created for this model. When the user attempts to create or duplicate a record of that model, It will lead to the above traceback. sentry-7024266324 Forward-Port-Of: odoo/enterprise#99499
This update ensures that payroll officers, specifically those in the 'hr_payroll.group_hr_payroll_user' group, can now access the work entries menu within the Odoo Enterprise system. The issue was resolved by directly adding the group to the menu item, correcting a previous oversight that prevented access. The original, unused menu item has also been removed.
Original PR description
Payroll officers (group "hr_payroll.group_hr_payroll_user") have access to work entries and timeoffs but the menu item is not visible to them. This commit fixes this issue. Remarks: This task could have been done by prefixing the id of the menu item with the name of the module that originally defines it (hr_work_entry_enterprise) and the group in the new menu item would be able to see it. This was likely the intention when this menu item was introduced in this module but the author forgot to add the module prefix. However, this approach most likely will override the originally defined group in hr_work_entry_enterprise and this is not the intention. The current solution just appends the group to the menu item. The menu item was removed from the file as it serves no purpose and its introduction here was likely a mistake in the first place. Task-5149463
This update resolves a technical error preventing access to enrollment date information within the Odoo Enterprise system. The change adds necessary groups to correctly identify and retrieve this data, ensuring accurate reporting and payroll processing for users in the UAE. This fix improves data reliability and functionality.
Original PR description
add the groups for the version field runbot-error: 234072
This update fixes an issue where new contract versions created through the configurator would lose the employee's work address and location. The change ensures that this critical information is consistently saved, improving data accuracy and streamlining contract management processes. This update primarily impacts the HR contract management module.
Original PR description
When a new version is created by the configurator, we need to keep the work address and location. Forward-Port-Of: odoo/enterprise#100344
This update resolves an issue where using the 'force capture' feature in Stripe payments could lead to the creation of duplicate expense records. The fix ensures that only one expense is generated per transaction, improving data accuracy and reducing potential accounting errors. This primarily impacts users utilizing the Stripe expense capture functionality.
Original PR description
It's possible for multiples expenses to be created when using force capture. - Setup a company in EU and do the account onboarding - create a card - simulate a test purchase with force capture - after the webhook event issuing_transaction.* is received, an expense should have been created - now send again this event to the server (from the stripe dashboard or any other way) - a second expense will be created with the same transaction_id Forward-Port-Of: odoo/enterprise#99647
This update removes outdated and redundant testing utilities from the Odoo codebase. The changes replace these legacy functions with modern JavaScript helpers, improving code maintainability and efficiency. This work focuses on streamlining the testing process for various Odoo modules.
Original PR description
In this commit we remove legacy utils from codebase. To do that, we replace uses of old functions by hoot helpers or native javascript functions. task~5128972
This update removes the functionality for adding digital signatures within the Odoo Enterprise accounting module. This change simplifies the system and aligns with a strategic decision to streamline document workflows. The removal addresses a redundant feature and reduces complexity.
Original PR description
task-5154292
This update removes the outdated 'hasSelfAsMember' feature in WhatsApp messaging. The system now directly uses 'self_member_id' for identification, streamlining the process and improving reliability. This change ensures consistent and accurate messaging functionality.
Original PR description
Since https://github.com/odoo/odoo/pull/236494 `hasSelfAsMember` has been removed in favor of using `self_member_id` directly.
This update removes a redundant method in the Call model, streamlining the process of receiving data from the server. The framework now automatically handles data deserialization thanks to updated JavaScript field definitions, improving efficiency and reducing complexity. This change is a minor improvement.
Original PR description
The update method on Call was used to deserialize data from the server. Provided that fields are correctly defined on the JavaScript side, the framework is now smart enough to deserialize them automatically. This commit correctly defines the JS model fields and removes the useless update method.