Daily updates from Odoo
Tuesday, January 20, 2026
35 changes
4 changes
Enhancements to existing features
This update expands Odoo's ability to handle Ukrainian Tax Identification Numbers (TINs). Previously, only 12-digit numbers were accepted, but now 8-digit numbers (and variations with 'UA' prefixes) are supported. This ensures accurate data entry for Ukrainian businesses and avoids errors related to incorrect length restrictions.
Original PR description
with this commit:- - We are adding support for Ukrainian Tax ID numbers of 8 digits, which was 12 previously. - The following formats are now accepted: - National company numbers: 8 digits (e.g., 12345678) - European company numbers: 8 digits prefixed with 'UA' (e.g., UA12345678) - Individual numbers: 12 or 10 digits (e.g., 123456789012) - This change allows users to enter Ukrainian TINs that were previously incorrectly rejected due to length restrictions. task-5414806 opw-5373469 Forward-Port-Of: odoo/odoo#243258
This update streamlines the accounting process for Ecuadorian businesses within Odoo by consolidating expense accounts and adding a new account for direct employee benefits. It also simplifies reconciliation processes for income-related expense accounts, ensuring accurate financial reporting.
Original PR description
Improve the distribution of expense and cost of revenue accounts in Ecuadorian localization We avoided not creating subcategories of expenses by eliminating the group called "Other employee benefit plan expense", which generated duplicity in the accounts. We fixed this by merging the accounts into the main "Employee benefit plan expense" group. Additionally, the account "Other employee benefits' was added to record any other benefits granted directly by the Ecuadorian companies. This ensures a better organization of the accounting setup. Mark as non-reconcilable the expense accounts (salaries and wages, travel expenses, contributions, etc) to avoid unnecessary reconciliation processes, these accounts are income statements and they are not accounts payable/receivable, therefore, they are closed at the end of the accounting period ### opw-4846355 Forward-Port-Of: odoo/odoo#208047
This update enhances the kiosk payment process by centralizing IoT communication through a new service, `iot_http`. This improves reliability and security by handling various IoT protocols for payment requests, ensuring smoother transactions for customers.
Original PR description
We now use the `iot_http` service to handle all IoT available protocols to send payment requests. Forward-Port-Of: odoo/enterprise#104811
This update enhances the flexibility of Odoo's website builder by introducing a new system for modifying shape groups. Plugins can now directly adjust these groups, allowing for more dynamic and customizable website designs. This change improves the ability to tailor website layouts to specific business needs.
Original PR description
This commit defines `image_shape_groups_providers` and `background_shape_groups_providers` as new plugin resources. These resources return functions that receive the current shape groups, allowing plugins to mutate them directly or return groups to be merged into the final configuration. Forward-Port-Of: odoo/odoo#243121
2 changes
Enhancements to existing features
This update expands Odoo's ability to handle Ukrainian Tax Identification Numbers (TINs). Previously, only 12-digit numbers were accepted. Now, 8-digit numbers (and 10 or 12-digit variations) are supported, resolving an issue where Ukrainian users were unable to correctly input their TINs.
Original PR description
with this commit:- - We are adding support for Ukrainian Tax ID numbers of 8 digits, which was 12 previously. - The following formats are now accepted: - National company numbers: 8 digits (e.g., 12345678) - European company numbers: 8 digits prefixed with 'UA' (e.g., UA12345678) - Individual numbers: 12 or 10 digits (e.g., 123456789012) - This change allows users to enter Ukrainian TINs that were previously incorrectly rejected due to length restrictions. task-5414806 opw-5373469 Forward-Port-Of: odoo/odoo#243258
This update streamlines the accounting process for Ecuadorian businesses within Odoo. It simplifies expense categorization by consolidating accounts and adding a new account for specific benefits, while also preventing unnecessary reconciliation for income statement accounts. This improves accuracy and efficiency.
Original PR description
Improve the distribution of expense and cost of revenue accounts in Ecuadorian localization We avoided not creating subcategories of expenses by eliminating the group called "Other employee benefit plan expense", which generated duplicity in the accounts. We fixed this by merging the accounts into the main "Employee benefit plan expense" group. Additionally, the account "Other employee benefits' was added to record any other benefits granted directly by the Ecuadorian companies. This ensures a better organization of the accounting setup. Mark as non-reconcilable the expense accounts (salaries and wages, travel expenses, contributions, etc) to avoid unnecessary reconciliation processes, these accounts are income statements and they are not accounts payable/receivable, therefore, they are closed at the end of the accounting period ### opw-4846355 Forward-Port-Of: odoo/odoo#208047
3 changes
Enhancements to existing features
This update expands Odoo's ability to handle Ukrainian Tax Identification Numbers (TINs). Previously, only 12-digit numbers were accepted, but now 8-digit numbers – including those prefixed with 'UA' for European companies – are supported. This ensures accurate data entry for Ukrainian businesses and avoids errors.
Original PR description
with this commit:- - We are adding support for Ukrainian Tax ID numbers of 8 digits, which was 12 previously. - The following formats are now accepted: - National company numbers: 8 digits (e.g., 12345678) - European company numbers: 8 digits prefixed with 'UA' (e.g., UA12345678) - Individual numbers: 12 or 10 digits (e.g., 123456789012) - This change allows users to enter Ukrainian TINs that were previously incorrectly rejected due to length restrictions. task-5414806 opw-5373469 Forward-Port-Of: odoo/odoo#243258
This update streamlines the accounting process for Ecuadorian businesses within Odoo. It simplifies expense categorization by consolidating accounts and adds a new account for direct employee benefits, improving organization and accuracy. Additionally, it prevents unnecessary reconciliation for income-related expense accounts.
Original PR description
Improve the distribution of expense and cost of revenue accounts in Ecuadorian localization We avoided not creating subcategories of expenses by eliminating the group called "Other employee benefit plan expense", which generated duplicity in the accounts. We fixed this by merging the accounts into the main "Employee benefit plan expense" group. Additionally, the account "Other employee benefits' was added to record any other benefits granted directly by the Ecuadorian companies. This ensures a better organization of the accounting setup. Mark as non-reconcilable the expense accounts (salaries and wages, travel expenses, contributions, etc) to avoid unnecessary reconciliation processes, these accounts are income statements and they are not accounts payable/receivable, therefore, they are closed at the end of the accounting period ### opw-4846355 Forward-Port-Of: odoo/odoo#208047
This update enhances the testing process for paying invoices using bank statement data. A new test helper has been introduced to streamline and standardize these tests, ensuring more reliable invoice payment processing within the Odoo system. This improves the overall stability and accuracy of invoice payments.
Original PR description
Forward-Port-Of: odoo/odoo#244281
2 changes
Enhancements to existing features
This update streamlines the accounting process for Ecuadorian businesses within Odoo. It simplifies expense categorization by consolidating accounts and adding a new account for direct employee benefits, improving overall organization. Additionally, expense accounts are now automatically closed at the end of the accounting period, reducing reconciliation efforts.
Original PR description
Improve the distribution of expense and cost of revenue accounts in Ecuadorian localization We avoided not creating subcategories of expenses by eliminating the group called "Other employee benefit plan expense", which generated duplicity in the accounts. We fixed this by merging the accounts into the main "Employee benefit plan expense" group. Additionally, the account "Other employee benefits' was added to record any other benefits granted directly by the Ecuadorian companies. This ensures a better organization of the accounting setup. Mark as non-reconcilable the expense accounts (salaries and wages, travel expenses, contributions, etc) to avoid unnecessary reconciliation processes, these accounts are income statements and they are not accounts payable/receivable, therefore, they are closed at the end of the accounting period ### opw-4846355 Forward-Port-Of: odoo/odoo#208047
This update ensures Odoo correctly handles the new 11% and 21% VAT rates introduced in Romania. By adding necessary tax mappings, the system now accurately reflects the latest Romanian VAT regulations and ensures proper fiscal position calculations.
Original PR description
The new 11% and 21% taxes introduced with the updated Romanian VAT law were added with this commit https://github.com/odoo/odoo/commit/2026212d0f7ffc217be3c6a2ff2abe5288c18afb , but some tax mappings were missing. This commit completes the setup by adding the required tax mappings, ensuring the new rates work correctly with fiscal positions. task-5480159 Forward-Port-Of: odoo/odoo#243452
8 changes
Enhancements to existing features
This update expands Odoo's ability to handle Ukrainian Tax Identification Numbers (TINs). Previously, the system only accepted 12-digit numbers. Now, it supports 8-digit numbers for Ukrainian companies and 12 or 10-digit numbers for individuals, resolving an issue where Ukrainian TINs were incorrectly rejected.
Original PR description
with this commit:- - We are adding support for Ukrainian Tax ID numbers of 8 digits, which was 12 previously. - The following formats are now accepted: - National company numbers: 8 digits (e.g., 12345678) - European company numbers: 8 digits prefixed with 'UA' (e.g., UA12345678) - Individual numbers: 12 or 10 digits (e.g., 123456789012) - This change allows users to enter Ukrainian TINs that were previously incorrectly rejected due to length restrictions. task-5414806 opw-5373469 Forward-Port-Of: odoo/odoo#243258
This update ensures that only employees within our company can be designated as HR Responsible. Previously, external users could be assigned this role, leading to potential data inconsistencies. This change improves data integrity and prevents incorrect assignments.
Original PR description
Updated the "HR Responsible" field under the Approvers group in the Employee settings to ensure better data integrity. Changes: Added a domain filter to the hr_responsible_id field. Restricted selection to Internal Users only (share=False). Restricted selection to users belonging to the current company. This prevents external or portal users from being incorrectly assigned as HR responsibles and ensures cross-company data isolation. 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
This pull request updates the NCM (National Commerce) code list for Brazil, aligning with the latest tax regulations. It removes outdated codes and incorporates new ones, ensuring accurate tax calculations and compliance within the Odoo Enterprise system. This update is part of a larger upgrade process.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It removes expired codes and introduces new ones. **task**-5381617 Upgrade PR - https://github.com/odoo/upgrade/pull/9068
This update enhances the VoIP softphone by clearly distinguishing between colleagues and external contacts within the contacts list and during calls. It displays a colleague's IM status, allowing users to quickly see if they are available. Additionally, the update removes unnecessary UI hiding and improves the overall user experience.
Original PR description
(this was originally at https://github.com/odoo/enterprise/pull/102816, which will be used to merge the preparation commits while revisiting the spec for the main work with designers) When using the VoIP softphone, when entering a number, matching contacts are displayed. Those are also displayed when going to the contacts list or recent calls list. A contact name is also displayed during a call and other various in-call elements. In all cases, the contact might be a partner (i.e. "random person with a phone number") or another user from the database (i.e. "a colleague"). With this commit, the latter will now have their IM Status displayed next to their name/avatar, allowing to distinguish colleagues from partners more easily, and know if the colleague is connected/available or not as a bonus as well. This also removes some overflow-hidden from the UI, it is always bad and they were now hiding the IM Status partially for no reason. task-5404888
This update makes the 'Open Cashbox' button in the Point of Sale (PoS) interface more visually prominent and easier to find. This small UI change enhances the user experience for staff managing transactions and improving efficiency. It's a minor aesthetic improvement.
Original PR description
Little UI changes on the Open Cashbox button in the PoS. task: 5441682 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244084 Forward-Port-Of: odoo/odoo#243224
This update adjusts the structure of website headings (hX) across multiple Odoo modules to enhance search engine optimization (SEO) and improve accessibility for users. By implementing a more logical heading hierarchy, we're making it easier for both search engines and users to navigate and understand our website content.
Original PR description
*: auth_totp_portal, website_event, website_event_booth_sale, website_forum, website_sale, website_sale_comparison For SEO and accessibility reasons, this commit replaces incorrect heading elements (hX) with appropriate hierarchy on pages lacking proper structure. task-5231498
This update corrects the structure of website appointment pages to improve accessibility and search engine optimization. The changes ensure proper heading hierarchy, addressing issues where headings were incorrectly used, which can negatively impact user experience and search rankings. This enhancement aligns with best practices for website design.
Original PR description
For SEO and accessibility reasons, this commit replaces incorrect heading elements (hX) with appropriate hierarchy on pages lacking proper structure. task-5231498
This update aligns the work time rate calculations across the HR and Resource modules, eliminating duplication and potential inconsistencies. It also adds restrictions to prevent unauthorized changes to the work time rate for companies, improving data integrity. This ensures a more reliable and streamlined payroll process.
Original PR description
Current behavior before PR: . The work time rate is currently computed separately in two different modules: hr_payroll (version model) and resource (resource_calendar model). Although they are…
Current behavior before PR: . The work time rate is currently computed separately in two different modules: hr_payroll (version model) and resource (resource_calendar model). Although they are calculated independently, both values represent the same concept and are functionally equivalent. This duplication can lead to inconsistencies and unnecessary complexity in maintenance . full_time_required_hours is not modifiable in the UI for a calendar linked to a company, but this restriction is not enforced at the database or back-end level. Desired behavior after PR is merged: . Synchronize the work time rate fields between the hr_payroll and resource modules to ensure they are related consistent . Add API constraints on full_time_required_hours to prevent modify its value if it belongs to a company . Modify the relevant tests to ensure consistency with the newly introduced full_time_required_hours constraints. task-5429287 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
7 changes
Enhancements to existing features
This update expands Odoo's ability to handle Ukrainian Tax Identification Numbers (TINs). Previously, the system only accepted 12-digit numbers, preventing users from correctly entering 8-digit Ukrainian company numbers. This change ensures accurate data entry and processing for Ukrainian businesses.
Original PR description
with this commit:- - We are adding support for Ukrainian Tax ID numbers of 8 digits, which was 12 previously. - The following formats are now accepted: - National company numbers: 8 digits (e.g., 12345678) - European company numbers: 8 digits prefixed with 'UA' (e.g., UA12345678) - Individual numbers: 12 or 10 digits (e.g., 123456789012) - This change allows users to enter Ukrainian TINs that were previously incorrectly rejected due to length restrictions. task-5414806 opw-5373469 Forward-Port-Of: odoo/odoo#243258
This update corrects a previous issue where the Apps application incorrectly displayed zero counts for industry modules. By adding version information to the route arguments, the system now accurately reflects the number of modules by category, aligning with recent changes in the apps.odoo.com API.
Original PR description
Before this commit, the count of industry modules by category in Apps application was always 0. With the change of API of apps.odoo.com, there is a possibility to display the exact count by category. In this aim, this commit adds the version to the route arguments such that the count is correctly displayed. task-5222706
This update improves the accuracy of Ecuadorian accounting by streamlining expense account categories and adding support for 8% VAT. Specifically, redundant expense groups have been consolidated, and expense accounts like salaries and wages are now automatically closed at the end of each accounting period, reducing reconciliation efforts.
Original PR description
Improve the distribution of expense and cost of revenue accounts in Ecuadorian localization We avoided not creating subcategories of expenses by eliminating the group called "Other employee benefit plan expense", which generated duplicity in the accounts. We fixed this by merging the accounts into the main "Employee benefit plan expense" group. Additionally, the account "Other employee benefits' was added to record any other benefits granted directly by the Ecuadorian companies. This ensures a better organization of the accounting setup. Mark as non-reconcilable the expense accounts (salaries and wages, travel expenses, contributions, etc) to avoid unnecessary reconciliation processes, these accounts are income statements and they are not accounts payable/receivable, therefore, they are closed at the end of the accounting period ### opw-4846355 Forward-Port-Of: odoo/odoo#208047
This update enhances the payment process for self-order kiosks by utilizing a new IoT protocol. It centralizes payment requests through a more reliable HTTP service, streamlining transactions and improving kiosk functionality. This change focuses on stability and efficiency for self-service ordering.
Original PR description
We now use the `iot_http` service to handle all IoT available protocols to send payment requests.
This update simplifies the process of generating consolidated invoices from Point of Sale orders. Previously, invalid orders (like those already invoiced) would halt the entire process. Now, any problematic orders are automatically ignored, allowing users to generate invoices for the valid orders efficiently. This enhances bulk invoice generation capabilities.
Original PR description
When trying to create a consolidated invoice in the POS from multiple orders, if any of them would not be valid (i.e. invoice already generated, or order still in draft), then Odoo would throw an error and not do anything. Now the orders for which invoices can't be generated will just be ignored, but for the rest of the orders the invoices will be generated as usual. This should make it easier to bulk select and generate invoices only where necessary. Task-[5491082](https://www.odoo.com/odoo/project/1737/tasks/5491082) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the restaurant POS system by automatically summing guest counts when multiple linked tables are used. Previously, each table was tracked separately. Now, when tables are linked, the system combines guest numbers for a more accurate total. This improves reporting and management of customer counts.
Original PR description
When two tables are linked in the pos, we would like to sum the guests. Here an example : If Table 1 has two guests and Table 2 has three guests, then Table 1&2 will have five guests. task: 5490906 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update streamlines the process for managing product pricing tags. The 'update all' button has been removed, and now only the update button for edited products is available. This simplifies the user experience and reduces the potential for errors when updating pricing.
Original PR description
To ease update of pricer tags, we removed the "update all" button to only have the one that update edited products. Task: 5380332
5 changes
Enhancements to existing features
This update enhances the reliability of communication between Odoo and external services (IAP server) by allowing longer timeout periods for requests. Previously, a default 30-second timeout could cause delays when multiple external API calls were needed. Now, administrators can adjust the timeout to ensure these requests complete successfully, preventing potential disruptions to financial processing.
Original PR description
Some requests may require a longer timeout than the default 30 seconds when pinging the IAP server as they may need several external API calls. This commit adds a `request_timeout` argument to the `_make_request` method to allow specifying a custom timeout value for the request. 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
This update incorporates the latest Romanian VAT regulations, specifically the addition of 11% and 21% tax rates. The changes ensure that Odoo correctly handles these new rates within fiscal positions, maintaining accurate accounting and tax reporting for Romanian businesses.
Original PR description
The new 11% and 21% taxes introduced with the updated Romanian VAT law were added with this commit https://github.com/odoo/odoo/commit/2026212d0f7ffc217be3c6a2ff2abe5288c18afb , but some tax mappings were missing. This commit completes the setup by adding the required tax mappings, ensuring the new rates work correctly with fiscal positions. task-5480159 Forward-Port-Of: odoo/odoo#243452
This update simplifies and streamlines testing of accounting XML files by introducing a new helper function. This reduces complexity for developers, allowing them to easily save and update XML files within their tests, and provides a standardized way to manage ignored XML nodes for consistent test results.
Original PR description
> This is a backport of the merged https://github.com/odoo/odoo/pull/235565 - with a couple of improvements & adaptations to the test files. This commit adds helpers and improves on the way we assert…
> This is a backport of the merged https://github.com/odoo/odoo/pull/235565 - with a couple of improvements & adaptations to the test files. This commit adds helpers and improves on the way we assert XML files in `AccountTestInvoicingCommon` and all accounting test that extend from it. From now on, all accounting test code that assert an XML tree/string to an XML file should call the `assert_xml` helper, and design their test file name/location/etc. around this framework. This approach has a few major benefits: Assert / Save XML When testing XML files, we often need to perform create/read/update operations on the asserted XML to make sure it corresponds to the most updated/intended data. Previously, to save something to an XML, a developer would need to write their own local helpers to save the XML in the right directory. This was cumbersome and error-prone, so we decided to design a helper that allows developer to immediately save AND/OR update the asserted XML: to save/update an XML, we can simply add `SAVE_XML` as an additional test tags. Better test naming and optional subfolder management To better organize test files, the `assert_xml` method allows us to write just the test key name (without `.xml`), and the framework will automatically get the XML to assert/save from the `test_files` directory. An optional `subfolder` parameter is also added to allow writing to specific subfolder within `test_files`. Better `___ignore___` management in assertion XMLs Sometimes, we want to ignore a few XML node that are not relevant, or have content that are not deterministic (changes on every test run). To handle this, previously, developers would need to modify the assertion XML content by hand or write their own local script to do so. With this new framework, we just need to add an `ignore_schema.xml` file somewhere in the `test_files` directory. If put inside a subfolder, it will be applied with more priority towards the XML that are put on that specific subfolder. Save "pure" XML (before applying `___ignore___`) in temporary folder When calling `SAVE_XML`, before applying the ignore patches, the XML will be saved in a temporary folder (same folder as the screenshots for tours), so that developers can use them in external tests in the future, and for any other saving reasons. In addition, this commit also: - add `extra_tags` helper to save all the common tags for EDIs, for a better way to enable `EXTERNAL_MODE` testing inspired by `l10n_mx_edi` - convert some non-assert XML test helpers into a class method - refactor `l10n_mx_edi*` modules to use these helpers related-enterprise-PR: https://github.com/odoo/enterprise/pull/100409 task-4891206
This update organizes UBL test files for better compatibility with future move formats and improved schema validation. The test files have been moved to a more structured folder within the account_edi_ubl_cii module, streamlining testing and development efforts. This change supports ongoing improvements to the UBL invoice generation process.
Original PR description
This commit rearranges the UBL test files' subfolder to be one level higher, from `export/bis3/be` to `export/bis3/invoice/be`, in preparation for supporting different move formats and for better ignore schema support. task-4891206
This update optimizes how Odoo generates reports by grouping related domain searches. Previously, each report filter required a separate database query, leading to slow performance. This change combines multiple queries, significantly speeding up report generation times – specifically reducing the time to open the Generic Balance Sheet from 1 minute 35 seconds to 36 seconds.
Original PR description
Before this commit, the 'domain' engine was never batched: one expression to evaluate caused one SQL query to be run just for it. With this commit, we group domains that could be evaluated together. Essentially, when we have domains targetting the same many2one field of account.move.line (typically account_id, with conditions like 'account_id.code' or 'account_id.account_type'), we run only one SQL query for all of them, targetting all the move lines according to the report filters. Then, we iterate on its result for each domain to evaluate. When iterating over the results, we filter the ones we keep by searching separately on each traversing model (in our example, account.account), to isolate the ones that are actually targetted by each expression. Tested on our prod. With this, opening the Generic Balance Sheet goes from 1min 35s to 36s. opw-5130725
4 changes
Enhancements to existing features
This update adjusts the size of the 'Fapiao' field in the Chinese localization (l10n_cn) module to 20 characters. Previously, it was limited to 8 characters, which caused issues with longer invoice numbers. This change ensures accurate data capture and avoids data loss when recording Chinese invoices.
Original PR description
with this commit:- - We're changing the char size to 20 from 8. - We remove the constraint that prevents us from saving the record if the size is not 8. task-5501485
This update ensures our Peruvian EDI (l10n_pe_edi) tests accurately reflect recent changes in the UBL standard. Specifically, the tests now account for a new 'DeliveryParty' node that was added, ensuring proper processing of invoices according to current regulations. This improves the reliability of our Peruvian accounting module.
Original PR description
This commit is a part of a bigger commit on the community PR side. Tests on `l10n_pe_edi` have been updated to reflect the latest change; where the `DeliveryParty` node is now added (previously it was never filled). related-community-PR: https://github.com/odoo/odoo/pull/243590 task-4891206
This update enhances the spreadsheet module by adding logging when exporting large datasets, particularly during spreadsheet downloads, clipboard copies, and printing. It also restricts access to frozen or XLSX spreadsheet downloads to authorized users, improving data security and control.
Original PR description
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
This update enhances logging when exporting large amounts of data from Odoo spreadsheets, addressing potential performance issues. It now tracks data downloads, clipboard copies, printing, and freezing, providing better visibility into spreadsheet activity. Additionally, access to frozen or XLSX spreadsheet downloads has been restricted to authorized users.